X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=shared%2Fmodels%2Fserver%2Fjob.model.ts;h=8c8f64de9a9dc082e927af171720f0ed0678b9b5;hb=bd911b54b555b11df7e9849cf92d358bccfecf6e;hp=cf29d20d40098d05d828017df950512aafa78b5b;hpb=2ad9dcda240ee843c5e4a5b98cc94f7b2aab2c89;p=github%2FChocobozzz%2FPeerTube.git diff --git a/shared/models/server/job.model.ts b/shared/models/server/job.model.ts index cf29d20d4..8c8f64de9 100644 --- a/shared/models/server/job.model.ts +++ b/shared/models/server/job.model.ts @@ -1,25 +1,233 @@ -export type JobState = 'active' | 'completed' | 'failed' | 'waiting' | 'delayed' +import { ContextType } from '../activitypub/context' +import { VideoState } from '../videos' +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' | 'waiting-children' export type JobType = | 'activitypub-http-unicast' | 'activitypub-http-broadcast' + | 'activitypub-http-broadcast-parallel' | 'activitypub-http-fetcher' + | 'activitypub-cleaner' | 'activitypub-follow' | 'video-file-import' | 'video-transcoding' | 'email' | 'video-import' - | 'videos-views' + | 'videos-views-stats' | 'activitypub-refresher' | 'video-redundancy' + | 'video-live-ending' + | 'actor-keys' + | 'manage-video-torrent' + | 'move-to-object-storage' + | 'video-studio-edition' + | 'notify' + | 'federate-video' export interface Job { - id: number - state: JobState + id: number | string + state: JobState | 'unknown' type: JobType data: any + priority: number + progress: number error: any createdAt: Date | string finishedOn: Date | string processedOn: Date | string } + +export type ActivitypubHttpBroadcastPayload = { + uris: string[] + contextType: ContextType + body: any + signatureActorId?: number +} + +export type ActivitypubFollowPayload = { + followerActorId: number + name: string + host: string + isAutoFollow?: boolean + assertIsChannel?: boolean +} + +export type FetchType = 'activity' | 'video-shares' | 'video-comments' | 'account-playlists' +export type ActivitypubHttpFetcherPayload = { + uri: string + type: FetchType + videoId?: number +} + +export type ActivitypubHttpUnicastPayload = { + uri: string + contextType: ContextType + signatureActorId?: number + body: object +} + +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 + + fileExt?: string +} +export type VideoImportTorrentPayload = { + type: VideoImportTorrentPayloadType + videoImportId: number +} +export type VideoImportPayload = VideoImportYoutubeDLPayload | VideoImportTorrentPayload + +export type VideoRedundancyPayload = { + videoId: number +} + +export type ManageVideoTorrentPayload = + { + action: 'create' + videoId: number + videoFileId: number + } | { + action: 'update-metadata' + + videoId?: number + streamingPlaylistId?: number + + videoFileId: number + } + +// Video transcoding payloads + +interface BaseTranscodingPayload { + videoUUID: string + isNewVideo?: boolean +} + +export interface HLSTranscodingPayload extends BaseTranscodingPayload { + type: 'new-resolution-to-hls' + resolution: VideoResolution + copyCodecs: boolean + + hasAudio: boolean + + autoDeleteWebTorrentIfNeeded: boolean + isMaxQuality: boolean +} + +export interface NewWebTorrentResolutionTranscodingPayload extends BaseTranscodingPayload { + type: 'new-resolution-to-webtorrent' + resolution: VideoResolution + + hasAudio: boolean + createHLSIfNeeded: boolean +} + +export interface MergeAudioTranscodingPayload extends BaseTranscodingPayload { + type: 'merge-audio-to-webtorrent' + resolution: VideoResolution + createHLSIfNeeded: true +} + +export interface OptimizeTranscodingPayload extends BaseTranscodingPayload { + type: 'optimize-to-webtorrent' +} + +export type VideoTranscodingPayload = + HLSTranscodingPayload + | NewWebTorrentResolutionTranscodingPayload + | OptimizeTranscodingPayload + | MergeAudioTranscodingPayload + +export interface VideoLiveEndingPayload { + videoId: number + publishedAt: string + liveSessionId: number + streamingPlaylistId: number + + replayDirectory?: string +} + +export interface ActorKeysPayload { + actorId: number +} + +export interface DeleteResumableUploadMetaFilePayload { + filepath: string +} + +export interface MoveObjectStoragePayload { + videoUUID: string + isNewVideo: boolean + previousVideoState: VideoState +} + +export type VideoStudioTaskCutPayload = VideoStudioTaskCut + +export type VideoStudioTaskIntroPayload = { + name: 'add-intro' + + options: { + file: string + } +} + +export type VideoStudioTaskOutroPayload = { + name: 'add-outro' + + options: { + file: string + } +} + +export type VideoStudioTaskWatermarkPayload = { + name: 'add-watermark' + + options: { + file: string + } +} + +export type VideoStudioTaskPayload = + VideoStudioTaskCutPayload | + VideoStudioTaskIntroPayload | + VideoStudioTaskOutroPayload | + VideoStudioTaskWatermarkPayload + +export interface VideoStudioEditionPayload { + videoUUID: string + tasks: VideoStudioTaskPayload[] +} + +// --------------------------------------------------------------------------- + +export type NotifyPayload = + { + action: 'new-video' + videoUUID: string + } + +// --------------------------------------------------------------------------- + +export interface FederateVideoPayload { + videoUUID: string + isNewVideo: boolean +}