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"))
}