PeerTube/server/models/video/video-interface.ts

171 lines
6.4 KiB
TypeScript
Raw Normal View History

2017-05-22 20:58:25 +02:00
import * as Sequelize from 'sequelize'
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'
import { TagAttributes, TagInstance } from './tag-interface'
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'
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 = {
infoHash: string
resolution: number
extname: string
size: number
}
2017-08-25 11:45:31 +02:00
export type FormattedAddRemoteVideo = {
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 = {
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 {
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
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
export type TranscodeVideofile = (this: VideoInstance, inputVideoFile: VideoFileInstance) => Promise<void>
// 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> >
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>
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
loadByHostAndUUID: VideoMethods.LoadByHostAndUUID
loadByUUID: VideoMethods.LoadByUUID
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
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
remote: boolean
2017-06-10 22:15:25 +02:00
Author?: AuthorInstance
Tags?: TagInstance[]
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
createPreview: VideoMethods.CreatePreview
createThumbnail: VideoMethods.CreateThumbnail
createTorrentAndSetInfoHash: VideoMethods.CreateTorrentAndSetInfoHash
2017-06-17 11:28:11 +02:00
generateMagnetUri: VideoMethods.GenerateMagnetUri
getPreviewName: VideoMethods.GetPreviewName
getThumbnailName: VideoMethods.GetThumbnailName
getTorrentFileName: VideoMethods.GetTorrentFileName
getVideoFilename: VideoMethods.GetVideoFilename
getVideoFilePath: VideoMethods.GetVideoFilePath
2017-06-17 11:28:11 +02:00
isOwned: VideoMethods.IsOwned
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
setTags: Sequelize.HasManySetAssociationsMixin<TagAttributes, string>
setVideoFiles: Sequelize.HasManySetAssociationsMixin<VideoFileAttributes, string>
2017-05-22 20:58:25 +02:00
}
export interface VideoModel extends VideoClass, Sequelize.Model<VideoInstance, VideoAttributes> {}