Complete Phase E theming, onboarding, and Windows share integration
Adds theme presets (Toffee/Slate/Evergreen/Lavender) with a "follow system" mode and high-contrast awareness, a first-run welcome screen, and the Windows analog of Android's share sheet for a Win32 app: an aerofetch:// protocol handler plus an Explorer "Send to AeroFetch" entry, both routed through a single-instance lock so a second launch hands its link to the already-running window instead of opening a duplicate. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+29
-3
@@ -33,7 +33,14 @@ export const IpcChannels = {
|
||||
errorLogList: 'errorlog:list',
|
||||
errorLogClear: 'errorlog:clear',
|
||||
backupExport: 'backup:export',
|
||||
backupImport: 'backup:import'
|
||||
backupImport: 'backup:import',
|
||||
systemThemeGet: 'system-theme:get',
|
||||
/** main → renderer push channel for OS theme/contrast changes (nativeTheme 'updated') */
|
||||
systemThemeUpdate: 'system-theme:update',
|
||||
openHighContrastSettings: 'shell:open-high-contrast-settings',
|
||||
/** main → renderer push channel: a URL handed to AeroFetch from outside the app
|
||||
* (the aerofetch:// protocol, or a .url file via Explorer's "Send to" menu) */
|
||||
externalUrl: 'external-url'
|
||||
} as const
|
||||
|
||||
/** Sentinel format id meaning "let yt-dlp pick the best video+audio". */
|
||||
@@ -69,6 +76,21 @@ export type CookieSource = 'none' | 'browser' | 'login'
|
||||
export const COOKIE_BROWSERS = ['chrome', 'edge', 'firefox', 'brave', 'opera', 'vivaldi'] as const
|
||||
export type CookieBrowser = (typeof COOKIE_BROWSERS)[number]
|
||||
|
||||
/** Accent color presets for the brand ramp (see src/renderer/src/theme.ts). */
|
||||
export const ACCENT_COLORS = ['toffee', 'slate', 'evergreen', 'lavender'] as const
|
||||
export type AccentColor = (typeof ACCENT_COLORS)[number]
|
||||
|
||||
/** UI color theme: an explicit mode, or 'system' to follow the OS preference. */
|
||||
export type ThemeMode = 'light' | 'dark' | 'system'
|
||||
|
||||
/** OS-level theme signal, read from Electron's nativeTheme in the main process. */
|
||||
export interface SystemThemeInfo {
|
||||
/** whether Windows is currently in dark mode */
|
||||
shouldUseDarkColors: boolean
|
||||
/** whether a Windows high-contrast theme is active */
|
||||
shouldUseHighContrastColors: boolean
|
||||
}
|
||||
|
||||
/** SponsorBlock segment categories (subset of yt-dlp's, the ones Seal exposes). */
|
||||
export const SPONSORBLOCK_CATEGORIES = [
|
||||
'sponsor',
|
||||
@@ -270,8 +292,10 @@ export interface Settings {
|
||||
maxConcurrent: number
|
||||
/** yt-dlp output template, e.g. '%(title)s.%(ext)s' */
|
||||
filenameTemplate: string
|
||||
/** UI color theme */
|
||||
theme: 'light' | 'dark'
|
||||
/** UI color theme: explicit light/dark, or 'system' to follow the OS */
|
||||
theme: ThemeMode
|
||||
/** brand accent preset (buttons, links, selected nav item) */
|
||||
accentColor: AccentColor
|
||||
/** auto-detect video links from the clipboard on window focus */
|
||||
clipboardWatch: boolean
|
||||
/** default post-processing / format options for new downloads */
|
||||
@@ -296,6 +320,8 @@ export interface Settings {
|
||||
defaultTemplateId: string | null
|
||||
/** show a native OS notification when a download finishes or fails */
|
||||
notifyOnComplete: boolean
|
||||
/** false until the first-run welcome screen has been dismissed */
|
||||
hasCompletedOnboarding: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user