def updateMetadata()

in common/src/main/scala/com/gu/media/youtube/YouTubeVideos.scala [51:96]


  def updateMetadata(id: String, metadata: YouTubeMetadataUpdate): Either[VideoUpdateError, String] =
    getVideo(id, List("snippet", "status")) match {
      case Some(video) => {

        findMistakesInDev(video) match {
          case None => {

            val oldSnippet = video.getSnippet

            val newSnippet = new VideoSnippet()
            newSnippet.setTags(metadata.tags.asJava)
            newSnippet.setTitle(metadata.title.getOrElse(oldSnippet.getTitle))
            newSnippet.setCategoryId(metadata.categoryId.getOrElse(oldSnippet.getCategoryId))
            newSnippet.setDescription(metadata.description.getOrElse(oldSnippet.getDescription))

            val status = video.getStatus
            metadata.license.foreach(status.setLicense)
            metadata.privacyStatus.map(_.toLowerCase).foreach(status.setPrivacyStatus)

            video.setSnippet(newSnippet)
            video.setStatus(status)

            val prettyMetadata = YouTubeMetadataUpdate.prettyToString(metadata)
            try {
              val request = client.videos()
                .update(List("snippet", "status").asJava, video)
                .setOnBehalfOfContentOwner(contentOwner)

              YoutubeRequestLogger.logRequest(YoutubeApiType.DataApi, YoutubeRequestType.UpdateVideoMetadata)
              request.execute()

              Right(prettyMetadata)
            }
            catch {
              case e: GoogleJsonResponseException => {
                val error: GoogleJsonError = e.getDetails
                val message = error
                Left(VideoUpdateError(error.toString + "\n metadata: " + prettyMetadata, Some(error.getMessage)))
              }
            }
          }
          case Some(error) => Left(VideoUpdateError(error))
        }
      }
      case _ => Left(VideoUpdateError("could not find video to publish"))
    }