X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-caption.ts;h=b68a6e99f01a1c9a1f03b6df6f3abe8808d44c74;hb=951b582f52d0694865f020f0e53ccfad2d2d6033;hp=6335d44e4f088be495d231aadd2a33302deb1a38;hpb=d5692d4088cdd9fde3be6ff34be8ce2816dab0cf;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-caption.ts b/server/models/video/video-caption.ts index 6335d44e4..b68a6e99f 100644 --- a/server/models/video/video-caption.ts +++ b/server/models/video/video-caption.ts @@ -5,6 +5,7 @@ import { BelongsTo, Column, CreatedAt, + DataType, ForeignKey, Is, Model, @@ -16,13 +17,14 @@ import { buildWhereIdOrUUID, throwIfNotValid } from '../utils' import { VideoModel } from './video' import { isVideoCaptionLanguageValid } from '../../helpers/custom-validators/video-captions' import { VideoCaption } from '../../../shared/models/videos/caption/video-caption.model' -import { LAZY_STATIC_PATHS, VIDEO_LANGUAGES } from '../../initializers/constants' +import { CONSTRAINTS_FIELDS, LAZY_STATIC_PATHS, VIDEO_LANGUAGES, WEBSERVER } from '../../initializers/constants' import { join } from 'path' import { logger } from '../../helpers/logger' import { remove } from 'fs-extra' import { CONFIG } from '../../initializers/config' import * as Bluebird from 'bluebird' -import { MVideoCaptionFormattable, MVideoCaptionVideo } from '@server/typings/models' +import { MVideoAccountLight, MVideoCaptionFormattable, MVideoCaptionVideo } from '@server/types/models' +import { buildRemoteVideoBaseUrl } from '@server/helpers/activitypub' export enum ScopeNames { WITH_VIDEO_UUID_AND_REMOTE = 'WITH_VIDEO_UUID_AND_REMOTE' @@ -64,6 +66,10 @@ export class VideoCaptionModel extends Model { @Column language: string + @AllowNull(true) + @Column(DataType.STRING(CONSTRAINTS_FIELDS.COMMONS.URL.max)) + fileUrl: string + @ForeignKey(() => VideoModel) @Column videoId: number @@ -114,10 +120,11 @@ export class VideoCaptionModel extends Model { return VideoCaptionModel.findOne(query) } - static insertOrReplaceLanguage (videoId: number, language: string, transaction: Transaction) { + static insertOrReplaceLanguage (videoId: number, language: string, fileUrl: string, transaction: Transaction) { const values = { videoId, - language + language, + fileUrl } return VideoCaptionModel.upsert(values, { transaction, returning: true }) @@ -175,4 +182,14 @@ export class VideoCaptionModel extends Model { removeCaptionFile (this: MVideoCaptionFormattable) { return remove(CONFIG.STORAGE.CAPTIONS_DIR + this.getCaptionName()) } + + getFileUrl (video: MVideoAccountLight) { + if (!this.Video) this.Video = video as VideoModel + + if (video.isOwned()) return WEBSERVER.URL + this.getCaptionStaticPath() + if (this.fileUrl) return this.fileUrl + + // Fallback if we don't have a file URL + return buildRemoteVideoBaseUrl(video, this.getCaptionStaticPath()) + } }