]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/video/video-interface.ts
Move video file metadata in their own table
[github/Chocobozzz/PeerTube.git] / server / models / video / video-interface.ts
index 2fabcd9065111b94ba71bcffa52020158ae4c39b..976c70b5e3660e7a6b3cf7e81082e630c2d6422a 100644 (file)
@@ -3,11 +3,19 @@ import * as Promise from 'bluebird'
 
 import { AuthorInstance } from './author-interface'
 import { TagAttributes, TagInstance } from './tag-interface'
+import { VideoFileAttributes, VideoFileInstance } from './video-file-interface'
 
 // Don't use barrel, import just what we need
 import { Video as FormatedVideo } from '../../../shared/models/videos/video.model'
 import { ResultList } from '../../../shared/models/result-list.model'
 
+export type FormatedRemoteVideoFile = {
+  infoHash: string
+  resolution: number
+  extname: string
+  size: number
+}
+
 export type FormatedAddRemoteVideo = {
   uuid: string
   name: string
@@ -16,17 +24,16 @@ export type FormatedAddRemoteVideo = {
   language: number
   nsfw: boolean
   description: string
-  infoHash: string
   author: string
   duration: number
   thumbnailData: string
   tags: string[]
   createdAt: Date
   updatedAt: Date
-  extname: string
   views: number
   likes: number
   dislikes: number
+  files: FormatedRemoteVideoFile[]
 }
 
 export type FormatedUpdateRemoteVideo = {
@@ -37,31 +44,35 @@ export type FormatedUpdateRemoteVideo = {
   language: number
   nsfw: boolean
   description: string
-  infoHash: string
   author: string
   duration: number
   tags: string[]
   createdAt: Date
   updatedAt: Date
-  extname: string
   views: number
   likes: number
   dislikes: number
+  files: FormatedRemoteVideoFile[]
 }
 
 export namespace VideoMethods {
-  export type GenerateMagnetUri = (this: VideoInstance) => string
-  export type GetVideoFilename = (this: VideoInstance) => string
   export type GetThumbnailName = (this: VideoInstance) => string
   export type GetPreviewName = (this: VideoInstance) => string
-  export type GetTorrentName = (this: VideoInstance) => string
   export type IsOwned = (this: VideoInstance) => boolean
   export type ToFormatedJSON = (this: VideoInstance) => FormatedVideo
 
+  export type GenerateMagnetUri = (this: VideoInstance, videoFile: VideoFileInstance) => string
+  export type GetTorrentFileName = (this: VideoInstance, videoFile: VideoFileInstance) => string
+  export type GetVideoFilename = (this: VideoInstance, videoFile: VideoFileInstance) => string
+  export type CreatePreview = (this: VideoInstance, videoFile: VideoFileInstance) => Promise<string>
+  export type CreateThumbnail = (this: VideoInstance, videoFile: VideoFileInstance) => Promise<string>
+  export type GetVideoFilePath = (this: VideoInstance, videoFile: VideoFileInstance) => string
+  export type CreateTorrentAndSetInfoHash = (this: VideoInstance, videoFile: VideoFileInstance) => Promise<void>
+
   export type ToAddRemoteJSON = (this: VideoInstance) => Promise<FormatedAddRemoteVideo>
   export type ToUpdateRemoteJSON = (this: VideoInstance) => FormatedUpdateRemoteVideo
 
-  export type TranscodeVideofile = (this: VideoInstance) => Promise<void>
+  export type TranscodeVideofile = (this: VideoInstance, inputVideoFile: VideoFileInstance) => Promise<void>
 
   // Return thumbnail name
   export type GenerateThumbnailFromData = (video: VideoInstance, thumbnailData: string) => Promise<string>
@@ -86,31 +97,25 @@ export namespace VideoMethods {
   export type LoadAndPopulateAuthor = (id: number) => Promise<VideoInstance>
   export type LoadAndPopulateAuthorAndPodAndTags = (id: number) => Promise<VideoInstance>
   export type LoadByUUIDAndPopulateAuthorAndPodAndTags = (uuid: string) => Promise<VideoInstance>
+
+  export type RemoveThumbnail = (this: VideoInstance) => Promise<void>
+  export type RemovePreview = (this: VideoInstance) => Promise<void>
+  export type RemoveFile = (this: VideoInstance, videoFile: VideoFileInstance) => Promise<void>
+  export type RemoveTorrent = (this: VideoInstance, videoFile: VideoFileInstance) => Promise<void>
 }
 
 export interface VideoClass {
-  generateMagnetUri: VideoMethods.GenerateMagnetUri
-  getVideoFilename: VideoMethods.GetVideoFilename
-  getThumbnailName: VideoMethods.GetThumbnailName
-  getPreviewName: VideoMethods.GetPreviewName
-  getTorrentName: VideoMethods.GetTorrentName
-  isOwned: VideoMethods.IsOwned
-  toFormatedJSON: VideoMethods.ToFormatedJSON
-  toAddRemoteJSON: VideoMethods.ToAddRemoteJSON
-  toUpdateRemoteJSON: VideoMethods.ToUpdateRemoteJSON
-  transcodeVideofile: VideoMethods.TranscodeVideofile
-
   generateThumbnailFromData: VideoMethods.GenerateThumbnailFromData
   getDurationFromFile: VideoMethods.GetDurationFromFile
   list: VideoMethods.List
   listForApi: VideoMethods.ListForApi
-  loadByHostAndUUID: VideoMethods.LoadByHostAndUUID
   listOwnedAndPopulateAuthorAndTags: VideoMethods.ListOwnedAndPopulateAuthorAndTags
   listOwnedByAuthor: VideoMethods.ListOwnedByAuthor
   load: VideoMethods.Load
-  loadByUUID: VideoMethods.LoadByUUID
   loadAndPopulateAuthor: VideoMethods.LoadAndPopulateAuthor
   loadAndPopulateAuthorAndPodAndTags: VideoMethods.LoadAndPopulateAuthorAndPodAndTags
+  loadByHostAndUUID: VideoMethods.LoadByHostAndUUID
+  loadByUUID: VideoMethods.LoadByUUID
   loadByUUIDAndPopulateAuthorAndPodAndTags: VideoMethods.LoadByUUIDAndPopulateAuthorAndPodAndTags
   searchAndPopulateAuthorAndPodAndTags: VideoMethods.SearchAndPopulateAuthorAndPodAndTags
 }
@@ -118,13 +123,11 @@ export interface VideoClass {
 export interface VideoAttributes {
   uuid?: string
   name: string
-  extname: string
   category: number
   licence: number
   language: number
   nsfw: boolean
   description: string
-  infoHash?: string
   duration: number
   views?: number
   likes?: number
@@ -133,6 +136,7 @@ export interface VideoAttributes {
 
   Author?: AuthorInstance
   Tags?: TagInstance[]
+  VideoFiles?: VideoFileInstance[]
 }
 
 export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance<VideoAttributes> {
@@ -140,18 +144,27 @@ export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.In
   createdAt: Date
   updatedAt: Date
 
+  createPreview: VideoMethods.CreatePreview
+  createThumbnail: VideoMethods.CreateThumbnail
+  createTorrentAndSetInfoHash: VideoMethods.CreateTorrentAndSetInfoHash
   generateMagnetUri: VideoMethods.GenerateMagnetUri
-  getVideoFilename: VideoMethods.GetVideoFilename
-  getThumbnailName: VideoMethods.GetThumbnailName
   getPreviewName: VideoMethods.GetPreviewName
-  getTorrentName: VideoMethods.GetTorrentName
+  getThumbnailName: VideoMethods.GetThumbnailName
+  getTorrentFileName: VideoMethods.GetTorrentFileName
+  getVideoFilename: VideoMethods.GetVideoFilename
+  getVideoFilePath: VideoMethods.GetVideoFilePath
   isOwned: VideoMethods.IsOwned
-  toFormatedJSON: VideoMethods.ToFormatedJSON
+  removeFile: VideoMethods.RemoveFile
+  removePreview: VideoMethods.RemovePreview
+  removeThumbnail: VideoMethods.RemoveThumbnail
+  removeTorrent: VideoMethods.RemoveTorrent
   toAddRemoteJSON: VideoMethods.ToAddRemoteJSON
+  toFormatedJSON: VideoMethods.ToFormatedJSON
   toUpdateRemoteJSON: VideoMethods.ToUpdateRemoteJSON
   transcodeVideofile: VideoMethods.TranscodeVideofile
 
   setTags: Sequelize.HasManySetAssociationsMixin<TagAttributes, string>
+  setVideoFiles: Sequelize.HasManySetAssociationsMixin<VideoFileAttributes, string>
 }
 
 export interface VideoModel extends VideoClass, Sequelize.Model<VideoInstance, VideoAttributes> {}