36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { Transaction } from 'sequelize/types'
|
|
import { isArray } from '@server/helpers/custom-validators/misc'
|
|
import { MVideoAP, MVideoAPWithoutCaption } from '@server/types/models'
|
|
import { sendCreateVideo, sendUpdateVideo } from '../send'
|
|
import { shareVideoByServerAndChannel } from '../share'
|
|
|
|
async function federateVideoIfNeeded (videoArg: MVideoAPWithoutCaption, isNewVideo: boolean, transaction?: Transaction) {
|
|
const video = videoArg as MVideoAP
|
|
|
|
if (
|
|
// Check this is not a blacklisted video, or unfederated blacklisted video
|
|
(video.isBlacklisted() === false || (isNewVideo === false && video.VideoBlacklist.unfederated === false)) &&
|
|
// Check the video is public/unlisted and published
|
|
video.hasPrivacyForFederation() && video.hasStateForFederation()
|
|
) {
|
|
// Fetch more attributes that we will need to serialize in AP object
|
|
if (isArray(video.VideoCaptions) === false) {
|
|
video.VideoCaptions = await video.$get('VideoCaptions', {
|
|
attributes: [ 'filename', 'language' ],
|
|
transaction
|
|
})
|
|
}
|
|
|
|
if (isNewVideo) {
|
|
// Now we'll add the video's meta data to our followers
|
|
await sendCreateVideo(video, transaction)
|
|
await shareVideoByServerAndChannel(video, transaction)
|
|
} else {
|
|
await sendUpdateVideo(video, transaction)
|
|
}
|
|
}
|
|
}
|
|
|
|
export {
|
|
federateVideoIfNeeded
|
|
}
|