import { ContextType } from '../activitypub/context'
import { VideoState } from '../videos'
-import { VideoStudioTaskCut } from '../videos/studio'
import { VideoResolution } from '../videos/file/video-resolution.enum'
+import { VideoStudioTaskCut } from '../videos/studio'
import { SendEmailOptions } from './emailer.model'
-export type JobState = 'active' | 'completed' | 'failed' | 'waiting' | 'delayed' | 'paused'
+export type JobState = 'active' | 'completed' | 'failed' | 'waiting' | 'delayed' | 'paused' | 'waiting-children'
export type JobType =
- | 'activitypub-http-unicast'
- | 'activitypub-http-broadcast'
- | 'activitypub-http-fetcher'
| 'activitypub-cleaner'
| 'activitypub-follow'
- | 'video-file-import'
- | 'video-transcoding'
- | 'email'
- | 'video-import'
- | 'videos-views-stats'
+ | 'activitypub-http-broadcast-parallel'
+ | 'activitypub-http-broadcast'
+ | 'activitypub-http-fetcher'
+ | 'activitypub-http-unicast'
| 'activitypub-refresher'
- | 'video-redundancy'
- | 'video-live-ending'
| 'actor-keys'
+ | 'after-video-channel-import'
+ | 'email'
+ | 'federate-video'
+ | 'transcoding-job-builder'
| 'manage-video-torrent'
| 'move-to-object-storage'
+ | 'notify'
+ | 'video-channel-import'
+ | 'video-file-import'
+ | 'video-import'
+ | 'video-live-ending'
+ | 'video-redundancy'
| 'video-studio-edition'
+ | 'video-transcoding'
+ | 'videos-views-stats'
export interface Job {
- id: number
- state: JobState
+ id: number | string
+ state: JobState | 'unknown'
type: JobType
data: any
priority: number
createdAt: Date | string
finishedOn: Date | string
processedOn: Date | string
+
+ parent?: {
+ id: string
+ }
}
export type ActivitypubHttpBroadcastPayload = {
filePath: string
}
+// ---------------------------------------------------------------------------
+
export type VideoImportTorrentPayloadType = 'magnet-uri' | 'torrent-file'
export type VideoImportYoutubeDLPayloadType = 'youtube-dl'
-export type VideoImportYoutubeDLPayload = {
+export interface VideoImportYoutubeDLPayload {
type: VideoImportYoutubeDLPayloadType
videoImportId: number
fileExt?: string
}
-export type VideoImportTorrentPayload = {
+
+export interface VideoImportTorrentPayload {
type: VideoImportTorrentPayloadType
videoImportId: number
}
-export type VideoImportPayload = VideoImportYoutubeDLPayload | VideoImportTorrentPayload
+
+export type VideoImportPayload = (VideoImportYoutubeDLPayload | VideoImportTorrentPayload) & {
+ preventException: boolean
+}
+
+export interface VideoImportPreventExceptionResult {
+ resultType: 'success' | 'error'
+}
+
+// ---------------------------------------------------------------------------
export type VideoRedundancyPayload = {
videoId: number
export interface HLSTranscodingPayload extends BaseTranscodingPayload {
type: 'new-resolution-to-hls'
resolution: VideoResolution
+ fps: number
copyCodecs: boolean
- hasAudio: boolean
- isPortraitMode?: boolean
-
- autoDeleteWebTorrentIfNeeded: boolean
- isMaxQuality: boolean
+ deleteWebTorrentFiles: boolean
}
export interface NewWebTorrentResolutionTranscodingPayload extends BaseTranscodingPayload {
type: 'new-resolution-to-webtorrent'
resolution: VideoResolution
-
- hasAudio: boolean
- createHLSIfNeeded: boolean
-
- isPortraitMode?: boolean
+ fps: number
}
export interface MergeAudioTranscodingPayload extends BaseTranscodingPayload {
type: 'merge-audio-to-webtorrent'
resolution: VideoResolution
- createHLSIfNeeded: true
+ fps: number
}
export interface OptimizeTranscodingPayload extends BaseTranscodingPayload {
type: 'optimize-to-webtorrent'
+
+ quickTranscode: boolean
}
export type VideoTranscodingPayload =
export interface VideoLiveEndingPayload {
videoId: number
+ publishedAt: string
+ liveSessionId: number
+ streamingPlaylistId: number
+
+ replayDirectory?: string
}
export interface ActorKeysPayload {
videoUUID: string
tasks: VideoStudioTaskPayload[]
}
+
+// ---------------------------------------------------------------------------
+
+export interface VideoChannelImportPayload {
+ externalChannelUrl: string
+ videoChannelId: number
+
+ partOfChannelSyncId?: number
+}
+
+export interface AfterVideoChannelImportPayload {
+ channelSyncId: number
+}
+
+// ---------------------------------------------------------------------------
+
+export type NotifyPayload =
+ {
+ action: 'new-video'
+ videoUUID: string
+ }
+
+// ---------------------------------------------------------------------------
+
+export interface FederateVideoPayload {
+ videoUUID: string
+ isNewVideo: boolean
+}
+
+// ---------------------------------------------------------------------------
+
+export interface TranscodingJobBuilderPayload {
+ videoUUID: string
+
+ optimizeJob?: {
+ isNewVideo: boolean
+ }
+
+ // Array of jobs to create
+ jobs?: {
+ type: 'video-transcoding'
+ payload: VideoTranscodingPayload
+ priority?: number
+ }[]
+
+ // Array of sequential jobs to create
+ sequentialJobs?: {
+ type: 'video-transcoding'
+ payload: VideoTranscodingPayload
+ priority?: number
+ }[][]
+}