import { VideoModel } from './video'
import { VideoFileModel } from './video-file'
import { ActivityUrlObject, VideoTorrentObject } from '../../../shared/models/activitypub/objects'
-import { CONFIG, THUMBNAILS_SIZE, VIDEO_EXT_MIMETYPE } from '../../initializers'
+import { CONFIG, MIMETYPES, THUMBNAILS_SIZE } from '../../initializers'
import { VideoCaptionModel } from './video-caption'
import {
getVideoCommentsActivityPubUrl,
getVideoLikesActivityPubUrl,
getVideoSharesActivityPubUrl
} from '../../lib/activitypub'
+import { isArray } from '../../helpers/custom-validators/misc'
export type VideoFormattingJSONOptions = {
+ completeDescription?: boolean
additionalAttributes: {
state?: boolean,
waitTranscoding?: boolean,
const formattedAccount = video.VideoChannel.Account.toFormattedJSON()
const formattedVideoChannel = video.VideoChannel.toFormattedJSON()
+ const userHistory = isArray(video.UserVideoHistories) ? video.UserVideoHistories[0] : undefined
+
const videoObject: Video = {
id: video.id,
uuid: video.uuid,
label: VideoModel.getPrivacyLabel(video.privacy)
},
nsfw: video.nsfw,
- description: video.getTruncatedDescription(),
+ description: options && options.completeDescription === true ? video.description : video.getTruncatedDescription(),
isLocal: video.isOwned(),
duration: video.duration,
views: video.views,
createdAt: video.createdAt,
updatedAt: video.updatedAt,
publishedAt: video.publishedAt,
+ originallyPublishedAt: video.originallyPublishedAt,
account: {
id: formattedAccount.id,
uuid: formattedAccount.uuid,
url: formattedVideoChannel.url,
host: formattedVideoChannel.host,
avatar: formattedVideoChannel.avatar
- }
+ },
+
+ userHistory: userHistory ? {
+ currentTime: userHistory.currentTime
+ } : undefined
}
if (options) {
}
})
+ const tags = video.Tags ? video.Tags.map(t => t.name) : []
const detailsJson = {
support: video.support,
- descriptionPath: video.getDescriptionPath(),
+ descriptionPath: video.getDescriptionAPIPath(),
channel: video.VideoChannel.toFormattedJSON(),
account: video.VideoChannel.Account.toFormattedJSON(),
- tags: video.Tags.map(t => t.name),
+ tags,
commentsEnabled: video.commentsEnabled,
waitTranscoding: video.waitTranscoding,
state: {
for (const file of video.VideoFiles) {
url.push({
type: 'Link',
- mimeType: VIDEO_EXT_MIMETYPE[ file.extname ] as any,
+ mimeType: MIMETYPES.VIDEO.EXT_MIMETYPE[ file.extname ] as any,
+ mediaType: MIMETYPES.VIDEO.EXT_MIMETYPE[ file.extname ] as any,
href: video.getVideoFileUrl(file, baseUrlHttp),
height: file.resolution,
size: file.size,
url.push({
type: 'Link',
mimeType: 'application/x-bittorrent' as 'application/x-bittorrent',
+ mediaType: 'application/x-bittorrent' as 'application/x-bittorrent',
href: video.getTorrentUrl(file, baseUrlHttp),
height: file.resolution
})
url.push({
type: 'Link',
mimeType: 'application/x-bittorrent;x-scheme-handler/magnet' as 'application/x-bittorrent;x-scheme-handler/magnet',
+ mediaType: 'application/x-bittorrent;x-scheme-handler/magnet' as 'application/x-bittorrent;x-scheme-handler/magnet',
href: video.generateMagnetUri(file, baseUrlHttp, baseUrlWs),
height: file.resolution
})
url.push({
type: 'Link',
mimeType: 'text/html',
+ mediaType: 'text/html',
href: CONFIG.WEBSERVER.URL + '/videos/watch/' + video.uuid
})
state: video.state,
commentsEnabled: video.commentsEnabled,
published: video.publishedAt.toISOString(),
+ originallyPublishedAt: video.originallyPublishedAt ?
+ video.originallyPublishedAt.toISOString() :
+ null,
updated: video.updatedAt.toISOString(),
mediaType: 'text/markdown',
content: video.getTruncatedDescription(),