Fix M18: make audio quality labels format-agnostic ("Best", not "Best (MP3)")

The audio quality preset "Best (MP3)" named a format that's wrong whenever the
audio format is opus/flac/wav. Renamed it to "Best" so the label never
contradicts the chosen audioFormat (which is picked separately). Bitrate presets
stay as bitrates and are already ignored for lossless formats (M21).

- AUDIO_QUALITY_OPTIONS[0]: 'Best (MP3)' -> 'Best' (buildArgs already had a
  `case 'Best'` returning '0', so arg generation is unchanged).
- Updated the main + renderer defaults and the preview/mock/test fixtures.
- Added a one-line migration in getSettings() that rewrites a stored legacy
  'Best (MP3)' to 'Best' so existing users' dropdowns match.

typecheck + 242 tests + eslint green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 15:46:55 -04:00
parent af6c4d3c67
commit 8cbfc90f5d
9 changed files with 21 additions and 15 deletions
+6 -1
View File
@@ -29,7 +29,7 @@ const DEFAULTS: Settings = {
audioDir: '',
defaultKind: 'video',
defaultVideoQuality: 'Best available',
defaultAudioQuality: 'Best (MP3)',
defaultAudioQuality: 'Best',
maxConcurrent: 2,
filenameTemplate: '%(title)s.%(ext)s',
// Follow the OS theme on first launch (SR1) so a dark-mode Windows user isn't
@@ -263,6 +263,11 @@ export function getSettings(): Settings {
if (!(ACCENT_COLORS as readonly string[]).includes(cur.accentColor)) {
s.set('accentColor', DEFAULTS.accentColor)
}
// Migrate the legacy audio-quality label 'Best (MP3)' to the format-agnostic
// 'Best' so the dropdown matches and the label no longer names a format (M18).
if (cur.defaultAudioQuality === 'Best (MP3)') {
s.set('defaultAudioQuality', 'Best')
}
// Hand callers (and, via IPC, the renderer) plaintext credentials — they're
// only encrypted on disk (see withDecryptedSecrets / encryptSecret).
cachedSettings = withDecryptedSecrets(s.store)
+1 -1
View File
@@ -16,7 +16,7 @@ if (import.meta.env.DEV && !window.api) {
audioDir: 'C:\\Users\\you\\Documents\\Audio',
defaultKind: 'video',
defaultVideoQuality: 'Best available',
defaultAudioQuality: 'Best (MP3)',
defaultAudioQuality: 'Best',
maxConcurrent: 2,
filenameTemplate: '%(title)s.%(ext)s',
theme: 'system',
+1 -1
View File
@@ -221,7 +221,7 @@ const seed: DownloadItem[] = PREVIEW
channel: 'ChillStudio',
durationLabel: '1:00:21',
kind: 'audio',
quality: 'Best (MP3)',
quality: 'Best',
status: 'queued',
progress: 0
},
+1 -1
View File
@@ -25,7 +25,7 @@ const seed: HistoryEntry[] = PREVIEW
channel: 'ChillStudio',
url: 'https://youtube.com/watch?v=aaa1111',
kind: 'audio',
quality: 'Best (MP3)',
quality: 'Best',
sizeLabel: '142 MB',
filePath: 'C:\\Users\\you\\Downloads\\Deep Focus — Ambient Mix.mp3',
completedAt: Date.now() - 1000 * 60 * 60 * 26
+1 -1
View File
@@ -10,7 +10,7 @@ const FALLBACK: Settings = {
audioDir: PREVIEW ? 'C:\\Users\\you\\Documents\\Audio' : '',
defaultKind: 'video',
defaultVideoQuality: 'Best available',
defaultAudioQuality: 'Best (MP3)',
defaultAudioQuality: 'Best',
maxConcurrent: 2,
filenameTemplate: '%(title)s.%(ext)s',
// Mirror main's DEFAULTS (SR1): follow the OS theme until real settings load,
+6 -3
View File
@@ -128,7 +128,10 @@ export const VIDEO_QUALITY_OPTIONS = ['Best available', '1080p', '720p', '480p',
export type VideoQuality = (typeof VIDEO_QUALITY_OPTIONS)[number]
/** Quality/format labels for the audio download selector. */
export const AUDIO_QUALITY_OPTIONS = ['Best (MP3)', '320 kbps', '192 kbps', '128 kbps'] as const
// Format-agnostic: the audio container/codec is chosen separately (downloadOptions
// .audioFormat); these are just the target quality. Bitrate values are ignored for
// lossless formats (flac/wav) -- see buildArgs (M18/M21).
export const AUDIO_QUALITY_OPTIONS = ['Best', '320 kbps', '192 kbps', '128 kbps'] as const
export type AudioQuality = (typeof AUDIO_QUALITY_OPTIONS)[number]
/** UI color theme: an explicit mode, or 'system' to follow the OS preference. */
@@ -409,7 +412,7 @@ export interface StartDownloadOptions {
id: string
url: string
kind: MediaKind
/** one of the UI quality labels (e.g. '1080p', 'Best (MP3)') */
/** one of the UI quality labels (e.g. '1080p', 'Best') */
quality: string
/** absolute output directory; main falls back to the OS Downloads folder */
outputDir?: string
@@ -614,7 +617,7 @@ export interface HistoryEntry {
channel?: string
url: string
kind: MediaKind
/** Quality preset ('720p', 'Best available', 'Best (MP3)', …) or the probed
/** Quality preset ('720p', 'Best available', 'Best', …) or the probed
* format's display label. Used for display and, when no formatId is present,
* as the fallback quality selector on re-download (H5). */
quality: string