video-playlist.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import * as Sequelize from 'sequelize'
  2. import { VideoPlaylistPrivacy, VideoPlaylistType } from '@peertube/peertube-models'
  3. import { VideoPlaylistModel } from '../models/video/video-playlist.js'
  4. import { MAccount, MVideoThumbnail } from '../types/models/index.js'
  5. import { MVideoPlaylistOwner, MVideoPlaylistThumbnail } from '../types/models/video/video-playlist.js'
  6. import { getLocalVideoPlaylistActivityPubUrl } from './activitypub/url.js'
  7. import { VideoMiniaturePermanentFileCache } from './files-cache/video-miniature-permanent-file-cache.js'
  8. import { updateLocalPlaylistMiniatureFromExisting } from './thumbnail.js'
  9. import { logger } from '@server/helpers/logger.js'
  10. export async function createWatchLaterPlaylist (account: MAccount, t: Sequelize.Transaction) {
  11. const videoPlaylist: MVideoPlaylistOwner = new VideoPlaylistModel({
  12. name: 'Watch later',
  13. privacy: VideoPlaylistPrivacy.PRIVATE,
  14. type: VideoPlaylistType.WATCH_LATER,
  15. ownerAccountId: account.id
  16. })
  17. videoPlaylist.url = getLocalVideoPlaylistActivityPubUrl(videoPlaylist) // We use the UUID, so set the URL after building the object
  18. await videoPlaylist.save({ transaction: t })
  19. videoPlaylist.OwnerAccount = account
  20. return videoPlaylist
  21. }
  22. export async function generateThumbnailForPlaylist (videoPlaylist: MVideoPlaylistThumbnail, video: MVideoThumbnail) {
  23. logger.info('Generating default thumbnail to playlist %s.', videoPlaylist.url)
  24. const videoMiniature = video.getMiniature()
  25. if (!videoMiniature) {
  26. logger.info('Cannot generate thumbnail for playlist %s because video %s does not have any.', videoPlaylist.url, video.url)
  27. return
  28. }
  29. // Ensure the file is on disk
  30. const videoMiniaturePermanentFileCache = new VideoMiniaturePermanentFileCache()
  31. const inputPath = videoMiniature.isOwned()
  32. ? videoMiniature.getPath()
  33. : await videoMiniaturePermanentFileCache.downloadRemoteFile(videoMiniature)
  34. const thumbnailModel = await updateLocalPlaylistMiniatureFromExisting({
  35. inputPath,
  36. playlist: videoPlaylist,
  37. automaticallyGenerated: true,
  38. keepOriginal: true
  39. })
  40. thumbnailModel.videoPlaylistId = videoPlaylist.id
  41. videoPlaylist.Thumbnail = await thumbnailModel.save()
  42. }