2017-05-22 20:58:25 +02:00
|
|
|
import * as Sequelize from 'sequelize'
|
2017-07-05 13:26:25 +02:00
|
|
|
import * as Promise from 'bluebird'
|
2017-05-22 20:58:25 +02:00
|
|
|
|
2017-06-10 22:15:25 +02:00
|
|
|
import { AuthorInstance } from './author-interface'
|
2017-07-05 13:26:25 +02:00
|
|
|
import { TagAttributes, TagInstance } from './tag-interface'
|
2017-08-25 11:36:23 +02:00
|
|
|
import { VideoFileAttributes, VideoFileInstance } from './video-file-interface'
|
2017-06-10 22:15:25 +02:00
|
|
|
|
|
|
|
// Don't use barrel, import just what we need
|
2017-08-25 11:45:31 +02:00
|
|
|
import { Video as FormattedVideo } from '../../../shared/models/videos/video.model'
|
2017-07-05 13:26:25 +02:00
|
|
|
import { ResultList } from '../../../shared/models/result-list.model'
|
2017-06-10 22:15:25 +02:00
|
|
|
|
2017-08-25 11:45:31 +02:00
|
|
|
export type FormattedRemoteVideoFile = {
|
2017-08-25 11:36:23 +02:00
|
|
|
infoHash: string
|
|
|
|
resolution: number
|
|
|
|
extname: string
|
|
|
|
size: number
|
|
|
|
}
|
|
|
|
|
2017-08-25 11:45:31 +02:00
|
|
|
export type FormattedAddRemoteVideo = {
|
2017-07-11 16:01:56 +02:00
|
|
|
uuid: string
|
2017-06-10 22:15:25 +02:00
|
|
|
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
|
2017-08-25 11:45:31 +02:00
|
|
|
files: FormattedRemoteVideoFile[]
|
2017-06-10 22:15:25 +02:00
|
|
|
}
|
|
|
|
|
2017-08-25 11:45:31 +02:00
|
|
|
export type FormattedUpdateRemoteVideo = {
|
2017-07-11 16:01:56 +02:00
|
|
|
uuid: string
|
2017-06-10 22:15:25 +02:00
|
|
|
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
|
2017-08-25 11:45:31 +02:00
|
|
|
files: FormattedRemoteVideoFile[]
|
2017-06-10 22:15:25 +02:00
|
|
|
}
|
|
|
|
|
2017-05-22 20:58:25 +02:00
|
|
|
export namespace VideoMethods {
|
2017-06-16 09:54:59 +02:00
|
|
|
export type GetThumbnailName = (this: VideoInstance) => string
|
|
|
|
export type GetPreviewName = (this: VideoInstance) => string
|
|
|
|
export type IsOwned = (this: VideoInstance) => boolean
|
2017-08-25 11:45:31 +02:00
|
|
|
export type ToFormattedJSON = (this: VideoInstance) => FormattedVideo
|
2017-06-10 22:15:25 +02:00
|
|
|
|
2017-08-25 11:36:23 +02:00
|
|
|
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>
|
|
|
|
|
2017-08-25 11:45:31 +02:00
|
|
|
export type ToAddRemoteJSON = (this: VideoInstance) => Promise<FormattedAddRemoteVideo>
|
|
|
|
export type ToUpdateRemoteJSON = (this: VideoInstance) => FormattedUpdateRemoteVideo
|
2017-06-10 22:15:25 +02:00
|
|
|
|
2017-08-25 11:36:23 +02:00
|
|
|
export type TranscodeVideofile = (this: VideoInstance, inputVideoFile: VideoFileInstance) => Promise<void>
|
2017-07-05 13:26:25 +02:00
|
|
|
|
|
|
|
// 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[]>
|
|
|
|
export type ListOwnedByAuthor = (author: string) => Promise<VideoInstance[]>
|
|
|
|
|
|
|
|
export type ListForApi = (start: number, count: number, sort: string) => Promise< ResultList<VideoInstance> >
|
|
|
|
export type SearchAndPopulateAuthorAndPodAndTags = (
|
|
|
|
value: string,
|
|
|
|
field: string,
|
|
|
|
start: number,
|
|
|
|
count: number,
|
|
|
|
sort: string
|
|
|
|
) => Promise< ResultList<VideoInstance> >
|
|
|
|
|
2017-07-11 16:01:56 +02:00
|
|
|
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 LoadAndPopulateAuthor = (id: number) => Promise<VideoInstance>
|
|
|
|
export type LoadAndPopulateAuthorAndPodAndTags = (id: number) => Promise<VideoInstance>
|
|
|
|
export type LoadByUUIDAndPopulateAuthorAndPodAndTags = (uuid: string) => Promise<VideoInstance>
|
2017-08-25 11:36:23 +02:00
|
|
|
|
|
|
|
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>
|
2017-05-22 20:58:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoClass {
|
|
|
|
generateThumbnailFromData: VideoMethods.GenerateThumbnailFromData
|
|
|
|
getDurationFromFile: VideoMethods.GetDurationFromFile
|
|
|
|
list: VideoMethods.List
|
|
|
|
listForApi: VideoMethods.ListForApi
|
|
|
|
listOwnedAndPopulateAuthorAndTags: VideoMethods.ListOwnedAndPopulateAuthorAndTags
|
|
|
|
listOwnedByAuthor: VideoMethods.ListOwnedByAuthor
|
|
|
|
load: VideoMethods.Load
|
|
|
|
loadAndPopulateAuthor: VideoMethods.LoadAndPopulateAuthor
|
|
|
|
loadAndPopulateAuthorAndPodAndTags: VideoMethods.LoadAndPopulateAuthorAndPodAndTags
|
2017-08-25 11:36:23 +02:00
|
|
|
loadByHostAndUUID: VideoMethods.LoadByHostAndUUID
|
|
|
|
loadByUUID: VideoMethods.LoadByUUID
|
2017-07-11 16:01:56 +02:00
|
|
|
loadByUUIDAndPopulateAuthorAndPodAndTags: VideoMethods.LoadByUUIDAndPopulateAuthorAndPodAndTags
|
2017-05-22 20:58:25 +02:00
|
|
|
searchAndPopulateAuthorAndPodAndTags: VideoMethods.SearchAndPopulateAuthorAndPodAndTags
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoAttributes {
|
2017-08-25 18:36:49 +02:00
|
|
|
id?: number
|
2017-07-11 16:01:56 +02:00
|
|
|
uuid?: string
|
2017-05-22 20:58:25 +02:00
|
|
|
name: string
|
|
|
|
category: number
|
|
|
|
licence: number
|
|
|
|
language: number
|
|
|
|
nsfw: boolean
|
|
|
|
description: string
|
|
|
|
duration: number
|
|
|
|
views?: number
|
|
|
|
likes?: number
|
|
|
|
dislikes?: number
|
2017-07-11 16:01:56 +02:00
|
|
|
remote: boolean
|
2017-06-10 22:15:25 +02:00
|
|
|
|
|
|
|
Author?: AuthorInstance
|
2017-07-05 13:26:25 +02:00
|
|
|
Tags?: TagInstance[]
|
2017-08-25 11:36:23 +02:00
|
|
|
VideoFiles?: VideoFileInstance[]
|
2017-05-22 20:58:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance<VideoAttributes> {
|
|
|
|
createdAt: Date
|
|
|
|
updatedAt: Date
|
2017-06-17 11:28:11 +02:00
|
|
|
|
2017-08-25 11:36:23 +02:00
|
|
|
createPreview: VideoMethods.CreatePreview
|
|
|
|
createThumbnail: VideoMethods.CreateThumbnail
|
|
|
|
createTorrentAndSetInfoHash: VideoMethods.CreateTorrentAndSetInfoHash
|
2017-06-17 11:28:11 +02:00
|
|
|
generateMagnetUri: VideoMethods.GenerateMagnetUri
|
|
|
|
getPreviewName: VideoMethods.GetPreviewName
|
2017-08-25 11:36:23 +02:00
|
|
|
getThumbnailName: VideoMethods.GetThumbnailName
|
|
|
|
getTorrentFileName: VideoMethods.GetTorrentFileName
|
|
|
|
getVideoFilename: VideoMethods.GetVideoFilename
|
|
|
|
getVideoFilePath: VideoMethods.GetVideoFilePath
|
2017-06-17 11:28:11 +02:00
|
|
|
isOwned: VideoMethods.IsOwned
|
2017-08-25 11:36:23 +02:00
|
|
|
removeFile: VideoMethods.RemoveFile
|
|
|
|
removePreview: VideoMethods.RemovePreview
|
|
|
|
removeThumbnail: VideoMethods.RemoveThumbnail
|
|
|
|
removeTorrent: VideoMethods.RemoveTorrent
|
2017-06-17 11:28:11 +02:00
|
|
|
toAddRemoteJSON: VideoMethods.ToAddRemoteJSON
|
2017-08-25 11:45:31 +02:00
|
|
|
toFormattedJSON: VideoMethods.ToFormattedJSON
|
2017-06-17 11:28:11 +02:00
|
|
|
toUpdateRemoteJSON: VideoMethods.ToUpdateRemoteJSON
|
|
|
|
transcodeVideofile: VideoMethods.TranscodeVideofile
|
2017-07-05 13:26:25 +02:00
|
|
|
|
|
|
|
setTags: Sequelize.HasManySetAssociationsMixin<TagAttributes, string>
|
2017-08-25 11:36:23 +02:00
|
|
|
setVideoFiles: Sequelize.HasManySetAssociationsMixin<VideoFileAttributes, string>
|
2017-05-22 20:58:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoModel extends VideoClass, Sequelize.Model<VideoInstance, VideoAttributes> {}
|