aboutsummaryrefslogtreecommitdiffhomepage
path: root/shared/models/server/job.model.ts
blob: c643e60179832ebd2bd7c8755b9b36cdd0883fa2 (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
import { ContextType } from '../activitypub/context'
import { VideoResolution } from '../videos/video-resolution.enum'
import { SendEmailOptions } from './emailer.model'

export type JobState = 'active' | 'completed' | 'failed' | 'waiting' | 'delayed'

export type JobType =
  | 'activitypub-http-unicast'
  | 'activitypub-http-broadcast'
  | 'activitypub-http-fetcher'
  | 'activitypub-follow'
  | 'video-file-import'
  | 'video-transcoding'
  | 'email'
  | 'video-import'
  | 'videos-views'
  | 'activitypub-refresher'
  | 'video-redundancy'

export interface Job {
  id: number
  state: JobState
  type: JobType
  data: any
  error: any
  createdAt: Date | string
  finishedOn: Date | string
  processedOn: Date | string
}

export type ActivitypubHttpBroadcastPayload = {
  uris: string[]
  signatureActorId?: number
  body: any
  contextType?: ContextType
}

export type ActivitypubFollowPayload = {
  followerActorId: number
  name: string
  host: string
  isAutoFollow?: boolean
  assertIsChannel?: boolean
}

export type FetchType = 'activity' | 'video-likes' | 'video-dislikes' | 'video-shares' | 'video-comments' | 'account-playlists'
export type ActivitypubHttpFetcherPayload = {
  uri: string
  type: FetchType
  videoId?: number
  accountId?: number
}

export type ActivitypubHttpUnicastPayload = {
  uri: string
  signatureActorId?: number
  body: any
  contextType?: ContextType
}

export type RefreshPayload = {
  type: 'video' | 'video-playlist' | 'actor'
  url: string
}

export type EmailPayload = SendEmailOptions

export type VideoFileImportPayload = {
  videoUUID: string
  filePath: string
}

export type VideoImportTorrentPayloadType = 'magnet-uri' | 'torrent-file'
export type VideoImportYoutubeDLPayloadType = 'youtube-dl'

export type VideoImportYoutubeDLPayload = {
  type: VideoImportYoutubeDLPayloadType
  videoImportId: number

  generateThumbnail: boolean
  generatePreview: boolean

  fileExt?: string
}
export type VideoImportTorrentPayload = {
  type: VideoImportTorrentPayloadType
  videoImportId: number
}
export type VideoImportPayload = VideoImportYoutubeDLPayload | VideoImportTorrentPayload

export type VideoRedundancyPayload = {
  videoId: number
}

// Video transcoding payloads

interface BaseTranscodingPayload {
  videoUUID: string
  isNewVideo?: boolean
}

interface HLSTranscodingPayload extends BaseTranscodingPayload {
  type: 'hls'
  isPortraitMode?: boolean
  resolution: VideoResolution
  copyCodecs: boolean
}

export interface NewResolutionTranscodingPayload extends BaseTranscodingPayload {
  type: 'new-resolution'
  isPortraitMode?: boolean
  resolution: VideoResolution
}

export interface MergeAudioTranscodingPayload extends BaseTranscodingPayload {
  type: 'merge-audio'
  resolution: VideoResolution
}

export interface OptimizeTranscodingPayload extends BaseTranscodingPayload {
  type: 'optimize'
}

export type VideoTranscodingPayload =
  HLSTranscodingPayload
  | NewResolutionTranscodingPayload
  | OptimizeTranscodingPayload
  | MergeAudioTranscodingPayload