X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-interface.ts;h=dd457bb00620ff476573fc74a1b707ba50c22605;hb=51c443dbe0284c5ec54033be06f554ec37397bce;hp=5fefc2bb168e5db12148aaf062298b0b514a61c3;hpb=70c065d64c330196d371941d9294a55da6e3aa37;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-interface.ts b/server/models/video/video-interface.ts index 5fefc2bb1..dd457bb00 100644 --- a/server/models/video/video-interface.ts +++ b/server/models/video/video-interface.ts @@ -1,151 +1,142 @@ import * as Sequelize from 'sequelize' +import * as Promise from 'bluebird' -import { AuthorInstance } from './author-interface' -import { VideoTagInstance } from './video-tag-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/video.model' - -export type FormatedAddRemoteVideo = { - name: string - category: number - licence: number - language: number - nsfw: boolean - description: string - infoHash: string - remoteId: string - author: string - duration: number - thumbnailData: string - tags: string[] - createdAt: Date - updatedAt: Date - extname: string - views: number - likes: number - dislikes: number -} - -export type FormatedUpdateRemoteVideo = { - name: string - category: number - licence: number - language: number - nsfw: boolean - description: string - infoHash: string - remoteId: string - author: string - duration: number - tags: string[] - createdAt: Date - updatedAt: Date - extname: string - views: number - likes: number - dislikes: number -} +import { + Video as FormattedVideo, + VideoDetails as FormattedDetailsVideo +} from '../../../shared/models/videos/video.model' +import { RemoteVideoUpdateData } from '../../../shared/models/pods/remote-video/remote-video-update-request.model' +import { RemoteVideoCreateData } from '../../../shared/models/pods/remote-video/remote-video-create-request.model' +import { ResultList } from '../../../shared/models/result-list.model' +import { VideoChannelInstance } from './video-channel-interface' 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 ToAddRemoteJSONCallback = (err: Error, videoFormated?: FormatedAddRemoteVideo) => void - export type ToAddRemoteJSON = (this: VideoInstance, callback: ToAddRemoteJSONCallback) => void - - export type ToUpdateRemoteJSON = (this: VideoInstance) => FormatedUpdateRemoteVideo - - export type TranscodeVideofileCallback = (err: Error) => void - export type TranscodeVideofile = (this: VideoInstance, callback: TranscodeVideofileCallback) => void - - export type GenerateThumbnailFromDataCallback = (err: Error, thumbnailName?: string) => void - export type GenerateThumbnailFromData = (video: VideoInstance, thumbnailData: string, callback: GenerateThumbnailFromDataCallback) => void - - export type GetDurationFromFileCallback = (err: Error, duration?: number) => void - export type GetDurationFromFile = (videoPath, callback) => void - - export type ListCallback = (err: Error, videoInstances: VideoInstance[]) => void - export type List = (callback: ListCallback) => void - - export type ListForApiCallback = (err: Error, videoInstances?: VideoInstance[], total?: number) => void - export type ListForApi = (start: number, count: number, sort: string, callback: ListForApiCallback) => void - - export type LoadByHostAndRemoteIdCallback = (err: Error, videoInstance: VideoInstance) => void - export type LoadByHostAndRemoteId = (fromHost: string, remoteId: string, callback: LoadByHostAndRemoteIdCallback) => void - - export type ListOwnedAndPopulateAuthorAndTagsCallback = (err: Error, videoInstances: VideoInstance[]) => void - export type ListOwnedAndPopulateAuthorAndTags = (callback: ListOwnedAndPopulateAuthorAndTagsCallback) => void - - export type ListOwnedByAuthorCallback = (err: Error, videoInstances: VideoInstance[]) => void - export type ListOwnedByAuthor = (author: string, callback: ListOwnedByAuthorCallback) => void - - export type LoadCallback = (err: Error, videoInstance: VideoInstance) => void - export type Load = (id: string, callback: LoadCallback) => void - - export type LoadAndPopulateAuthorCallback = (err: Error, videoInstance: VideoInstance) => void - export type LoadAndPopulateAuthor = (id: string, callback: LoadAndPopulateAuthorCallback) => void - - export type LoadAndPopulateAuthorAndPodAndTagsCallback = (err: Error, videoInstance: VideoInstance) => void - export type LoadAndPopulateAuthorAndPodAndTags = (id: string, callback: LoadAndPopulateAuthorAndPodAndTagsCallback) => void - - export type SearchAndPopulateAuthorAndPodAndTagsCallback = (err: Error, videoInstances?: VideoInstance[], total?: number) => void - export type SearchAndPopulateAuthorAndPodAndTags = (value: string, field: string, start: number, count: number, sort: string, callback: SearchAndPopulateAuthorAndPodAndTagsCallback) => void + export type ToFormattedJSON = (this: VideoInstance) => FormattedVideo + export type ToFormattedDetailsJSON = (this: VideoInstance) => FormattedDetailsVideo + + export type GetOriginalFile = (this: VideoInstance) => VideoFileInstance + export type GetTorrentFileName = (this: VideoInstance, videoFile: VideoFileInstance) => string + export type GetVideoFilename = (this: VideoInstance, videoFile: VideoFileInstance) => string + export type CreatePreview = (this: VideoInstance, videoFile: VideoFileInstance) => Promise + export type CreateThumbnail = (this: VideoInstance, videoFile: VideoFileInstance) => Promise + export type GetVideoFilePath = (this: VideoInstance, videoFile: VideoFileInstance) => string + export type CreateTorrentAndSetInfoHash = (this: VideoInstance, videoFile: VideoFileInstance) => Promise + + export type ToAddRemoteJSON = (this: VideoInstance) => Promise + export type ToUpdateRemoteJSON = (this: VideoInstance) => RemoteVideoUpdateData + + export type OptimizeOriginalVideofile = (this: VideoInstance) => Promise + export type TranscodeOriginalVideofile = (this: VideoInstance, resolution: number) => Promise + export type GetOriginalFileHeight = (this: VideoInstance) => Promise + export type GetEmbedPath = (this: VideoInstance) => string + export type GetThumbnailPath = (this: VideoInstance) => string + export type GetPreviewPath = (this: VideoInstance) => string + + // Return thumbnail name + export type GenerateThumbnailFromData = (video: VideoInstance, thumbnailData: string) => Promise + + export type List = () => Promise + export type ListOwnedAndPopulateAuthorAndTags = () => Promise + export type ListOwnedByAuthor = (author: string) => Promise + + export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList > + export type SearchAndPopulateAuthorAndPodAndTags = ( + value: string, + field: string, + start: number, + count: number, + sort: string + ) => Promise< ResultList > + + export type Load = (id: number) => Promise + export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Promise + export type LoadByHostAndUUID = (fromHost: string, uuid: string, t?: Sequelize.Transaction) => Promise + export type LoadAndPopulateAuthor = (id: number) => Promise + export type LoadAndPopulateAuthorAndPodAndTags = (id: number) => Promise + export type LoadByUUIDAndPopulateAuthorAndPodAndTags = (uuid: string) => Promise + + export type RemoveThumbnail = (this: VideoInstance) => Promise + export type RemovePreview = (this: VideoInstance) => Promise + export type RemoveFile = (this: VideoInstance, videoFile: VideoFileInstance) => Promise + export type RemoveTorrent = (this: VideoInstance, videoFile: VideoFileInstance) => Promise } 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 - loadByHostAndRemoteId: VideoMethods.LoadByHostAndRemoteId listOwnedAndPopulateAuthorAndTags: VideoMethods.ListOwnedAndPopulateAuthorAndTags listOwnedByAuthor: VideoMethods.ListOwnedByAuthor load: VideoMethods.Load loadAndPopulateAuthor: VideoMethods.LoadAndPopulateAuthor loadAndPopulateAuthorAndPodAndTags: VideoMethods.LoadAndPopulateAuthorAndPodAndTags + loadByHostAndUUID: VideoMethods.LoadByHostAndUUID + loadByUUID: VideoMethods.LoadByUUID + loadByUUIDAndPopulateAuthorAndPodAndTags: VideoMethods.LoadByUUIDAndPopulateAuthorAndPodAndTags searchAndPopulateAuthorAndPodAndTags: VideoMethods.SearchAndPopulateAuthorAndPodAndTags } export interface VideoAttributes { + id?: number + uuid?: string name: string - extname: string - remoteId: string category: number licence: number language: number nsfw: boolean description: string - infoHash?: string duration: number views?: number likes?: number dislikes?: number + remote: boolean + + channelId?: number - Author?: AuthorInstance - Tags?: VideoTagInstance[] + VideoChannel?: VideoChannelInstance + Tags?: TagInstance[] + VideoFiles?: VideoFileInstance[] } export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance { - id: string createdAt: Date updatedAt: Date + + createPreview: VideoMethods.CreatePreview + createThumbnail: VideoMethods.CreateThumbnail + createTorrentAndSetInfoHash: VideoMethods.CreateTorrentAndSetInfoHash + getOriginalFile: VideoMethods.GetOriginalFile + getPreviewName: VideoMethods.GetPreviewName + getPreviewPath: VideoMethods.GetPreviewPath + getThumbnailName: VideoMethods.GetThumbnailName + getThumbnailPath: VideoMethods.GetThumbnailPath + getTorrentFileName: VideoMethods.GetTorrentFileName + getVideoFilename: VideoMethods.GetVideoFilename + getVideoFilePath: VideoMethods.GetVideoFilePath + isOwned: VideoMethods.IsOwned + removeFile: VideoMethods.RemoveFile + removePreview: VideoMethods.RemovePreview + removeThumbnail: VideoMethods.RemoveThumbnail + removeTorrent: VideoMethods.RemoveTorrent + toAddRemoteJSON: VideoMethods.ToAddRemoteJSON + toFormattedJSON: VideoMethods.ToFormattedJSON + toFormattedDetailsJSON: VideoMethods.ToFormattedDetailsJSON + toUpdateRemoteJSON: VideoMethods.ToUpdateRemoteJSON + optimizeOriginalVideofile: VideoMethods.OptimizeOriginalVideofile + transcodeOriginalVideofile: VideoMethods.TranscodeOriginalVideofile + getOriginalFileHeight: VideoMethods.GetOriginalFileHeight + getEmbedPath: VideoMethods.GetEmbedPath + + setTags: Sequelize.HasManySetAssociationsMixin + addVideoFile: Sequelize.HasManyAddAssociationMixin + setVideoFiles: Sequelize.HasManySetAssociationsMixin } export interface VideoModel extends VideoClass, Sequelize.Model {}