2019-03-05 10:58:44 +01:00
|
|
|
import * as Sequelize from 'sequelize'
|
2023-07-31 14:34:36 +02:00
|
|
|
import { VideoPlaylistPrivacy, VideoPlaylistType } from '@peertube/peertube-models'
|
|
|
|
import { VideoPlaylistModel } from '../models/video/video-playlist.js'
|
2024-02-28 15:55:37 +01:00
|
|
|
import { MAccount, MVideoThumbnail } from '../types/models/index.js'
|
|
|
|
import { MVideoPlaylistOwner, MVideoPlaylistThumbnail } from '../types/models/video/video-playlist.js'
|
2023-07-31 14:34:36 +02:00
|
|
|
import { getLocalVideoPlaylistActivityPubUrl } from './activitypub/url.js'
|
2024-02-28 15:55:37 +01:00
|
|
|
import { VideoMiniaturePermanentFileCache } from './files-cache/video-miniature-permanent-file-cache.js'
|
|
|
|
import { updateLocalPlaylistMiniatureFromExisting } from './thumbnail.js'
|
|
|
|
import { logger } from '@server/helpers/logger.js'
|
2019-03-05 10:58:44 +01:00
|
|
|
|
2024-02-28 15:55:37 +01:00
|
|
|
export async function createWatchLaterPlaylist (account: MAccount, t: Sequelize.Transaction) {
|
2019-08-15 11:53:26 +02:00
|
|
|
const videoPlaylist: MVideoPlaylistOwner = new VideoPlaylistModel({
|
2019-03-05 10:58:44 +01:00
|
|
|
name: 'Watch later',
|
|
|
|
privacy: VideoPlaylistPrivacy.PRIVATE,
|
|
|
|
type: VideoPlaylistType.WATCH_LATER,
|
|
|
|
ownerAccountId: account.id
|
|
|
|
})
|
|
|
|
|
2020-11-20 11:21:08 +01:00
|
|
|
videoPlaylist.url = getLocalVideoPlaylistActivityPubUrl(videoPlaylist) // We use the UUID, so set the URL after building the object
|
2019-03-05 10:58:44 +01:00
|
|
|
|
|
|
|
await videoPlaylist.save({ transaction: t })
|
|
|
|
|
|
|
|
videoPlaylist.OwnerAccount = account
|
|
|
|
|
|
|
|
return videoPlaylist
|
|
|
|
}
|
|
|
|
|
2024-02-28 15:55:37 +01:00
|
|
|
export async function generateThumbnailForPlaylist (videoPlaylist: MVideoPlaylistThumbnail, video: MVideoThumbnail) {
|
|
|
|
logger.info('Generating default thumbnail to playlist %s.', videoPlaylist.url)
|
2019-03-05 10:58:44 +01:00
|
|
|
|
2024-02-28 15:55:37 +01:00
|
|
|
const videoMiniature = video.getMiniature()
|
|
|
|
if (!videoMiniature) {
|
|
|
|
logger.info('Cannot generate thumbnail for playlist %s because video %s does not have any.', videoPlaylist.url, video.url)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// Ensure the file is on disk
|
|
|
|
const videoMiniaturePermanentFileCache = new VideoMiniaturePermanentFileCache()
|
|
|
|
const inputPath = videoMiniature.isOwned()
|
|
|
|
? videoMiniature.getPath()
|
|
|
|
: await videoMiniaturePermanentFileCache.downloadRemoteFile(videoMiniature)
|
|
|
|
|
|
|
|
const thumbnailModel = await updateLocalPlaylistMiniatureFromExisting({
|
|
|
|
inputPath,
|
|
|
|
playlist: videoPlaylist,
|
|
|
|
automaticallyGenerated: true,
|
|
|
|
keepOriginal: true
|
|
|
|
})
|
|
|
|
|
|
|
|
thumbnailModel.videoPlaylistId = videoPlaylist.id
|
|
|
|
|
|
|
|
videoPlaylist.Thumbnail = await thumbnailModel.save()
|
2019-03-05 10:58:44 +01:00
|
|
|
}
|