1 import { PickWith, PickWithOpt } from '@shared/core-utils'
2 import { VideoModel } from '../../../models/video/video'
3 import { MTrackerUrl } from '../server/tracker'
4 import { MUserVideoHistoryTime } from '../user/user-video-history'
5 import { MScheduleVideoUpdate } from './schedule-video-update'
6 import { MTag } from './tag'
7 import { MThumbnail } from './thumbnail'
8 import { MVideoBlacklist, MVideoBlacklistLight, MVideoBlacklistUnfederated } from './video-blacklist'
9 import { MVideoCaptionLanguage, MVideoCaptionLanguageUrl } from './video-caption'
11 MChannelAccountDefault,
13 MChannelAccountSummaryFormattable,
18 } from './video-channels'
19 import { MVideoFile, MVideoFileRedundanciesAll, MVideoFileRedundanciesOpt } from './video-file'
20 import { MVideoLive } from './video-live'
22 MStreamingPlaylistFiles,
23 MStreamingPlaylistRedundancies,
24 MStreamingPlaylistRedundanciesAll,
25 MStreamingPlaylistRedundanciesOpt
26 } from './video-streaming-playlist'
28 type Use<K extends keyof VideoModel, M> = PickWith<VideoModel, K, M>
30 // ############################################################################
33 Omit<VideoModel, 'VideoChannel' | 'Tags' | 'Thumbnails' | 'VideoPlaylistElements' | 'VideoAbuses' |
34 'VideoFiles' | 'VideoStreamingPlaylists' | 'VideoShares' | 'AccountVideoRates' | 'VideoComments' | 'VideoViews' | 'UserVideoHistories' |
35 'ScheduleVideoUpdate' | 'VideoBlacklist' | 'VideoImport' | 'VideoCaptions' | 'VideoLive'>
37 // ############################################################################
39 export type MVideoId = Pick<MVideo, 'id'>
40 export type MVideoUrl = Pick<MVideo, 'url'>
41 export type MVideoUUID = Pick<MVideo, 'uuid'>
43 export type MVideoImmutable = Pick<MVideo, 'id' | 'url' | 'uuid' | 'remote' | 'isOwned'>
44 export type MVideoIdUrl = MVideoId & MVideoUrl
45 export type MVideoFeed = Pick<MVideo, 'name' | 'uuid'>
47 // ############################################################################
49 // Video raw associations: schedules, video files, tags, thumbnails, captions, streaming playlists
51 // "With" to not confuse with the VideoFile model
52 export type MVideoWithFile =
54 Use<'VideoFiles', MVideoFile[]> &
55 Use<'VideoStreamingPlaylists', MStreamingPlaylistFiles[]>
57 export type MVideoThumbnail =
59 Use<'Thumbnails', MThumbnail[]>
61 export type MVideoIdThumbnail =
63 Use<'Thumbnails', MThumbnail[]>
65 export type MVideoWithFileThumbnail =
67 Use<'VideoFiles', MVideoFile[]> &
68 Use<'Thumbnails', MThumbnail[]>
70 export type MVideoThumbnailBlacklist =
72 Use<'Thumbnails', MThumbnail[]> &
73 Use<'VideoBlacklist', MVideoBlacklistLight>
75 export type MVideoTag =
79 export type MVideoWithSchedule =
81 PickWithOpt<VideoModel, 'ScheduleVideoUpdate', MScheduleVideoUpdate>
83 export type MVideoWithCaptions =
85 Use<'VideoCaptions', MVideoCaptionLanguage[]>
87 export type MVideoWithStreamingPlaylist =
89 Use<'VideoStreamingPlaylists', MStreamingPlaylistFiles[]>
91 // ############################################################################
93 // Associations with not all their attributes
95 export type MVideoUserHistory =
97 Use<'UserVideoHistories', MUserVideoHistoryTime[]>
99 export type MVideoWithBlacklistLight =
101 Use<'VideoBlacklist', MVideoBlacklistLight>
103 export type MVideoAccountLight =
105 Use<'VideoChannel', MChannelAccountLight>
107 export type MVideoWithRights =
109 Use<'VideoBlacklist', MVideoBlacklistLight> &
110 Use<'Thumbnails', MThumbnail[]> &
111 Use<'VideoChannel', MChannelUserId>
113 // ############################################################################
115 // All files with some additional associations
117 export type MVideoWithAllFiles =
119 Use<'VideoFiles', MVideoFile[]> &
120 Use<'Thumbnails', MThumbnail[]> &
121 Use<'VideoStreamingPlaylists', MStreamingPlaylistFiles[]>
123 export type MVideoAccountLightBlacklistAllFiles =
125 Use<'VideoFiles', MVideoFile[]> &
126 Use<'Thumbnails', MThumbnail[]> &
127 Use<'VideoStreamingPlaylists', MStreamingPlaylistFiles[]> &
128 Use<'VideoChannel', MChannelAccountLight> &
129 Use<'VideoBlacklist', MVideoBlacklistLight>
131 // ############################################################################
135 export type MVideoAccountDefault =
137 Use<'VideoChannel', MChannelAccountDefault>
139 export type MVideoThumbnailAccountDefault =
141 Use<'Thumbnails', MThumbnail[]> &
142 Use<'VideoChannel', MChannelAccountDefault>
144 export type MVideoWithChannelActor =
146 Use<'VideoChannel', MChannelActor>
148 export type MVideoWithHost =
150 Use<'VideoChannel', MChannelHost>
152 export type MVideoFullLight =
154 Use<'Thumbnails', MThumbnail[]> &
155 Use<'VideoBlacklist', MVideoBlacklistLight> &
156 Use<'Tags', MTag[]> &
157 Use<'VideoChannel', MChannelAccountLight> &
158 Use<'UserVideoHistories', MUserVideoHistoryTime[]> &
159 Use<'VideoFiles', MVideoFile[]> &
160 Use<'ScheduleVideoUpdate', MScheduleVideoUpdate> &
161 Use<'VideoStreamingPlaylists', MStreamingPlaylistFiles[]> &
162 Use<'VideoLive', MVideoLive>
164 // ############################################################################
168 export type MVideoAP =
170 Use<'Tags', MTag[]> &
171 Use<'VideoChannel', MChannelAccountLight> &
172 Use<'VideoStreamingPlaylists', MStreamingPlaylistFiles[]> &
173 Use<'VideoCaptions', MVideoCaptionLanguageUrl[]> &
174 Use<'VideoBlacklist', MVideoBlacklistUnfederated> &
175 Use<'VideoFiles', MVideoFileRedundanciesOpt[]> &
176 Use<'Thumbnails', MThumbnail[]> &
177 Use<'VideoLive', MVideoLive>
179 export type MVideoAPWithoutCaption = Omit<MVideoAP, 'VideoCaptions'>
181 export type MVideoDetails =
183 Use<'VideoBlacklist', MVideoBlacklistLight> &
184 Use<'Tags', MTag[]> &
185 Use<'VideoChannel', MChannelAccountLight> &
186 Use<'ScheduleVideoUpdate', MScheduleVideoUpdate> &
187 Use<'Thumbnails', MThumbnail[]> &
188 Use<'UserVideoHistories', MUserVideoHistoryTime[]> &
189 Use<'VideoStreamingPlaylists', MStreamingPlaylistRedundancies[]> &
190 Use<'VideoFiles', MVideoFileRedundanciesOpt[]>
192 export type MVideoForUser =
194 Use<'VideoChannel', MChannelAccountDefault> &
195 Use<'ScheduleVideoUpdate', MScheduleVideoUpdate> &
196 Use<'VideoBlacklist', MVideoBlacklistLight> &
197 Use<'Thumbnails', MThumbnail[]>
199 export type MVideoForRedundancyAPI =
201 Use<'VideoFiles', MVideoFileRedundanciesAll[]> &
202 Use<'VideoStreamingPlaylists', MStreamingPlaylistRedundanciesAll[]>
204 // ############################################################################
206 // Format for API or AP object
208 export type MVideoFormattable =
210 PickWithOpt<VideoModel, 'UserVideoHistories', MUserVideoHistoryTime[]> &
211 Use<'VideoChannel', MChannelAccountSummaryFormattable> &
212 PickWithOpt<VideoModel, 'ScheduleVideoUpdate', Pick<MScheduleVideoUpdate, 'updateAt' | 'privacy'>> &
213 PickWithOpt<VideoModel, 'VideoBlacklist', Pick<MVideoBlacklist, 'reason'>>
215 export type MVideoFormattableDetails =
217 Use<'VideoChannel', MChannelFormattable> &
218 Use<'Tags', MTag[]> &
219 Use<'VideoStreamingPlaylists', MStreamingPlaylistRedundanciesOpt[]> &
220 Use<'VideoFiles', MVideoFileRedundanciesOpt[]> &
221 Use<'Trackers', MTrackerUrl[]>