X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-format-utils.ts;h=0dbd92a431126ae88a74f174a699c540d7efa09e;hb=c6c0fa6cd8fe8f752463d8982c3dbcd448739c4e;hp=1fa66fd631e27a412ef944854f509c170a3819f2;hpb=2ad9dcda240ee843c5e4a5b98cc94f7b2aab2c89;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-format-utils.ts b/server/models/video/video-format-utils.ts index 1fa66fd63..0dbd92a43 100644 --- a/server/models/video/video-format-utils.ts +++ b/server/models/video/video-format-utils.ts @@ -8,7 +8,7 @@ import { getVideoDislikesActivityPubUrl, getVideoLikesActivityPubUrl, getVideoSharesActivityPubUrl -} from '../../lib/activitypub' +} from '../../lib/activitypub/url' import { isArray } from '../../helpers/custom-validators/misc' import { VideoStreamingPlaylist } from '../../../shared/models/videos/video-streaming-playlist.model' import { @@ -19,10 +19,11 @@ 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' export type VideoFormattingJSONOptions = { completeDescription?: boolean @@ -58,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, @@ -72,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) { @@ -174,13 +184,22 @@ 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, baseUrlWs: string, videoFiles: MVideoFileRedundanciesOpt[] ): VideoFile[] { - return videoFiles + const video = extractVideo(model) + + return [ ...videoFiles ] + .sort(sortByResolutionDesc) .map(videoFile => { return { resolution: { @@ -193,14 +212,10 @@ function videoFilesModelToFormattedJSON ( torrentUrl: model.getTorrentUrl(videoFile, baseUrlHttp), torrentDownloadUrl: model.getTorrentDownloadUrl(videoFile, baseUrlHttp), fileUrl: model.getVideoFileUrl(videoFile, baseUrlHttp), - fileDownloadUrl: model.getVideoFileDownloadUrl(videoFile, baseUrlHttp) + fileDownloadUrl: model.getVideoFileDownloadUrl(videoFile, baseUrlHttp), + 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 ( @@ -210,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, @@ -220,6 +237,15 @@ function addVideoFilesInAPAcc ( fps: file.fps }) + acc.push({ + type: 'Link', + rel: [ 'metadata', MIMETYPES.VIDEO.EXT_MIMETYPE[file.extname] ], + mediaType: 'application/json' as 'application/json', + href: extractVideo(model).getVideoFileMetadataUrl(file, baseUrlHttp), + height: file.resolution, + fps: file.fps + }) + acc.push({ type: 'Link', mediaType: 'application/x-bittorrent' as 'application/x-bittorrent', @@ -332,7 +358,7 @@ 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: icons.map(i => ({