X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-format-utils.ts;h=92bde7773fe551f602e0e3312e5a7975ef64689b;hb=ef680f68351ec10ab73a1131570a6d14ce14c195;hp=d71a3a5dbee34b3e5a1c8719e646b3f3b3827bf0;hpb=7557704eec3995092136b87154a1fbe644bc0fec;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-format-utils.ts b/server/models/video/video-format-utils.ts index d71a3a5db..92bde7773 100644 --- a/server/models/video/video-format-utils.ts +++ b/server/models/video/video-format-utils.ts @@ -1,6 +1,6 @@ import { Video, VideoDetails } from '../../../shared/models/videos' import { VideoModel } from './video' -import { ActivityTagObject, ActivityUrlObject, VideoTorrentObject } from '../../../shared/models/activitypub/objects' +import { ActivityTagObject, ActivityUrlObject, VideoObject } from '../../../shared/models/activitypub/objects' import { MIMETYPES, WEBSERVER } from '../../initializers/constants' import { VideoCaptionModel } from './video-caption' import { @@ -19,8 +19,8 @@ import { MVideoFile, MVideoFormattable, MVideoFormattableDetails -} from '../../typings/models' -import { MVideoFileRedundanciesOpt } from '../../typings/models/video/video-file' +} from '../../types/models' +import { MVideoFileRedundanciesOpt } from '../../types/models/video/video-file' import { VideoFile } from '@shared/models/videos/video-file.model' import { generateMagnetUri } from '@server/helpers/webtorrent' import { extractVideo } from '@server/helpers/video' @@ -59,7 +59,11 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options?: VideoFor label: VideoModel.getPrivacyLabel(video.privacy) }, nsfw: video.nsfw, - description: options && options.completeDescription === true ? video.description : video.getTruncatedDescription(), + + description: options && options.completeDescription === true + ? video.description + : video.getTruncatedDescription(), + isLocal: video.isOwned(), duration: video.duration, views: video.views, @@ -73,12 +77,17 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options?: VideoFor publishedAt: video.publishedAt, originallyPublishedAt: video.originallyPublishedAt, + isLive: video.isLive, + account: video.VideoChannel.Account.toFormattedSummaryJSON(), channel: video.VideoChannel.toFormattedSummaryJSON(), userHistory: userHistory ? { currentTime: userHistory.currentTime - } : undefined + } : undefined, + + // Can be added by external plugins + pluginData: (video as any).pluginData } if (options) { @@ -175,6 +184,12 @@ function streamingPlaylistsModelToFormattedJSON (video: MVideo, playlists: MStre }) } +function sortByResolutionDesc (fileA: MVideoFile, fileB: MVideoFile) { + if (fileA.resolution < fileB.resolution) return 1 + if (fileA.resolution === fileB.resolution) return 0 + return -1 +} + function videoFilesModelToFormattedJSON ( model: MVideo | MStreamingPlaylistVideo, baseUrlHttp: string, @@ -183,7 +198,8 @@ function videoFilesModelToFormattedJSON ( ): VideoFile[] { const video = extractVideo(model) - return videoFiles + return [ ...videoFiles ] + .sort(sortByResolutionDesc) .map(videoFile => { return { resolution: { @@ -200,11 +216,6 @@ function videoFilesModelToFormattedJSON ( metadataUrl: video.getVideoFileMetadataUrl(videoFile, baseUrlHttp) } as VideoFile }) - .sort((a, b) => { - if (a.resolution.id < b.resolution.id) return 1 - if (a.resolution.id === b.resolution.id) return 0 - return -1 - }) } function addVideoFilesInAPAcc ( @@ -214,7 +225,9 @@ function addVideoFilesInAPAcc ( baseUrlWs: string, files: MVideoFile[] ) { - for (const file of files) { + const sortedFiles = [ ...files ].sort(sortByResolutionDesc) + + for (const file of sortedFiles) { acc.push({ type: 'Link', mediaType: MIMETYPES.VIDEO.EXT_MIMETYPE[file.extname] as any, @@ -249,7 +262,7 @@ function addVideoFilesInAPAcc ( } } -function videoModelToActivityPubObject (video: MVideoAP): VideoTorrentObject { +function videoModelToActivityPubObject (video: MVideoAP): VideoObject { const { baseUrlHttp, baseUrlWs } = video.getBaseUrls() if (!video.Tags) video.Tags = [] @@ -323,10 +336,7 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoTorrentObject { }) } - // FIXME: remove and uncomment in PT 2.3 - // Breaks compatibility with PT <= 2.1 - // const icons = [ video.getMiniature(), video.getPreview() ] - const miniature = video.getMiniature() + const icons = [ video.getMiniature(), video.getPreview() ] return { type: 'Video' as 'Video', @@ -341,6 +351,7 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoTorrentObject { views: video.views, sensitive: video.nsfw, waitTranscoding: video.waitTranscoding, + isLiveBroadcast: video.isLive, state: video.state, commentsEnabled: video.commentsEnabled, downloadEnabled: video.downloadEnabled, @@ -348,23 +359,16 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoTorrentObject { originallyPublishedAt: video.originallyPublishedAt ? video.originallyPublishedAt.toISOString() : null, updated: video.updatedAt.toISOString(), mediaType: 'text/markdown', - content: video.getTruncatedDescription(), + content: video.description, support: video.support, subtitleLanguage, - icon: { + icon: icons.map(i => ({ type: 'Image', - url: miniature.getFileUrl(video), + url: i.getFileUrl(video), mediaType: 'image/jpeg', - width: miniature.width, - height: miniature.height - } as any, - // icon: icons.map(i => ({ - // type: 'Image', - // url: i.getFileUrl(video), - // mediaType: 'image/jpeg', - // width: i.width, - // height: i.height - // })), + width: i.width, + height: i.height + })), url, likes: getVideoLikesActivityPubUrl(video), dislikes: getVideoDislikesActivityPubUrl(video),