+import * as Bluebird from 'bluebird'
import * as Sequelize from 'sequelize'
+import { VideoTorrentObject } from '../../../shared/models/activitypub/objects/video-torrent-object'
+import { ResultList } from '../../../shared/models/result-list.model'
+import { Video as FormattedVideo, VideoDetails as FormattedDetailsVideo } from '../../../shared/models/videos/video.model'
-import { AuthorInstance } from './author-interface'
-import { VideoTagInstance } from './video-tag-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 { TagAttributes, TagInstance } from './tag-interface'
+import { VideoChannelInstance } from './video-channel-interface'
+import { VideoFileAttributes, VideoFileInstance } from './video-file-interface'
export namespace VideoMethods {
- export type GenerateMagnetUri = () => string
- export type GetVideoFilename = () => string
- export type GetThumbnailName = () => string
- export type GetPreviewName = () => string
- export type GetTorrentName = () => string
- export type IsOwned = () => boolean
- export type ToFormatedJSON = () => FormatedVideo
-
- export type ToAddRemoteJSONCallback = (err: Error, videoFormated?: FormatedAddRemoteVideo) => void
- export type ToAddRemoteJSON = (callback: ToAddRemoteJSONCallback) => void
-
- export type ToUpdateRemoteJSON = () => FormatedUpdateRemoteVideo
-
- export type TranscodeVideofileCallback = (err: Error) => void
- export type TranscodeVideofile = (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 GetThumbnailName = (this: VideoInstance) => string
+ export type GetPreviewName = (this: VideoInstance) => string
+ export type IsOwned = (this: VideoInstance) => boolean
+ 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<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 ToActivityPubObject = (this: VideoInstance) => VideoTorrentObject
+
+ export type OptimizeOriginalVideofile = (this: VideoInstance) => Promise<void>
+ export type TranscodeOriginalVideofile = (this: VideoInstance, resolution: number) => Promise<void>
+ export type GetOriginalFileHeight = (this: VideoInstance) => Promise<number>
+ export type GetEmbedPath = (this: VideoInstance) => string
+ export type GetThumbnailPath = (this: VideoInstance) => string
+ export type GetPreviewPath = (this: VideoInstance) => string
+ export type GetDescriptionPath = (this: VideoInstance) => string
+ export type GetTruncatedDescription = (this: VideoInstance) => string
+ export type GetCategoryLabel = (this: VideoInstance) => string
+ export type GetLicenceLabel = (this: VideoInstance) => string
+ export type GetLanguageLabel = (this: VideoInstance) => string
+
+ // Return thumbnail name
+ export type GenerateThumbnailFromData = (video: VideoInstance, thumbnailData: string) => Promise<string>
+
+ export type List = () => Bluebird<VideoInstance[]>
+ export type ListOwnedAndPopulateAccountAndTags = () => Bluebird<VideoInstance[]>
+ export type ListOwnedByAccount = (account: string) => Bluebird<VideoInstance[]>
+
+ export type ListForApi = (start: number, count: number, sort: string) => Bluebird< ResultList<VideoInstance> >
+ export type ListUserVideosForApi = (userId: number, start: number, count: number, sort: string) => Bluebird< ResultList<VideoInstance> >
+ export type SearchAndPopulateAccountAndServerAndTags = (
+ value: string,
+ field: string,
+ start: number,
+ count: number,
+ sort: string
+ ) => Bluebird< ResultList<VideoInstance> >
+
+ export type Load = (id: number) => Bluebird<VideoInstance>
+ export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
+ export type LoadByUrl = (url: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
+ export type LoadLocalVideoByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
+ export type LoadByHostAndUUID = (fromHost: string, uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
+ export type LoadAndPopulateAccount = (id: number) => Bluebird<VideoInstance>
+ export type LoadAndPopulateAccountAndServerAndTags = (id: number) => Bluebird<VideoInstance>
+ export type LoadByUUIDAndPopulateAccountAndServerAndTags = (uuid: string) => Bluebird<VideoInstance>
+ export type LoadByUUIDOrURL = (uuid: string, url: string, t?: Sequelize.Transaction) => Bluebird<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
- loadByHostAndRemoteId: VideoMethods.LoadByHostAndRemoteId
- listOwnedAndPopulateAuthorAndTags: VideoMethods.ListOwnedAndPopulateAuthorAndTags
- listOwnedByAuthor: VideoMethods.ListOwnedByAuthor
+ listUserVideosForApi: VideoMethods.ListUserVideosForApi
+ listOwnedAndPopulateAccountAndTags: VideoMethods.ListOwnedAndPopulateAccountAndTags
+ listOwnedByAccount: VideoMethods.ListOwnedByAccount
load: VideoMethods.Load
- loadAndPopulateAuthor: VideoMethods.LoadAndPopulateAuthor
- loadAndPopulateAuthorAndPodAndTags: VideoMethods.LoadAndPopulateAuthorAndPodAndTags
- searchAndPopulateAuthorAndPodAndTags: VideoMethods.SearchAndPopulateAuthorAndPodAndTags
+ loadAndPopulateAccount: VideoMethods.LoadAndPopulateAccount
+ loadAndPopulateAccountAndServerAndTags: VideoMethods.LoadAndPopulateAccountAndServerAndTags
+ loadByHostAndUUID: VideoMethods.LoadByHostAndUUID
+ loadByUUID: VideoMethods.LoadByUUID
+ loadByUrl: VideoMethods.LoadByUrl
+ loadByUUIDOrURL: VideoMethods.LoadByUUIDOrURL
+ loadLocalVideoByUUID: VideoMethods.LoadLocalVideoByUUID
+ loadByUUIDAndPopulateAccountAndServerAndTags: VideoMethods.LoadByUUIDAndPopulateAccountAndServerAndTags
+ searchAndPopulateAccountAndServerAndTags: VideoMethods.SearchAndPopulateAccountAndServerAndTags
}
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
+ privacy: number
views?: number
likes?: number
dislikes?: number
+ remote: boolean
+ url?: string
+
+ createdAt?: Date
+ updatedAt?: Date
- Author?: AuthorInstance
- Tags?: VideoTagInstance[]
+ parentId?: number
+ channelId?: number
+
+ VideoChannel?: VideoChannelInstance
+ Tags?: TagInstance[]
+ VideoFiles?: VideoFileInstance[]
}
export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance<VideoAttributes> {
- 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
+ toActivityPubObject: VideoMethods.ToActivityPubObject
+ toFormattedJSON: VideoMethods.ToFormattedJSON
+ toFormattedDetailsJSON: VideoMethods.ToFormattedDetailsJSON
+ optimizeOriginalVideofile: VideoMethods.OptimizeOriginalVideofile
+ transcodeOriginalVideofile: VideoMethods.TranscodeOriginalVideofile
+ getOriginalFileHeight: VideoMethods.GetOriginalFileHeight
+ getEmbedPath: VideoMethods.GetEmbedPath
+ getDescriptionPath: VideoMethods.GetDescriptionPath
+ getTruncatedDescription: VideoMethods.GetTruncatedDescription
+ getCategoryLabel: VideoMethods.GetCategoryLabel
+ getLicenceLabel: VideoMethods.GetLicenceLabel
+ getLanguageLabel: VideoMethods.GetLanguageLabel
+
+ setTags: Sequelize.HasManySetAssociationsMixin<TagAttributes, string>
+ addVideoFile: Sequelize.HasManyAddAssociationMixin<VideoFileAttributes, string>
+ setVideoFiles: Sequelize.HasManySetAssociationsMixin<VideoFileAttributes, string>
}
export interface VideoModel extends VideoClass, Sequelize.Model<VideoInstance, VideoAttributes> {}