X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fformatter%2Fvideo-format-utils.ts;h=6222107d7d1f343eafcc23167e1c4f87d7e9b124;hb=082d32eb8873190e48329b61b91f87d71f3cf812;hp=99a4818ab09a74c6cbca657a012c6d8a73f94d8c;hpb=c55e3d7227fe1453869e309025996b9d75256d5d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/formatter/video-format-utils.ts b/server/models/video/formatter/video-format-utils.ts index 99a4818ab..6222107d7 100644 --- a/server/models/video/formatter/video-format-utils.ts +++ b/server/models/video/formatter/video-format-utils.ts @@ -1,11 +1,19 @@ import { generateMagnetUri } from '@server/helpers/webtorrent' +import { getActivityStreamDuration } from '@server/lib/activitypub/activity' import { getLocalVideoFileMetadataUrl } from '@server/lib/video-urls' -import { VideoViews } from '@server/lib/video-views' -import { uuidToShort } from '@shared/core-utils' -import { VideoFile, VideosCommonQueryAfterSanitize } from '@shared/models' -import { ActivityTagObject, ActivityUrlObject, VideoObject } from '../../../../shared/models/activitypub/objects' -import { Video, VideoDetails, VideoInclude } from '../../../../shared/models/videos' -import { VideoStreamingPlaylist } from '../../../../shared/models/videos/video-streaming-playlist.model' +import { VideoViewsManager } from '@server/lib/views/video-views-manager' +import { uuidToShort } from '@shared/extra-utils' +import { + ActivityTagObject, + ActivityUrlObject, + Video, + VideoDetails, + VideoFile, + VideoInclude, + VideoObject, + VideosCommonQueryAfterSanitize, + VideoStreamingPlaylist +} from '@shared/models' import { isArray } from '../../../helpers/custom-validators/misc' import { MIMETYPES, @@ -97,7 +105,10 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options: VideoForm isLocal: video.isOwned(), duration: video.duration, + views: video.views, + viewers: VideoViewsManager.Instance.getViewers(video), + likes: video.likes, dislikes: video.dislikes, thumbnailPath: video.getMiniatureStaticPath(), @@ -121,10 +132,6 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options: VideoForm pluginData: (video as any).pluginData } - if (video.isLive) { - videoObject.viewers = VideoViews.Instance.getViewers(video) - } - const add = options.additionalAttributes if (add?.state === true) { videoObject.state = { @@ -411,15 +418,6 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoObject { views: video.views, sensitive: video.nsfw, waitTranscoding: video.waitTranscoding, - isLiveBroadcast: video.isLive, - - liveSaveReplay: video.isLive - ? video.VideoLive.saveReplay - : null, - - permanentLive: video.isLive - ? video.VideoLive.permanentLive - : null, state: video.state, commentsEnabled: video.commentsEnabled, @@ -431,10 +429,13 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoObject { : null, updated: video.updatedAt.toISOString(), + mediaType: 'text/markdown', content: video.description, support: video.support, + subtitleLanguage, + icon: icons.map(i => ({ type: 'Image', url: i.getFileUrl(video), @@ -442,11 +443,14 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoObject { width: i.width, height: i.height })), + url, + likes: getLocalVideoLikesActivityPubUrl(video), dislikes: getLocalVideoDislikesActivityPubUrl(video), shares: getLocalVideoSharesActivityPubUrl(video), comments: getLocalVideoCommentsActivityPubUrl(video), + attributedTo: [ { type: 'Person', @@ -456,13 +460,10 @@ function videoModelToActivityPubObject (video: MVideoAP): VideoObject { type: 'Group', id: video.VideoChannel.Actor.url } - ] - } -} + ], -function getActivityStreamDuration (duration: number) { - // https://www.w3.org/TR/activitystreams-vocabulary/#dfn-duration - return 'PT' + duration + 'S' + ...buildLiveAPAttributes(video) + } } function getCategoryLabel (id: number) { @@ -490,7 +491,6 @@ export { videoModelToFormattedDetailsJSON, videoFilesModelToFormattedJSON, videoModelToActivityPubObject, - getActivityStreamDuration, guessAdditionalAttributesFromQuery, @@ -500,3 +500,23 @@ export { getPrivacyLabel, getStateLabel } + +// --------------------------------------------------------------------------- + +function buildLiveAPAttributes (video: MVideoAP) { + if (!video.isLive) { + return { + isLiveBroadcast: false, + liveSaveReplay: null, + permanentLive: null, + latencyMode: null + } + } + + return { + isLiveBroadcast: true, + liveSaveReplay: video.VideoLive.saveReplay, + permanentLive: video.VideoLive.permanentLive, + latencyMode: video.VideoLive.latencyMode + } +}