36699531cf
Aligns with CC2 enforcement: ESLint + Prettier + noImplicitAny now enforced. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import { app } from 'electron'
|
|
import { join } from 'path'
|
|
import { mkdirSync } from 'fs'
|
|
|
|
/**
|
|
* Filesystem path helpers for the main process. Kept separate from settings.ts
|
|
* (the electron-store persistence layer) so path derivation and the settings
|
|
* store don't share a module — they have different concerns and dependencies (L69).
|
|
* All resolve app paths, so callers must run post-`app.ready`.
|
|
*/
|
|
|
|
/** Fixed path for the --download-archive file; not user-configurable. */
|
|
export function getDownloadArchivePath(): string {
|
|
return join(app.getPath('userData'), 'download-archive.txt')
|
|
}
|
|
|
|
/**
|
|
* The default per-kind download destination: video → Documents\Video,
|
|
* audio → Documents\Audio. Used when the user hasn't set an explicit output
|
|
* folder (Settings → Download folder), so downloads are sorted by type.
|
|
*/
|
|
export function getDefaultMediaDir(kind: 'video' | 'audio'): string {
|
|
return join(app.getPath('documents'), kind === 'audio' ? 'Audio' : 'Video')
|
|
}
|
|
|
|
/**
|
|
* Create the Documents\Video and Documents\Audio folders up front (called once
|
|
* at startup) so they exist the moment the app opens, not just after the first
|
|
* download. Best-effort: yt-dlp also creates the output dir at download time, so
|
|
* a failure here (read-only Documents, redirected folder) is non-fatal.
|
|
*/
|
|
export function ensureMediaDirs(): void {
|
|
for (const kind of ['video', 'audio'] as const) {
|
|
try {
|
|
mkdirSync(getDefaultMediaDir(kind), { recursive: true })
|
|
} catch {
|
|
/* non-fatal — the download path will be created on demand instead */
|
|
}
|
|
}
|
|
}
|