aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/video/formatter
diff options
context:
space:
mode:
Diffstat (limited to 'server/models/video/formatter')
-rw-r--r--server/models/video/formatter/video-format-utils.ts68
1 files changed, 47 insertions, 21 deletions
diff --git a/server/models/video/formatter/video-format-utils.ts b/server/models/video/formatter/video-format-utils.ts
index 0cbad5684..5dc2c2f1b 100644
--- a/server/models/video/formatter/video-format-utils.ts
+++ b/server/models/video/formatter/video-format-utils.ts
@@ -1,9 +1,10 @@
1import { uuidToShort } from '@server/helpers/uuid' 1import { uuidToShort } from '@server/helpers/uuid'
2import { generateMagnetUri } from '@server/helpers/webtorrent' 2import { generateMagnetUri } from '@server/helpers/webtorrent'
3import { getLocalVideoFileMetadataUrl } from '@server/lib/video-urls' 3import { getLocalVideoFileMetadataUrl } from '@server/lib/video-urls'
4import { VideosCommonQueryAfterSanitize } from '@shared/models'
4import { VideoFile } from '@shared/models/videos/video-file.model' 5import { VideoFile } from '@shared/models/videos/video-file.model'
5import { ActivityTagObject, ActivityUrlObject, VideoObject } from '../../../../shared/models/activitypub/objects' 6import { ActivityTagObject, ActivityUrlObject, VideoObject } from '../../../../shared/models/activitypub/objects'
6import { Video, VideoDetails } from '../../../../shared/models/videos' 7import { Video, VideoDetails, VideoInclude } from '../../../../shared/models/videos'
7import { VideoStreamingPlaylist } from '../../../../shared/models/videos/video-streaming-playlist.model' 8import { VideoStreamingPlaylist } from '../../../../shared/models/videos/video-streaming-playlist.model'
8import { isArray } from '../../../helpers/custom-validators/misc' 9import { isArray } from '../../../helpers/custom-validators/misc'
9import { 10import {
@@ -22,6 +23,7 @@ import {
22 getLocalVideoSharesActivityPubUrl 23 getLocalVideoSharesActivityPubUrl
23} from '../../../lib/activitypub/url' 24} from '../../../lib/activitypub/url'
24import { 25import {
26 MServer,
25 MStreamingPlaylistRedundanciesOpt, 27 MStreamingPlaylistRedundanciesOpt,
26 MVideo, 28 MVideo,
27 MVideoAP, 29 MVideoAP,
@@ -34,15 +36,31 @@ import { VideoCaptionModel } from '../video-caption'
34 36
35export type VideoFormattingJSONOptions = { 37export type VideoFormattingJSONOptions = {
36 completeDescription?: boolean 38 completeDescription?: boolean
37 additionalAttributes: { 39
40 additionalAttributes?: {
38 state?: boolean 41 state?: boolean
39 waitTranscoding?: boolean 42 waitTranscoding?: boolean
40 scheduledUpdate?: boolean 43 scheduledUpdate?: boolean
41 blacklistInfo?: boolean 44 blacklistInfo?: boolean
45 blockedOwner?: boolean
42 } 46 }
43} 47}
44 48
45function videoModelToFormattedJSON (video: MVideoFormattable, options?: VideoFormattingJSONOptions): Video { 49function guessAdditionalAttributesFromQuery (query: VideosCommonQueryAfterSanitize): VideoFormattingJSONOptions {
50 if (!query || !query.include) return {}
51
52 return {
53 additionalAttributes: {
54 state: !!(query.include & VideoInclude.NOT_PUBLISHED_STATE),
55 waitTranscoding: !!(query.include & VideoInclude.NOT_PUBLISHED_STATE),
56 scheduledUpdate: !!(query.include & VideoInclude.NOT_PUBLISHED_STATE),
57 blacklistInfo: !!(query.include & VideoInclude.BLACKLISTED),
58 blockedOwner: !!(query.include & VideoInclude.BLOCKED_OWNER)
59 }
60 }
61}
62
63function videoModelToFormattedJSON (video: MVideoFormattable, options: VideoFormattingJSONOptions = {}): Video {
46 const userHistory = isArray(video.UserVideoHistories) ? video.UserVideoHistories[0] : undefined 64 const userHistory = isArray(video.UserVideoHistories) ? video.UserVideoHistories[0] : undefined
47 65
48 const videoObject: Video = { 66 const videoObject: Video = {
@@ -101,29 +119,35 @@ function videoModelToFormattedJSON (video: MVideoFormattable, options?: VideoFor
101 pluginData: (video as any).pluginData 119 pluginData: (video as any).pluginData
102 } 120 }
103 121
104 if (options) { 122 const add = options.additionalAttributes
105 if (options.additionalAttributes.state === true) { 123 if (add?.state === true) {
106 videoObject.state = { 124 videoObject.state = {
107 id: video.state, 125 id: video.state,
108 label: getStateLabel(video.state) 126 label: getStateLabel(video.state)
109 }
110 } 127 }
128 }
111 129
112 if (options.additionalAttributes.waitTranscoding === true) { 130 if (add?.waitTranscoding === true) {
113 videoObject.waitTranscoding = video.waitTranscoding 131 videoObject.waitTranscoding = video.waitTranscoding
114 } 132 }
115 133
116 if (options.additionalAttributes.scheduledUpdate === true && video.ScheduleVideoUpdate) { 134 if (add?.scheduledUpdate === true && video.ScheduleVideoUpdate) {
117 videoObject.scheduledUpdate = { 135 videoObject.scheduledUpdate = {
118 updateAt: video.ScheduleVideoUpdate.updateAt, 136 updateAt: video.ScheduleVideoUpdate.updateAt,
119 privacy: video.ScheduleVideoUpdate.privacy || undefined 137 privacy: video.ScheduleVideoUpdate.privacy || undefined
120 }
121 } 138 }
139 }
122 140
123 if (options.additionalAttributes.blacklistInfo === true) { 141 if (add?.blacklistInfo === true) {
124 videoObject.blacklisted = !!video.VideoBlacklist 142 videoObject.blacklisted = !!video.VideoBlacklist
125 videoObject.blacklistedReason = video.VideoBlacklist ? video.VideoBlacklist.reason : null 143 videoObject.blacklistedReason = video.VideoBlacklist ? video.VideoBlacklist.reason : null
126 } 144 }
145
146 if (add?.blockedOwner === true) {
147 videoObject.blockedOwner = video.VideoChannel.Account.isBlocked()
148
149 const server = video.VideoChannel.Account.Actor.Server as MServer
150 videoObject.blockedServer = !!(server?.isBlocked())
127 } 151 }
128 152
129 return videoObject 153 return videoObject
@@ -464,6 +488,8 @@ export {
464 videoModelToActivityPubObject, 488 videoModelToActivityPubObject,
465 getActivityStreamDuration, 489 getActivityStreamDuration,
466 490
491 guessAdditionalAttributesFromQuery,
492
467 getCategoryLabel, 493 getCategoryLabel,
468 getLicenceLabel, 494 getLicenceLabel,
469 getLanguageLabel, 495 getLanguageLabel,