diff --git a/src/main.ts b/src/main.ts index 3900dc1..d03e2af 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,6 +5,7 @@ import { spawn, ChildProcess, execSync, exec, spawnSync } from 'child_process'; import axios from 'axios'; import { autoUpdater } from 'electron-updater'; import { compareUpdateVersions, isNewerUpdateVersion, normalizeUpdateVersion } from './update-version-utils'; +import { CustomClip, MergeGroupItem, MergeGroup, QueueItem, DownloadProgress, DownloadResult } from './types'; // ========================================== // CONFIG & CONSTANTS @@ -156,57 +157,6 @@ interface VOD { stream_id: string; } -interface CustomClip { - startSec: number; - durationSec: number; - startPart: number; - filenameFormat: 'simple' | 'timestamp' | 'template'; - filenameTemplate?: string; -} - -interface MergeGroupItem { - url: string; - title: string; - date: string; - streamer: string; - duration_str: string; -} - -interface MergeGroup { - items: MergeGroupItem[]; - mergePhase: 'downloading' | 'merging' | 'splitting' | 'cleanup' | 'done'; - currentItemIndex: number; - downloadedFiles: Record; - mergedFile?: string; - splitFiles?: string[]; - totalDurationSec?: number; -} - -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; -} - -interface DownloadResult { - success: boolean; - error?: string; -} - interface PreflightChecks { internet: boolean; streamlink: boolean; @@ -223,19 +173,6 @@ interface PreflightResult { timestamp: string; } -interface DownloadProgress { - id: string; - progress: number; - speed: string; - speedBytesPerSec?: number; - eta: string; - status: string; - currentPart?: number; - totalParts?: number; - downloadedBytes?: number; - totalBytes?: number; -} - interface VideoInfo { duration: number; width: number; diff --git a/src/preload.ts b/src/preload.ts index a48b607..833c32c 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -1,62 +1,7 @@ import { contextBridge, ipcRenderer } from 'electron'; +import { CustomClip, MergeGroupItem, MergeGroup, QueueItem, DownloadProgress } from './types'; // Types -interface CustomClip { - startSec: number; - durationSec: number; - startPart: number; - filenameFormat: 'simple' | 'timestamp' | 'template'; - filenameTemplate?: string; -} - -interface MergeGroupItem { - url: string; - title: string; - date: string; - streamer: string; - duration_str: string; -} - -interface MergeGroup { - items: MergeGroupItem[]; - mergePhase: 'downloading' | 'merging' | 'splitting' | 'cleanup' | 'done'; - currentItemIndex: number; - downloadedFiles: Record; - mergedFile?: string; - splitFiles?: string[]; - totalDurationSec?: number; -} - -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; - customClip?: CustomClip; - mergeGroup?: MergeGroup; -} - -interface DownloadProgress { - id: string; - progress: number; - speed: string; - speedBytesPerSec?: number; - eta: string; - status: string; - currentPart?: number; - totalParts?: number; - downloadedBytes?: number; - totalBytes?: number; -} - interface RuntimeMetricsSnapshot { cacheHits: number; cacheMisses: number; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..8e12d43 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,63 @@ +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; +}