override def handle()

in uploader/src/main/scala/com/gu/media/upload/GetTranscodingProgress.scala [12:32]


  override def handle(upload: Upload): Upload = {
    upload.metadata.runtime match {
      case SelfHostedUploadMetadata(ids) =>
        val jobs = ids.map(getJob)
        val progress = upload.progress

        val complete = jobs.forall(_.getStatus == "Complete")
        val error = jobs.exists(_.getStatus == "Error")

        if(error) {
          throw new IllegalStateException(s"Transcode failed: [${jobs.map(getDescription).mkString(",")}]")
        } else if(complete) {
          upload.copy(progress = progress.copy(retries = 0, fullyTranscoded = true))
        } else {
          upload.copy(progress = progress.copy(retries = progress.retries + 1))
        }

      case other =>
        throw new IllegalArgumentException(s"Unexpected runtime metadata $other")
    }
  }