1
0
Fork 0

Rename video full loading

This commit is contained in:
Chocobozzz 2022-06-28 14:57:51 +02:00
parent 4c8336af67
commit 4fae2b1f30
No known key found for this signature in database
GPG key ID: 583A612D890159BE
31 changed files with 48 additions and 48 deletions

View file

@ -70,7 +70,7 @@ async function run () {
}
for (const id of ids) {
const videoFull = await VideoModel.loadAndPopulateAccountAndServerAndTags(id)
const videoFull = await VideoModel.loadFull(id)
const files = videoFull.VideoFiles || []
const hls = videoFull.getHLSPlaylist()

View file

@ -43,7 +43,7 @@ async function run () {
return
}
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(uuid)
const video = await VideoModel.loadFull(uuid)
if (!video) throw new Error('Video not found.')
const dataInput: VideoTranscodingPayload[] = []

View file

@ -97,7 +97,7 @@ async function processVideo (videoId: number) {
// Everything worked, we can save the playlist now
await playlist.save()
const allVideo = await VideoModel.loadAndPopulateAccountAndServerAndTags(video.id)
const allVideo = await VideoModel.loadFull(video.id)
await federateVideoIfNeeded(allVideo, false)
console.log(`Successfully moved HLS files of ${video.name}.`)

View file

@ -114,7 +114,7 @@ async function run () {
const ids = await VideoModel.listLocalIds()
for (const id of ids) {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id)
const video = await VideoModel.loadFull(id)
console.log('Updating video ' + video.uuid)

View file

@ -105,7 +105,7 @@ function acceptOwnership (req: express.Request, res: express.Response) {
const channel = res.locals.videoChannel
// We need more attributes for federation
const targetVideo = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoChangeOwnership.Video.id, t)
const targetVideo = await VideoModel.loadFull(videoChangeOwnership.Video.id, t)
const oldVideoChannel = await VideoChannelModel.loadAndPopulateAccount(targetVideo.channelId, t)

View file

@ -62,7 +62,7 @@ async function updateVideo (req: express.Request, res: express.Response) {
try {
const { videoInstanceUpdated, isNewVideo } = await sequelizeTypescript.transaction(async t => {
// Refresh video since thumbnails to prevent concurrent updates
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoFromReq.id, t)
const video = await VideoModel.loadFull(videoFromReq.id, t)
const sequelizeOptions = { transaction: t }
const oldVideoChannel = video.VideoChannel
@ -212,5 +212,5 @@ async function updateTorrentsMetadataIfNeeded (video: MVideoFullLight, videoInfo
}
// Refresh video since files have changed
return VideoModel.loadAndPopulateAccountAndServerAndTags(video.id)
return VideoModel.loadFull(video.id)
}

View file

@ -272,7 +272,7 @@ async function createTorrentFederate (video: MVideoFullLight, videoFile: MVideoF
const job = await JobQueue.Instance.createJobWithPromise({ type: 'manage-video-torrent', payload })
await job.finished()
const refreshedVideo = await VideoModel.loadAndPopulateAccountAndServerAndTags(video.id)
const refreshedVideo = await VideoModel.loadFull(video.id)
if (!refreshedVideo) return
// Only federate and notify after the torrent creation

View file

@ -35,7 +35,7 @@ async function processDislike (activity: ActivityCreate | ActivityDislike, byAct
if (!onlyVideo.isOwned()) return
return sequelizeTypescript.transaction(async t => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(onlyVideo.id, t)
const video = await VideoModel.loadFull(onlyVideo.id, t)
const existingRate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byAccount.id, video.id, activity.id, t)
if (existingRate && existingRate.type === 'dislike') return

View file

@ -34,7 +34,7 @@ async function processLikeVideo (byActor: MActorSignature, activity: ActivityLik
if (!onlyVideo.isOwned()) return
return sequelizeTypescript.transaction(async t => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(onlyVideo.id, t)
const video = await VideoModel.loadFull(onlyVideo.id, t)
const existingRate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byAccount.id, video.id, activity.id, t)
if (existingRate && existingRate.type === 'like') return

View file

@ -63,7 +63,7 @@ async function processUndoLike (byActor: MActorSignature, activity: ActivityUndo
return sequelizeTypescript.transaction(async t => {
if (!byActor.Account) throw new Error('Unknown account ' + byActor.url)
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(onlyVideo.id, t)
const video = await VideoModel.loadFull(onlyVideo.id, t)
const rate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byActor.Account.id, video.id, likeActivity.id, t)
if (!rate || rate.type !== 'like') throw new Error(`Unknown like by account ${byActor.Account.id} for video ${video.id}.`)
@ -87,7 +87,7 @@ async function processUndoDislike (byActor: MActorSignature, activity: ActivityU
return sequelizeTypescript.transaction(async t => {
if (!byActor.Account) throw new Error('Unknown account ' + byActor.url)
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(onlyVideo.id, t)
const video = await VideoModel.loadFull(onlyVideo.id, t)
const rate = await AccountVideoRateModel.loadByAccountAndVideoOrUrl(byActor.Account.id, video.id, dislike.id, t)
if (!rate || rate.type !== 'dislike') throw new Error(`Unknown dislike by account ${byActor.Account.id} for video ${video.id}.`)

View file

@ -83,7 +83,7 @@ async function sendUndoCacheFile (byActor: MActor, redundancyModel: MVideoRedund
return
}
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(associatedVideo.id)
const video = await VideoModel.loadFull(associatedVideo.id)
const createActivity = buildCreateActivity(redundancyModel.url, byActor, redundancyModel.toActivityPubObject())
return sendUndoVideoRelatedActivity({

View file

@ -92,7 +92,7 @@ async function sendUpdateCacheFile (byActor: MActorLight, redundancyModel: MVide
return
}
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(associatedVideo.id)
const video = await VideoModel.loadFull(associatedVideo.id)
const activityBuilder = (audience: ActivityAudience) => {
const redundancyObject = redundancyModel.toActivityPubObject()

View file

@ -35,7 +35,7 @@ class VideosCaptionCache extends AbstractVideoStaticFileCache <string> {
if (videoCaption.isOwned()) throw new Error('Cannot load remote caption of owned video.')
// Used to fetch the path
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoCaption.videoId)
const video = await VideoModel.loadFull(videoCaption.videoId)
if (!video) return undefined
const remoteUrl = videoCaption.getFileUrl(video)

View file

@ -30,7 +30,7 @@ class VideosPreviewCache extends AbstractVideoStaticFileCache <string> {
// Key is the video UUID
protected async loadRemoteFile (key: string) {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(key)
const video = await VideoModel.loadFull(key)
if (!video) return undefined
if (video.isOwned()) throw new Error('Cannot load remote preview of owned video.')

View file

@ -40,7 +40,7 @@ class VideosTorrentCache extends AbstractVideoStaticFileCache <string> {
if (file.getVideo().isOwned()) throw new Error('Cannot load remote file of owned video.')
// Used to fetch the path
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(file.getVideo().id)
const video = await VideoModel.loadFull(file.getVideo().id)
if (!video) return undefined
const remoteUrl = file.getRemoteTorrentUrl(video)

View file

@ -17,7 +17,7 @@ async function processActivityPubHttpFetcher (job: Job) {
const payload = job.data as ActivitypubHttpFetcherPayload
let video: MVideoFullLight
if (payload.videoId) video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoId)
if (payload.videoId) video = await VideoModel.loadFull(payload.videoId)
const fetcherType: { [ id in FetchType ]: (items: any[]) => Promise<any> } = {
'activity': items => processActivities(items, { outboxUrl: payload.uri, fromFetch: true }),

View file

@ -18,7 +18,7 @@ async function processVideoFileImport (job: Job) {
const payload = job.data as VideoFileImportPayload
logger.info('Processing video file import in job %d.', job.id)
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoUUID)
const video = await VideoModel.loadFull(payload.videoUUID)
// No video, maybe deleted?
if (!video) {
logger.info('Do not process job %d, video does not exist.', job.id)

View file

@ -219,7 +219,7 @@ async function processFile (downloader: () => Promise<string>, videoImport: MVid
if (previewModel) await video.addAndSaveThumbnail(previewModel, t)
// Now we can federate the video (reload from database, we need more attributes)
const videoForFederation = await VideoModel.loadAndPopulateAccountAndServerAndTags(video.uuid, t)
const videoForFederation = await VideoModel.loadFull(video.uuid, t)
await federateVideoIfNeeded(videoForFederation, true, t)
// Update video import object

View file

@ -144,7 +144,7 @@ async function replaceLiveByReplay (options: {
await liveSession.save()
// Remove old HLS playlist video files
const videoWithFiles = await VideoModel.loadAndPopulateAccountAndServerAndTags(liveVideo.id)
const videoWithFiles = await VideoModel.loadFull(liveVideo.id)
const hlsPlaylist = videoWithFiles.getHLSPlaylist()
await VideoFileModel.removeHLSFilesOfVideoId(hlsPlaylist.id)
@ -241,7 +241,7 @@ async function cleanupLiveAndFederate (options: {
}
try {
const fullVideo = await VideoModel.loadAndPopulateAccountAndServerAndTags(video.id)
const fullVideo = await VideoModel.loadFull(video.id)
return federateVideoIfNeeded(fullVideo, false, undefined)
} catch (err) {
logger.warn('Cannot federate live after cleanup', { videoId: video.id, err })

View file

@ -44,7 +44,7 @@ async function processVideoStudioEdition (job: Job) {
logger.info('Process video studio edition of %s in job %d.', payload.videoUUID, job.id, lTags)
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoUUID)
const video = await VideoModel.loadFull(payload.videoUUID)
// No video, maybe deleted?
if (!video) {

View file

@ -42,7 +42,7 @@ async function processVideoTranscoding (job: Job) {
const payload = job.data as VideoTranscodingPayload
logger.info('Processing transcoding job %d.', job.id, lTags(payload.videoUUID))
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoUUID)
const video = await VideoModel.loadFull(payload.videoUUID)
// No video, maybe deleted?
if (!video) {
logger.info('Do not process job %d, video does not exist.', job.id, lTags(payload.videoUUID))
@ -180,7 +180,7 @@ async function onVideoFirstWebTorrentTranscoding (
const { resolution, isPortraitMode, audioStream } = await videoArg.probeMaxQualityFile()
// Maybe the video changed in database, refresh it
const videoDatabase = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoArg.uuid)
const videoDatabase = await VideoModel.loadFull(videoArg.uuid)
// Video does not exist anymore
if (!videoDatabase) return undefined

View file

@ -351,7 +351,7 @@ class LiveManager {
const videoId = live.videoId
try {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId)
const video = await VideoModel.loadFull(videoId)
logger.info('Will publish and federate live %s.', video.url, localLTags)
@ -390,7 +390,7 @@ class LiveManager {
const { videoId, liveSession: liveSessionArg, cleanupNow = false } = options
try {
const fullVideo = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId)
const fullVideo = await VideoModel.loadFull(videoId)
if (!fullVideo) return
const live = await VideoLiveModel.loadByVideoId(fullVideo.id)

View file

@ -35,7 +35,7 @@ function loadVideo (
)
}
if (fetchType === 'all') return VideoModel.loadAndPopulateAccountAndServerAndTags(id, undefined, userId)
if (fetchType === 'all') return VideoModel.loadFull(id, undefined, userId)
if (fetchType === 'only-immutable-attributes') return VideoModel.loadImmutableAttributes(id)

View file

@ -83,7 +83,7 @@ function buildVideosHelpers () {
removeVideo: (id: number) => {
return sequelizeTypescript.transaction(async t => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id, t)
const video = await VideoModel.loadFull(id, t)
await video.destroy({ transaction: t })
})
@ -94,7 +94,7 @@ function buildVideosHelpers () {
},
getFiles: async (id: number | string) => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(id)
const video = await VideoModel.loadFull(id)
if (!video) return undefined
const webtorrentVideoFiles = (video.VideoFiles || []).map(f => ({
@ -178,14 +178,14 @@ function buildModerationHelpers () {
},
blacklistVideo: async (options: { videoIdOrUUID: number | string, createOptions: VideoBlacklistCreate }) => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(options.videoIdOrUUID)
const video = await VideoModel.loadFull(options.videoIdOrUUID)
if (!video) return
await blacklistVideo(video, options.createOptions)
},
unblacklistVideo: async (options: { videoIdOrUUID: number | string }) => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(options.videoIdOrUUID)
const video = await VideoModel.loadFull(options.videoIdOrUUID)
if (!video) return
const videoBlacklist = await VideoBlacklistModel.loadByVideoId(video.id)

View file

@ -30,7 +30,7 @@ export class UpdateVideosScheduler extends AbstractScheduler {
for (const schedule of schedules) {
await sequelizeTypescript.transaction(async t => {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(schedule.videoId, t)
const video = await VideoModel.loadFull(schedule.videoId, t)
logger.info('Executing scheduled video update on %s.', video.uuid)

View file

@ -26,7 +26,7 @@ export class VideoViewsBufferScheduler extends AbstractScheduler {
const views = await Redis.Instance.getLocalVideoViews(videoId)
await Redis.Instance.deleteLocalVideoViews(videoId)
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId)
const video = await VideoModel.loadFull(videoId)
if (!video) {
logger.debug('Video %d does not exist anymore, skipping videos view addition.', videoId, lTags())
continue

View file

@ -36,7 +36,7 @@ async function federateAllVideosOfChannel (videoChannel: MChannelId) {
const videoIds = await VideoModel.getAllIdsFromChannel(videoChannel)
for (const videoId of videoIds) {
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(videoId)
const video = await VideoModel.loadFull(videoId)
await federateVideoIfNeeded(video, false)
}

View file

@ -43,7 +43,7 @@ function moveToNextState (options: {
return sequelizeTypescript.transaction(async t => {
// Maybe the video changed in database, refresh it
const videoDatabase = await VideoModel.loadAndPopulateAccountAndServerAndTags(video.uuid, t)
const videoDatabase = await VideoModel.loadFull(video.uuid, t)
// Video does not exist anymore
if (!videoDatabase) return undefined

View file

@ -144,7 +144,7 @@ async function checkCanSeeAuthVideo (req: Request, res: Response, video: MVideoI
const videoWithRights = (video as MVideoWithRights).VideoChannel?.Account?.userId
? video as MVideoWithRights
: await VideoModel.loadAndPopulateAccountAndServerAndTags(video.id)
: await VideoModel.loadFull(video.id)
const privacy = videoWithRights.privacy

View file

@ -13,7 +13,7 @@ import { VideoTableAttributes } from './shared/video-table-attributes'
export type GetType =
'api' |
'full-light' |
'full' |
'account-blacklist-files' |
'all-files' |
'thumbnails' |
@ -40,7 +40,7 @@ export class VideoModelGetQueryBuilder {
private readonly videoModelBuilder: VideoModelBuilder
private static readonly videoFilesInclude = new Set<GetType>([ 'api', 'full-light', 'account-blacklist-files', 'all-files' ])
private static readonly videoFilesInclude = new Set<GetType>([ 'api', 'full', 'account-blacklist-files', 'all-files' ])
constructor (protected readonly sequelize: Sequelize) {
this.videoQueryBuilder = new VideosModelGetQuerySubBuilder(sequelize)
@ -96,16 +96,16 @@ export class VideosModelGetQuerySubBuilder extends AbstractVideoQueryBuilder {
protected streamingPlaylistFilesQuery: string
private static readonly trackersInclude = new Set<GetType>([ 'api' ])
private static readonly liveInclude = new Set<GetType>([ 'api', 'full-light' ])
private static readonly scheduleUpdateInclude = new Set<GetType>([ 'api', 'full-light' ])
private static readonly tagsInclude = new Set<GetType>([ 'api', 'full-light' ])
private static readonly userHistoryInclude = new Set<GetType>([ 'api', 'full-light' ])
private static readonly accountInclude = new Set<GetType>([ 'api', 'full-light', 'account-blacklist-files' ])
private static readonly liveInclude = new Set<GetType>([ 'api', 'full' ])
private static readonly scheduleUpdateInclude = new Set<GetType>([ 'api', 'full' ])
private static readonly tagsInclude = new Set<GetType>([ 'api', 'full' ])
private static readonly userHistoryInclude = new Set<GetType>([ 'api', 'full' ])
private static readonly accountInclude = new Set<GetType>([ 'api', 'full', 'account-blacklist-files' ])
private static readonly ownerUserInclude = new Set<GetType>([ 'blacklist-rights' ])
private static readonly blacklistedInclude = new Set<GetType>([
'api',
'full-light',
'full',
'account-blacklist-files',
'thumbnails-blacklist',
'blacklist-rights'
@ -113,7 +113,7 @@ export class VideosModelGetQuerySubBuilder extends AbstractVideoQueryBuilder {
private static readonly thumbnailsInclude = new Set<GetType>([
'api',
'full-light',
'full',
'account-blacklist-files',
'all-files',
'thumbnails',

View file

@ -1352,10 +1352,10 @@ export class VideoModel extends Model<Partial<AttributesOnly<VideoModel>>> {
return queryBuilder.queryVideo({ url, transaction, type: 'account-blacklist-files' })
}
static loadAndPopulateAccountAndServerAndTags (id: number | string, t?: Transaction, userId?: number): Promise<MVideoFullLight> {
static loadFull (id: number | string, t?: Transaction, userId?: number): Promise<MVideoFullLight> {
const queryBuilder = new VideoModelGetQueryBuilder(VideoModel.sequelize)
return queryBuilder.queryVideo({ id, transaction: t, type: 'full-light', userId })
return queryBuilder.queryVideo({ id, transaction: t, type: 'full', userId })
}
static loadForGetAPI (parameters: {