export interface CustomClip { startSec: number; durationSec: number; startPart: number; filenameFormat: 'simple' | 'timestamp' | 'template'; filenameTemplate?: string; } export interface MergeGroupItem { url: string; title: string; date: string; streamer: string; duration_str: string; } export interface MergeGroup { items: MergeGroupItem[]; mergePhase: 'downloading' | 'merging' | 'splitting' | 'cleanup' | 'done'; currentItemIndex: number; downloadedFiles: Record; mergedFile?: string; splitFiles?: string[]; totalDurationSec?: number; } export interface QueueItem { id: string; title: string; url: string; date: string; streamer: string; duration_str: string; status: 'pending' | 'downloading' | 'paused' | 'completed' | 'error'; progress: number; currentPart?: number; totalParts?: number; speed?: string; eta?: string; downloadedBytes?: number; totalBytes?: number; last_error?: string; customClip?: CustomClip; mergeGroup?: MergeGroup; } export interface DownloadProgress { id: string; progress: number; speed: string; speedBytesPerSec?: number; eta: string; status: string; currentPart?: number; totalParts?: number; downloadedBytes?: number; totalBytes?: number; } export interface DownloadResult { success: boolean; error?: string; }