- const to = overrideTo ? overrideTo : videoObject.to
- const videoData = await videoActivityObjectToDBAttributes(channel, videoObject, to)
- video.set('name', videoData.name)
- video.set('uuid', videoData.uuid)
- video.set('url', videoData.url)
- video.set('category', videoData.category)
- video.set('licence', videoData.licence)
- video.set('language', videoData.language)
- video.set('description', videoData.description)
- video.set('support', videoData.support)
- video.set('nsfw', videoData.nsfw)
- video.set('commentsEnabled', videoData.commentsEnabled)
- video.set('waitTranscoding', videoData.waitTranscoding)
- video.set('state', videoData.state)
- video.set('duration', videoData.duration)
- video.set('createdAt', videoData.createdAt)
- video.set('publishedAt', videoData.publishedAt)
- video.set('views', videoData.views)
- video.set('privacy', videoData.privacy)
- video.set('channelId', videoData.channelId)
-
- await video.save(sequelizeOptions)
-
- // Don't block on request
- generateThumbnailFromUrl(video, videoObject.icon)
- .catch(err => logger.warn('Cannot generate thumbnail of %s.', videoObject.id, { err }))
-
- // Remove old video files
- const videoFileDestroyTasks: Bluebird<void>[] = []
- for (const videoFile of video.VideoFiles) {
- videoFileDestroyTasks.push(videoFile.destroy(sequelizeOptions))
+ const to = options.overrideTo ? options.overrideTo : options.videoObject.to
+ const videoData = await videoActivityObjectToDBAttributes(options.channel, options.videoObject, to)
+ options.video.set('name', videoData.name)
+ options.video.set('uuid', videoData.uuid)
+ options.video.set('url', videoData.url)
+ options.video.set('category', videoData.category)
+ options.video.set('licence', videoData.licence)
+ options.video.set('language', videoData.language)
+ options.video.set('description', videoData.description)
+ options.video.set('support', videoData.support)
+ options.video.set('nsfw', videoData.nsfw)
+ options.video.set('commentsEnabled', videoData.commentsEnabled)
+ options.video.set('downloadEnabled', videoData.downloadEnabled)
+ options.video.set('waitTranscoding', videoData.waitTranscoding)
+ options.video.set('state', videoData.state)
+ options.video.set('duration', videoData.duration)
+ options.video.set('createdAt', videoData.createdAt)
+ options.video.set('publishedAt', videoData.publishedAt)
+ options.video.set('originallyPublishedAt', videoData.originallyPublishedAt)
+ options.video.set('privacy', videoData.privacy)
+ options.video.set('channelId', videoData.channelId)
+ options.video.set('views', videoData.views)
+
+ await options.video.save(sequelizeOptions)
+
+ {
+ const videoFileAttributes = videoFileActivityUrlToDBAttributes(options.video, options.videoObject)
+ const newVideoFiles = videoFileAttributes.map(a => new VideoFileModel(a))
+
+ // Remove video files that do not exist anymore
+ const destroyTasks = options.video.VideoFiles
+ .filter(f => !newVideoFiles.find(newFile => newFile.hasSameUniqueKeysThan(f)))
+ .map(f => f.destroy(sequelizeOptions))
+ await Promise.all(destroyTasks)
+
+ // Update or add other one
+ const upsertTasks = videoFileAttributes.map(a => {
+ return VideoFileModel.upsert<VideoFileModel>(a, { returning: true, transaction: t })
+ .then(([ file ]) => file)
+ })
+
+ options.video.VideoFiles = await Promise.all(upsertTasks)