import { getExtFromMimetype } from '@server/helpers/video'
import { ACTIVITY_PUB, MIMETYPES, P2P_MEDIA_LOADER_PEER_VERSION, PREVIEWS_SIZE, THUMBNAILS_SIZE } from '@server/initializers/constants'
import { generateTorrentFileName } from '@server/lib/video-paths'
+import { VideoCaptionModel } from '@server/models/video/video-caption'
import { VideoFileModel } from '@server/models/video/video-file'
import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist'
import { FilteredModelAttributes } from '@server/types'
-import { MChannelId, MStreamingPlaylist, MStreamingPlaylistVideo, MVideo, MVideoFile, MVideoId } from '@server/types/models'
+import { isStreamingPlaylist, MChannelId, MStreamingPlaylistVideo, MVideo, MVideoFile, MVideoId } from '@server/types/models'
import {
ActivityHashTagObject,
ActivityMagnetUrlObject,
.map(t => t.name)
}
-function videoFileActivityUrlToDBAttributes (
+function getFileAttributesFromUrl (
videoOrPlaylist: MVideo | MStreamingPlaylistVideo,
urls: (ActivityTagObject | ActivityUrlObject)[]
) {
const extname = getExtFromMimetype(MIMETYPES.VIDEO.MIMETYPE_EXT, fileUrl.mediaType)
const resolution = fileUrl.height
- const videoId = (videoOrPlaylist as MStreamingPlaylist).playlistUrl ? null : videoOrPlaylist.id
- const videoStreamingPlaylistId = (videoOrPlaylist as MStreamingPlaylist).playlistUrl ? videoOrPlaylist.id : null
+ const videoId = isStreamingPlaylist(videoOrPlaylist) ? null : videoOrPlaylist.id
+ const videoStreamingPlaylistId = isStreamingPlaylist(videoOrPlaylist) ? videoOrPlaylist.id : null
const attribute = {
extname,
return attributes
}
-function streamingPlaylistActivityUrlToDBAttributes (video: MVideoId, videoObject: VideoObject, videoFiles: MVideoFile[]) {
+function getStreamingPlaylistAttributesFromObject (video: MVideoId, videoObject: VideoObject, videoFiles: MVideoFile[]) {
const playlistUrls = videoObject.url.filter(u => isAPStreamingPlaylistUrlObject(u)) as ActivityPlaylistUrlObject[]
if (playlistUrls.length === 0) return []
const attribute = {
type: VideoStreamingPlaylistType.HLS,
+
+ playlistFilename: basename(playlistUrlObject.href),
playlistUrl: playlistUrlObject.href,
+
+ segmentsSha256Filename: basename(segmentsSha256UrlObject.href),
segmentsSha256Url: segmentsSha256UrlObject.href,
+
p2pMediaLoaderInfohashes: VideoStreamingPlaylistModel.buildP2PMediaLoaderInfoHashes(playlistUrlObject.href, files),
p2pMediaLoaderPeerVersion: P2P_MEDIA_LOADER_PEER_VERSION,
videoId: video.id,
+
tagAPObject: playlistUrlObject.tag
}
return attributes
}
-function videoActivityObjectToDBAttributes (videoChannel: MChannelId, videoObject: VideoObject, to: string[] = []) {
+function getLiveAttributesFromObject (video: MVideoId, videoObject: VideoObject) {
+ return {
+ saveReplay: videoObject.liveSaveReplay,
+ permanentLive: videoObject.permanentLive,
+ videoId: video.id
+ }
+}
+
+function getCaptionAttributesFromObject (video: MVideoId, videoObject: VideoObject) {
+ return videoObject.subtitleLanguage.map(c => ({
+ videoId: video.id,
+ filename: VideoCaptionModel.generateCaptionName(c.identifier),
+ language: c.identifier,
+ fileUrl: c.url
+ }))
+}
+
+function getVideoAttributesFromObject (videoChannel: MChannelId, videoObject: VideoObject, to: string[] = []) {
const privacy = to.includes(ACTIVITY_PUB.PUBLIC)
? VideoPrivacy.PUBLIC
: VideoPrivacy.UNLISTED
getTagsFromObject,
- videoActivityObjectToDBAttributes,
+ getFileAttributesFromUrl,
+ getStreamingPlaylistAttributesFromObject,
+
+ getLiveAttributesFromObject,
+ getCaptionAttributesFromObject,
- videoFileActivityUrlToDBAttributes,
- streamingPlaylistActivityUrlToDBAttributes
+ getVideoAttributesFromObject
}
// ---------------------------------------------------------------------------