import * as Sequelize from 'sequelize'
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 {
+ 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'
-
-export type FormatedRemoteVideoFile = {
- infoHash: string
- resolution: number
- extname: string
- size: number
-}
-
-export type FormatedAddRemoteVideo = {
- uuid: string
- name: string
- category: number
- licence: number
- language: number
- nsfw: boolean
- description: string
- author: string
- duration: number
- thumbnailData: string
- tags: string[]
- createdAt: Date
- updatedAt: Date
- views: number
- likes: number
- dislikes: number
- files: FormatedRemoteVideoFile[]
-}
-
-export type FormatedUpdateRemoteVideo = {
- uuid: string
- name: string
- category: number
- licence: number
- language: number
- nsfw: boolean
- description: string
- author: string
- duration: number
- tags: string[]
- createdAt: Date
- updatedAt: Date
- views: number
- likes: number
- dislikes: number
- files: FormatedRemoteVideoFile[]
-}
+import { VideoChannelInstance } from './video-channel-interface'
export namespace VideoMethods {
export type GetThumbnailName = (this: VideoInstance) => string
export type GetPreviewName = (this: VideoInstance) => string
export type IsOwned = (this: VideoInstance) => boolean
- export type ToFormatedJSON = (this: VideoInstance) => FormatedVideo
+ export type ToFormattedJSON = (this: VideoInstance) => FormattedVideo
+ export type ToFormattedDetailsJSON = (this: VideoInstance) => FormattedDetailsVideo
- export type GenerateMagnetUri = (this: VideoInstance, videoFile: VideoFileInstance) => string
+ 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 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 ToAddRemoteJSON = (this: VideoInstance) => Promise<RemoteVideoCreateData>
+ export type ToUpdateRemoteJSON = (this: VideoInstance) => RemoteVideoUpdateData
- export type TranscodeVideofile = (this: VideoInstance, inputVideoFile: VideoFileInstance) => Promise<void>
+ 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
// Return thumbnail name
export type GenerateThumbnailFromData = (video: VideoInstance, thumbnailData: string) => Promise<string>
- export type GetDurationFromFile = (videoPath: string) => Promise<number>
export type List = () => Promise<VideoInstance[]>
export type ListOwnedAndPopulateAuthorAndTags = () => Promise<VideoInstance[]>
) => Promise< ResultList<VideoInstance> >
export type Load = (id: number) => Promise<VideoInstance>
- export type LoadByUUID = (uuid: string) => Promise<VideoInstance>
- export type LoadByHostAndUUID = (fromHost: string, uuid: string) => Promise<VideoInstance>
+ export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Promise<VideoInstance>
+ export type LoadLocalVideoByUUID = (uuid: string, t?: Sequelize.Transaction) => Promise<VideoInstance>
+ export type LoadByHostAndUUID = (fromHost: string, uuid: string, t?: Sequelize.Transaction) => Promise<VideoInstance>
export type LoadAndPopulateAuthor = (id: number) => Promise<VideoInstance>
export type LoadAndPopulateAuthorAndPodAndTags = (id: number) => Promise<VideoInstance>
export type LoadByUUIDAndPopulateAuthorAndPodAndTags = (uuid: string) => Promise<VideoInstance>
export interface VideoClass {
generateThumbnailFromData: VideoMethods.GenerateThumbnailFromData
- getDurationFromFile: VideoMethods.GetDurationFromFile
list: VideoMethods.List
listForApi: VideoMethods.ListForApi
listOwnedAndPopulateAuthorAndTags: VideoMethods.ListOwnedAndPopulateAuthorAndTags
loadAndPopulateAuthorAndPodAndTags: VideoMethods.LoadAndPopulateAuthorAndPodAndTags
loadByHostAndUUID: VideoMethods.LoadByHostAndUUID
loadByUUID: VideoMethods.LoadByUUID
+ loadLocalVideoByUUID: VideoMethods.LoadLocalVideoByUUID
loadByUUIDAndPopulateAuthorAndPodAndTags: VideoMethods.LoadByUUIDAndPopulateAuthorAndPodAndTags
searchAndPopulateAuthorAndPodAndTags: VideoMethods.SearchAndPopulateAuthorAndPodAndTags
}
export interface VideoAttributes {
+ id?: number
uuid?: string
name: string
category: number
dislikes?: number
remote: boolean
- Author?: AuthorInstance
+ channelId?: number
+
+ VideoChannel?: VideoChannelInstance
Tags?: TagInstance[]
VideoFiles?: VideoFileInstance[]
}
export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance<VideoAttributes> {
- id: number
createdAt: Date
updatedAt: Date
createPreview: VideoMethods.CreatePreview
createThumbnail: VideoMethods.CreateThumbnail
createTorrentAndSetInfoHash: VideoMethods.CreateTorrentAndSetInfoHash
- generateMagnetUri: VideoMethods.GenerateMagnetUri
+ getOriginalFile: VideoMethods.GetOriginalFile
getPreviewName: VideoMethods.GetPreviewName
+ getPreviewPath: VideoMethods.GetPreviewPath
getThumbnailName: VideoMethods.GetThumbnailName
+ getThumbnailPath: VideoMethods.GetThumbnailPath
getTorrentFileName: VideoMethods.GetTorrentFileName
getVideoFilename: VideoMethods.GetVideoFilename
getVideoFilePath: VideoMethods.GetVideoFilePath
removeThumbnail: VideoMethods.RemoveThumbnail
removeTorrent: VideoMethods.RemoveTorrent
toAddRemoteJSON: VideoMethods.ToAddRemoteJSON
- toFormatedJSON: VideoMethods.ToFormatedJSON
+ toFormattedJSON: VideoMethods.ToFormattedJSON
+ toFormattedDetailsJSON: VideoMethods.ToFormattedDetailsJSON
toUpdateRemoteJSON: VideoMethods.ToUpdateRemoteJSON
- transcodeVideofile: VideoMethods.TranscodeVideofile
+ optimizeOriginalVideofile: VideoMethods.OptimizeOriginalVideofile
+ transcodeOriginalVideofile: VideoMethods.TranscodeOriginalVideofile
+ getOriginalFileHeight: VideoMethods.GetOriginalFileHeight
+ getEmbedPath: VideoMethods.GetEmbedPath
setTags: Sequelize.HasManySetAssociationsMixin<TagAttributes, string>
+ addVideoFile: Sequelize.HasManyAddAssociationMixin<VideoFileAttributes, string>
setVideoFiles: Sequelize.HasManySetAssociationsMixin<VideoFileAttributes, string>
}