+async function buildMoveToObjectStorageJob (options: {
+ video: MVideoUUID
+ previousVideoState: VideoState
+ isNewVideo?: boolean // Default true
+}) {
+ const { video, previousVideoState, isNewVideo = true } = options
+
+ await VideoJobInfoModel.increaseOrCreate(video.uuid, 'pendingMove')
+
+ return {
+ type: 'move-to-object-storage' as 'move-to-object-storage',
+ payload: {
+ videoUUID: video.uuid,
+ isNewVideo,
+ previousVideoState
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+
+async function getVideoDuration (videoId: number | string) {
+ const video = await VideoModel.load(videoId)
+
+ const duration = video.isLive
+ ? undefined
+ : video.duration
+
+ return { duration, isLive: video.isLive }
+}
+
+const getCachedVideoDuration = memoizee(getVideoDuration, {
+ promise: true,
+ max: MEMOIZE_LENGTH.VIDEO_DURATION,
+ maxAge: MEMOIZE_TTL.VIDEO_DURATION
+})
+
+// ---------------------------------------------------------------------------
+