aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/video/video-interface.ts
blob: 89e528acf2ed60489ae3efb683cf0e4a999f948b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
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'
import { UserVideoRate } from '../../../shared/models/videos/user-video-rate.model'
import { AccountVideoRateInstance } from '../account/account-video-rate-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<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>

  export type ToActivityPubObject = (this: VideoInstance) => VideoTorrentObject

  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
  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<string>

  export type List = () => Bluebird<VideoInstance[]>
  export type ListOwnedAndPopulateAccountAndTags = () => Bluebird<VideoInstance[]>
  export type ListOwnedByAccount = (account: string) => Bluebird<VideoInstance[]>

  export type ListAllAndSharedByAccountForOutbox = (
    accountId: number,
    start: number,
    count: number
  ) => Bluebird< ResultList<VideoInstance> >
  export type ListForApi = (start: number, count: number, sort: string) => Bluebird< ResultList<VideoInstance> >
  export type ListUserVideosForApi = (userId: number, start: number, count: number, sort: string) => Bluebird< ResultList<VideoInstance> >
  export type SearchAndPopulateAccountAndServerAndTags = (
    value: string,
    field: string,
    start: number,
    count: number,
    sort: string
  ) => Bluebird< ResultList<VideoInstance> >

  export type Load = (id: number) => Bluebird<VideoInstance>
  export type LoadByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
  export type LoadByUrlAndPopulateAccount = (url: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
  export type LoadLocalVideoByUUID = (uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
  export type LoadByHostAndUUID = (fromHost: string, uuid: string, t?: Sequelize.Transaction) => Bluebird<VideoInstance>
  export type LoadAndPopulateAccount = (id: number) => Bluebird<VideoInstance>
  export type LoadAndPopulateAccountAndServerAndTags = (id: number) => Bluebird<VideoInstance>
  export type LoadByUUIDAndPopulateAccountAndServerAndTags = (uuid: string) => Bluebird<VideoInstance>
  export type LoadByUUIDOrURL = (uuid: string, url: string, t?: Sequelize.Transaction) => Bluebird<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>
}

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[]
  AccountVideoRates?: AccountVideoRateInstance[]
}

export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance<VideoAttributes> {
  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<TagAttributes, string>
  addVideoFile: Sequelize.HasManyAddAssociationMixin<VideoFileAttributes, string>
  setVideoFiles: Sequelize.HasManySetAssociationsMixin<VideoFileAttributes, string>
}

export interface VideoModel extends VideoClass, Sequelize.Model<VideoInstance, VideoAttributes> {}