def makeConsumer()

in app/services/MissingFilesReceiver.scala [48:104]


  def makeConsumer(channel:Channel): DefaultConsumer = {
    new DefaultConsumer(channel) {
      override def handleShutdownSignal(consumerTag: String, sig: ShutdownSignalException): Unit = super.handleShutdownSignal(consumerTag, sig)

      override def handleCancel(consumerTag: String): Unit = super.handleCancel(consumerTag)

      override def handleCancelOk(consumerTag: String): Unit = super.handleCancelOk(consumerTag)

      override def handleConsumeOk(consumerTag: String): Unit = super.handleConsumeOk(consumerTag)

      override def handleDelivery(consumerTag: String, envelope: Envelope, properties: AMQP.BasicProperties, body: Array[Byte]): Unit = {
        loadEvent(body) match {
          case Left(err)=>
            logger.error(s"Received invalid message with key ${envelope.getRoutingKey} from exchange ${envelope.getExchange}: ${err.getMessage}", err)

          case Right(messageData)=>
            handleEvent(messageData).map({
              case true=>
                channel.basicAck(envelope.getDeliveryTag, false)
              case false=>
                logger.warn("Could not handle message, leaving it on-queue")
                channel.basicNack(envelope.getDeliveryTag, false, true)
            })
        }
      }

      def handleEvent(messageData: MissingFile): Future[Boolean] = {
        if (messageData.project_id.toInt.isValidInt) {
          if (messageData.file_path.startsWith("/")) {
            if (messageData.file_path.startsWith("/Volumes/Multimedia2/Media Production/Assets/Branding")) {
              logger.debug(s"'Missing file' at path: ${messageData.file_path} is branding. Ignoring.")
            } else {
              logger.debug(s"Missing file at path: ${messageData.file_path} is used by project ${messageData.project_id}")
              missingAssetFileEntryDAO.entryFor(messageData.file_path, messageData.project_id.toInt).map({
                case Success(filesList) =>
                  if (filesList.isEmpty) {
                    //No file entries exist already, create one and proceed
                    logger.debug(s"Attempting to create record for missing file used by project ${messageData.project_id} at path ${messageData.file_path}")
                    missingAssetFileEntryDAO.save(MissingAssetFileEntry(None, messageData.project_id.toInt, messageData.file_path))
                  } else {
                    logger.debug(s"Missing file used by project ${messageData.project_id} at path ${messageData.file_path} already logged in the database.")
                  }
                case Failure(error) =>
                  logger.debug(s"Could not load data on the missing file used by project ${messageData.project_id} at path ${messageData.file_path}. Error was $error")
              })
            }
          } else {
            logger.debug(s"Recorded 'missing file' at path: ${messageData.file_path} does not with a /. Ignoring.")
          }

          Future(true)
        } else Future(false)
      }

      override def handleRecoverOk(consumerTag: String): Unit = super.handleRecoverOk(consumerTag)
    }
  }