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 { TagAttributes, TagInstance } from './tag-interface' import { VideoChannelInstance } from './video-channel-interface' import { VideoFileAttributes, VideoFileInstance } from './video-file-interface' import { VideoShareInstance } from './video-share-interface' export namespace VideoMethods { 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 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 ToActivityPubObject = (this: VideoInstance) => VideoTorrentObject 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 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 export type List = () => Bluebird export type ListOwnedAndPopulateAccountAndTags = () => Bluebird export type ListOwnedByAccount = (account: string) => Bluebird export type ListAllAndSharedByAccountForOutbox = ( accountId: number, start: number, count: number ) => Bluebird< ResultList > export type ListForApi = (start: number, count: number, sort: string) => Bluebird< ResultList > export type ListUserVideosForApi = (userId: number, start: number, count: number, sort: string) => Bluebird< ResultList > export type SearchAndPopulateAccountAndServerAndTags = ( value: string, field: string, start: number, count: number, sort: string ) => Bluebird< ResultList > export type Load = (id: number) => Bluebird export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird export type LoadByUrlAndPopulateAccount = (url: string, t?: Sequelize.Transaction) => Bluebird export type LoadLocalVideoByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird export type LoadByHostAndUUID = (fromHost: string, uuid: string, t?: Sequelize.Transaction) => Bluebird export type LoadAndPopulateAccount = (id: number) => Bluebird export type LoadAndPopulateAccountAndServerAndTags = (id: number) => Bluebird export type LoadByUUIDAndPopulateAccountAndServerAndTags = (uuid: string) => Bluebird export type LoadByUUIDOrURL = (uuid: string, url: string, t?: Sequelize.Transaction) => Bluebird 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 { generateThumbnailFromData: VideoMethods.GenerateThumbnailFromData list: VideoMethods.List listAllAndSharedByAccountForOutbox: VideoMethods.ListAllAndSharedByAccountForOutbox listForApi: VideoMethods.ListForApi listUserVideosForApi: VideoMethods.ListUserVideosForApi listOwnedAndPopulateAccountAndTags: VideoMethods.ListOwnedAndPopulateAccountAndTags listOwnedByAccount: VideoMethods.ListOwnedByAccount load: VideoMethods.Load loadAndPopulateAccount: VideoMethods.LoadAndPopulateAccount loadAndPopulateAccountAndServerAndTags: VideoMethods.LoadAndPopulateAccountAndServerAndTags loadByHostAndUUID: VideoMethods.LoadByHostAndUUID loadByUUID: VideoMethods.LoadByUUID loadByUrlAndPopulateAccount: VideoMethods.LoadByUrlAndPopulateAccount loadByUUIDOrURL: VideoMethods.LoadByUUIDOrURL loadLocalVideoByUUID: VideoMethods.LoadLocalVideoByUUID loadByUUIDAndPopulateAccountAndServerAndTags: VideoMethods.LoadByUUIDAndPopulateAccountAndServerAndTags searchAndPopulateAccountAndServerAndTags: VideoMethods.SearchAndPopulateAccountAndServerAndTags } export interface VideoAttributes { id?: number uuid?: string name: string category: number licence: number language: number nsfw: boolean description: string duration: number privacy: number views?: number likes?: number dislikes?: number remote: boolean url?: string createdAt?: Date updatedAt?: Date parentId?: number channelId?: number VideoChannel?: VideoChannelInstance Tags?: TagInstance[] VideoFiles?: VideoFileInstance[] VideoShares?: VideoShareInstance[] } export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance { 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 addVideoFile: Sequelize.HasManyAddAssociationMixin setVideoFiles: Sequelize.HasManySetAssociationsMixin } export interface VideoModel extends VideoClass, Sequelize.Model {}