X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-caption.ts;h=bbda0f3eeb60626a7607776df62ae9d913f6f20c;hb=fd6a74a83594bfb59e28bf9cae71a39884ebcc2f;hp=bfdec73e9849012947ab2af3ad88e19dbb43f80b;hpb=8efc27bf14f1fe3ed23cd8a6d2de1f0918a7f769;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-caption.ts b/server/models/video/video-caption.ts index bfdec73e9..bbda0f3ee 100644 --- a/server/models/video/video-caption.ts +++ b/server/models/video/video-caption.ts @@ -17,6 +17,7 @@ import { } from 'sequelize-typescript' import { v4 as uuidv4 } from 'uuid' import { MVideo, MVideoCaption, MVideoCaptionFormattable, MVideoCaptionVideo } from '@server/types/models' +import { AttributesOnly } from '@shared/core-utils' import { VideoCaption } from '../../../shared/models/videos/caption/video-caption.model' import { isVideoCaptionLanguageValid } from '../../helpers/custom-validators/video-captions' import { logger } from '../../helpers/logger' @@ -57,7 +58,7 @@ export enum ScopeNames { } ] }) -export class VideoCaptionModel extends Model { +export class VideoCaptionModel extends Model>> { @CreatedAt createdAt: Date @@ -108,11 +109,12 @@ export class VideoCaptionModel extends Model { return undefined } - static loadByVideoIdAndLanguage (videoId: string | number, language: string): Promise { + static loadByVideoIdAndLanguage (videoId: string | number, language: string, transaction?: Transaction): Promise { const videoInclude = { model: VideoModel.unscoped(), attributes: [ 'id', 'remote', 'uuid' ], - where: buildWhereIdOrUUID(videoId) + where: buildWhereIdOrUUID(videoId), + transaction } const query = { @@ -144,19 +146,21 @@ export class VideoCaptionModel extends Model { } static async insertOrReplaceLanguage (caption: MVideoCaption, transaction: Transaction) { - const existing = await VideoCaptionModel.loadByVideoIdAndLanguage(caption.videoId, caption.language) + const existing = await VideoCaptionModel.loadByVideoIdAndLanguage(caption.videoId, caption.language, transaction) + // Delete existing file if (existing) await existing.destroy({ transaction }) return caption.save({ transaction }) } - static listVideoCaptions (videoId: number): Promise { + static listVideoCaptions (videoId: number, transaction?: Transaction): Promise { const query = { order: [ [ 'language', 'ASC' ] ] as OrderItem[], where: { videoId - } + }, + transaction } return VideoCaptionModel.scope(ScopeNames.WITH_VIDEO_UUID_AND_REMOTE).findAll(query) @@ -210,4 +214,10 @@ export class VideoCaptionModel extends Model { return this.fileUrl } + + isEqual (this: MVideoCaption, other: MVideoCaption) { + if (this.fileUrl) return this.fileUrl === other.fileUrl + + return this.filename === other.filename + } }