2017-05-22 13:58:25 -05:00
|
|
|
import * as Sequelize from 'sequelize'
|
|
|
|
|
2017-06-10 15:15:25 -05:00
|
|
|
import { AuthorInstance } from './author-interface'
|
|
|
|
import { VideoTagInstance } from './video-tag-interface'
|
|
|
|
|
|
|
|
// Don't use barrel, import just what we need
|
2017-06-16 02:45:46 -05:00
|
|
|
import { Video as FormatedVideo } from '../../../shared/models/video.model'
|
2017-06-10 15:15:25 -05:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2017-05-22 13:58:25 -05:00
|
|
|
export namespace VideoMethods {
|
2017-06-16 02:54:59 -05:00
|
|
|
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
|
2017-06-10 15:15:25 -05:00
|
|
|
|
|
|
|
export type ToAddRemoteJSONCallback = (err: Error, videoFormated?: FormatedAddRemoteVideo) => void
|
2017-06-16 02:54:59 -05:00
|
|
|
export type ToAddRemoteJSON = (this: VideoInstance, callback: ToAddRemoteJSONCallback) => void
|
2017-06-10 15:15:25 -05:00
|
|
|
|
2017-06-16 02:54:59 -05:00
|
|
|
export type ToUpdateRemoteJSON = (this: VideoInstance) => FormatedUpdateRemoteVideo
|
2017-06-10 15:15:25 -05:00
|
|
|
|
|
|
|
export type TranscodeVideofileCallback = (err: Error) => void
|
2017-06-16 02:54:59 -05:00
|
|
|
export type TranscodeVideofile = (this: VideoInstance, callback: TranscodeVideofileCallback) => void
|
2017-06-10 15:15:25 -05:00
|
|
|
|
|
|
|
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
|
2017-05-22 13:58:25 -05:00
|
|
|
export type GetDurationFromFile = (videoPath, callback) => void
|
2017-06-10 15:15:25 -05:00
|
|
|
|
2017-06-12 14:06:32 -05:00
|
|
|
export type ListCallback = (err: Error, videoInstances: VideoInstance[]) => void
|
2017-06-10 15:15:25 -05:00
|
|
|
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
|
2017-05-22 13:58:25 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
searchAndPopulateAuthorAndPodAndTags: VideoMethods.SearchAndPopulateAuthorAndPodAndTags
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoAttributes {
|
|
|
|
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
|
2017-06-10 15:15:25 -05:00
|
|
|
|
|
|
|
Author?: AuthorInstance
|
|
|
|
Tags?: VideoTagInstance[]
|
2017-05-22 13:58:25 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance<VideoAttributes> {
|
|
|
|
id: string
|
|
|
|
createdAt: Date
|
|
|
|
updatedAt: Date
|
2017-06-17 04:28:11 -05:00
|
|
|
|
|
|
|
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
|
2017-05-22 13:58:25 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface VideoModel extends VideoClass, Sequelize.Model<VideoInstance, VideoAttributes> {}
|