isVideoLanguageValid,
isVideoLicenceValid,
isVideoNameValid,
- isVideoPrivacyValid
+ isVideoPrivacyValid, isVideoSupportValid
} from '../../helpers/custom-validators/videos'
import { generateImageFromVideoFile, getVideoFileHeight, transcode } from '../../helpers/ffmpeg-utils'
import { logger } from '../../helpers/logger'
import { AccountModel } from '../account/account'
import { AccountVideoRateModel } from '../account/account-video-rate'
import { ActorModel } from '../activitypub/actor'
+import { AvatarModel } from '../avatar/avatar'
import { ServerModel } from '../server/server'
import { getSort, throwIfNotValid } from '../utils'
import { TagModel } from './tag'
attributes: [ 'host' ],
model: () => ServerModel.unscoped(),
required: false
+ },
+ {
+ model: () => AvatarModel.unscoped(),
+ required: false
}
]
}
@Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEOS.DESCRIPTION.max))
description: string
+ @AllowNull(true)
+ @Default(null)
+ @Is('VideoSupport', value => throwIfNotValid(value, isVideoSupportValid, 'support'))
+ @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEOS.SUPPORT.max))
+ support: string
+
@AllowNull(false)
@Is('VideoDuration', value => throwIfNotValid(value, isVideoDurationValid, 'duration'))
@Column
return join(STATIC_PATHS.PREVIEWS, this.getPreviewName())
}
- toFormattedJSON () {
+ toFormattedJSON (): Video {
let serverHost
if (this.VideoChannel.Account.Actor.Server) {
embedPath: this.getEmbedPath(),
createdAt: this.createdAt,
updatedAt: this.updatedAt
- } as Video
+ }
}
- toFormattedDetailsJSON () {
+ toFormattedDetailsJSON (): VideoDetails {
const formattedJson = this.toFormattedJSON()
// Maybe our server is not up to date and there are new privacy settings since our version
const detailsJson = {
privacyLabel,
privacy: this.privacy,
+ support: this.support,
descriptionPath: this.getDescriptionPath(),
channel: this.VideoChannel.toFormattedJSON(),
account: this.VideoChannel.Account.toFormattedJSON(),
return -1
})
- return Object.assign(formattedJson, detailsJson) as VideoDetails
+ return Object.assign(formattedJson, detailsJson)
}
toActivityPubObject (): VideoTorrentObject {
let dislikesObject
if (Array.isArray(this.AccountVideoRates)) {
- const likes: string[] = []
- const dislikes: string[] = []
-
- for (const rate of this.AccountVideoRates) {
- if (rate.type === 'like') {
- likes.push(rate.Account.Actor.url)
- } else if (rate.type === 'dislike') {
- dislikes.push(rate.Account.Actor.url)
- }
- }
-
const res = this.toRatesActivityPubObjects()
likesObject = res.likesObject
dislikesObject = res.dislikesObject
updated: this.updatedAt.toISOString(),
mediaType: 'text/markdown',
content: this.getTruncatedDescription(),
+ support: this.support,
icon: {
type: 'Image',
url: this.getThumbnailUrl(baseUrlHttp),