in online_nearline/src/main/scala/VidispineMessageProcessor.scala [344:393]
def uploadShapeIfRequired(vault: Vault, fullPath: Path,
mediaIngested: VidispineMediaIngested,
nearlineRecord: NearlineRecord,
proxyFile:VSShapeFile): Future[Either[String, MessageProcessorReturnValue]] = {
logger.debug(s"uploadShapeIfRequired: Shape file is $fullPath")
val proxyFileName = uploadKeyForProxy(nearlineRecord, proxyFile)
val copyResult = for {
copyResult <- fileCopier.copyFileToMatrixStore(vault, proxyFileName, fullPath)
metadataUpdate <- buildMetadataForProxy(vault, nearlineRecord)
writeResult <- Future.fromTry((copyResult, metadataUpdate) match {
case (Left(_), _)=>Success( () ) //ignore
case (Right(proxyObjectId), Some(meta))=>
callUpdateMetadata(vault, proxyObjectId, meta)
case (Right(proxyObjectId), None)=>
logger.error(s"Could not get parent metadata for ${nearlineRecord.objectId} (${nearlineRecord.originalFilePath}). Deleting the copied proxy until we have the right metadata.")
Try {
val obj = vault.getObject(proxyObjectId)
obj.delete()
}
})
_ <- Future.fromTry(copyResult match {
case Left(_)=>Success( () )
case Right(proxyOid)=>updateParentsMetadata(vault, nearlineRecord.objectId, "ATT_PROXY_OID", proxyOid)
})
} yield copyResult
copyResult.flatMap({
case Right(objectId) =>
val record = nearlineRecord
.copy(
proxyObjectId = Some(objectId),
vidispineItemId = mediaIngested.itemId,
vidispineVersionId = mediaIngested.essenceVersion,
)
nearlineRecordDAO
.writeRecord(record)
.map(recId=>
Right(MessageProcessorReturnValue(
record
.copy(id = Some(recId))
.asJson
))
)
case Left(error) => Future(Left(error))
})
}