diff options
Diffstat (limited to 'server/models/video/video-file.ts')
-rw-r--r-- | server/models/video/video-file.ts | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/server/models/video/video-file.ts b/server/models/video/video-file.ts index 09fc5288b..627c95763 100644 --- a/server/models/video/video-file.ts +++ b/server/models/video/video-file.ts | |||
@@ -23,9 +23,11 @@ import validator from 'validator' | |||
23 | import { buildRemoteVideoBaseUrl } from '@server/helpers/activitypub' | 23 | import { buildRemoteVideoBaseUrl } from '@server/helpers/activitypub' |
24 | import { logger } from '@server/helpers/logger' | 24 | import { logger } from '@server/helpers/logger' |
25 | import { extractVideo } from '@server/helpers/video' | 25 | import { extractVideo } from '@server/helpers/video' |
26 | import { getTorrentFilePath } from '@server/lib/video-paths' | 26 | import { getHLSPublicFileUrl, getWebTorrentPublicFileUrl } from '@server/lib/object-storage' |
27 | import { getFSTorrentFilePath } from '@server/lib/paths' | ||
27 | import { MStreamingPlaylistVideo, MVideo, MVideoWithHost } from '@server/types/models' | 28 | import { MStreamingPlaylistVideo, MVideo, MVideoWithHost } from '@server/types/models' |
28 | import { AttributesOnly } from '@shared/core-utils' | 29 | import { AttributesOnly } from '@shared/core-utils' |
30 | import { VideoStorage } from '@shared/models' | ||
29 | import { | 31 | import { |
30 | isVideoFileExtnameValid, | 32 | isVideoFileExtnameValid, |
31 | isVideoFileInfoHashValid, | 33 | isVideoFileInfoHashValid, |
@@ -214,6 +216,11 @@ export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel> | |||
214 | @Column | 216 | @Column |
215 | videoId: number | 217 | videoId: number |
216 | 218 | ||
219 | @AllowNull(false) | ||
220 | @Default(VideoStorage.FILE_SYSTEM) | ||
221 | @Column | ||
222 | storage: VideoStorage | ||
223 | |||
217 | @BelongsTo(() => VideoModel, { | 224 | @BelongsTo(() => VideoModel, { |
218 | foreignKey: { | 225 | foreignKey: { |
219 | allowNull: true | 226 | allowNull: true |
@@ -273,7 +280,7 @@ export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel> | |||
273 | 280 | ||
274 | static async doesOwnedWebTorrentVideoFileExist (filename: string) { | 281 | static async doesOwnedWebTorrentVideoFileExist (filename: string) { |
275 | const query = 'SELECT 1 FROM "videoFile" INNER JOIN "video" ON "video"."id" = "videoFile"."videoId" AND "video"."remote" IS FALSE ' + | 282 | const query = 'SELECT 1 FROM "videoFile" INNER JOIN "video" ON "video"."id" = "videoFile"."videoId" AND "video"."remote" IS FALSE ' + |
276 | 'WHERE "filename" = $filename LIMIT 1' | 283 | `WHERE "filename" = $filename AND "storage" = ${VideoStorage.FILE_SYSTEM} LIMIT 1` |
277 | 284 | ||
278 | return doesExist(query, { filename }) | 285 | return doesExist(query, { filename }) |
279 | } | 286 | } |
@@ -450,9 +457,20 @@ export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel> | |||
450 | return !!this.videoStreamingPlaylistId | 457 | return !!this.videoStreamingPlaylistId |
451 | } | 458 | } |
452 | 459 | ||
460 | getObjectStorageUrl () { | ||
461 | if (this.isHLS()) { | ||
462 | return getHLSPublicFileUrl(this.fileUrl) | ||
463 | } | ||
464 | |||
465 | return getWebTorrentPublicFileUrl(this.fileUrl) | ||
466 | } | ||
467 | |||
453 | getFileUrl (video: MVideo) { | 468 | getFileUrl (video: MVideo) { |
454 | if (!this.Video) this.Video = video as VideoModel | 469 | if (this.storage === VideoStorage.OBJECT_STORAGE) { |
470 | return this.getObjectStorageUrl() | ||
471 | } | ||
455 | 472 | ||
473 | if (!this.Video) this.Video = video as VideoModel | ||
456 | if (video.isOwned()) return WEBSERVER.URL + this.getFileStaticPath(video) | 474 | if (video.isOwned()) return WEBSERVER.URL + this.getFileStaticPath(video) |
457 | 475 | ||
458 | return this.fileUrl | 476 | return this.fileUrl |
@@ -503,7 +521,7 @@ export class VideoFileModel extends Model<Partial<AttributesOnly<VideoFileModel> | |||
503 | removeTorrent () { | 521 | removeTorrent () { |
504 | if (!this.torrentFilename) return null | 522 | if (!this.torrentFilename) return null |
505 | 523 | ||
506 | const torrentPath = getTorrentFilePath(this) | 524 | const torrentPath = getFSTorrentFilePath(this) |
507 | return remove(torrentPath) | 525 | return remove(torrentPath) |
508 | .catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err })) | 526 | .catch(err => logger.warn('Cannot delete torrent %s.', torrentPath, { err })) |
509 | } | 527 | } |