Add Phase B: cookies, aria2c, proxy/rate-limit, restrict-filenames & archive
Implements the remaining Phase B (Access & networking) items from ROADMAP.md: cookie sources (browser cookie-store import, or a built-in sign-in window that exports a Netscape cookie file via a persisted Electron session partition), the aria2c external downloader, proxy/rate-limit, restrict-filenames, and a download-archive to skip repeats. Wires download.ts to the buildArgs() module added in the previous commit (it wasn't hooked up yet) and renames its options param NetworkOptions -> AccessOptions to reflect the wider scope now that cookies and filename/archive flags joined proxy/rate-limit/aria2c. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+44
-1
@@ -20,7 +20,10 @@ export const IpcChannels = {
|
||||
historyRemove: 'history:remove',
|
||||
historyClear: 'history:clear',
|
||||
/** main → renderer push channel for live download events */
|
||||
downloadEvent: 'download:event'
|
||||
downloadEvent: 'download:event',
|
||||
cookiesLogin: 'cookies:login',
|
||||
cookiesStatus: 'cookies:status',
|
||||
cookiesClear: 'cookies:clear'
|
||||
} as const
|
||||
|
||||
/** Sentinel format id meaning "let yt-dlp pick the best video+audio". */
|
||||
@@ -45,6 +48,17 @@ export const VIDEO_CODECS: VideoCodecPref[] = ['any', 'h264', 'vp9', 'av1']
|
||||
/** Whether SponsorBlock cuts the segments out or just marks them as chapters. */
|
||||
export type SponsorBlockMode = 'remove' | 'mark'
|
||||
|
||||
/**
|
||||
* Where yt-dlp's auth cookies come from. 'browser' reads a logged-in browser's
|
||||
* cookie store directly; 'login' uses a cookie file exported from AeroFetch's
|
||||
* own built-in sign-in window (see src/main/cookies.ts).
|
||||
*/
|
||||
export type CookieSource = 'none' | 'browser' | 'login'
|
||||
|
||||
/** Browsers yt-dlp's --cookies-from-browser supports that ship on Windows. */
|
||||
export const COOKIE_BROWSERS = ['chrome', 'edge', 'firefox', 'brave', 'opera', 'vivaldi'] as const
|
||||
export type CookieBrowser = (typeof COOKIE_BROWSERS)[number]
|
||||
|
||||
/** SponsorBlock segment categories (subset of yt-dlp's, the ones Seal exposes). */
|
||||
export const SPONSORBLOCK_CATEGORIES = [
|
||||
'sponsor',
|
||||
@@ -234,6 +248,35 @@ export interface Settings {
|
||||
clipboardWatch: boolean
|
||||
/** default post-processing / format options for new downloads */
|
||||
downloadOptions: DownloadOptions
|
||||
/** yt-dlp --proxy value, e.g. 'socks5://127.0.0.1:1080'. Empty disables it. */
|
||||
proxy: string
|
||||
/** yt-dlp --limit-rate value, e.g. '2M' or '500K'. Empty means unlimited. */
|
||||
rateLimit: string
|
||||
/** use bundled aria2c (resources/bin/aria2c.exe) as the external downloader */
|
||||
useAria2c: boolean
|
||||
/** where auth cookies come from: none, a browser's store, or the sign-in window */
|
||||
cookieSource: CookieSource
|
||||
/** which browser to read cookies from when cookieSource is 'browser' */
|
||||
cookiesBrowser: CookieBrowser
|
||||
/** sanitize output filenames to a portable ASCII-only subset (--restrict-filenames) */
|
||||
restrictFilenames: boolean
|
||||
/** record completed downloads in a yt-dlp --download-archive file to skip repeats */
|
||||
downloadArchive: boolean
|
||||
}
|
||||
|
||||
/** Whether the built-in sign-in window has ever saved a cookie file, and when. */
|
||||
export interface CookiesStatus {
|
||||
exists: boolean
|
||||
/** epoch milliseconds the cookie file was last written */
|
||||
savedAt?: number
|
||||
}
|
||||
|
||||
/** Result of a built-in sign-in window session, resolved once the window closes. */
|
||||
export interface CookiesLoginResult {
|
||||
ok: boolean
|
||||
/** number of cookies captured into the exported file */
|
||||
cookieCount?: number
|
||||
error?: string
|
||||
}
|
||||
|
||||
/** A completed download, persisted to history.json (newest-first). */
|
||||
|
||||
Reference in New Issue
Block a user