From e002b586b11b46a490a70cb7661734f858ade3b7 Mon Sep 17 00:00:00 2001 From: Stu Leak Date: Sat, 20 Dec 2025 16:13:32 -0500 Subject: [PATCH] Sync bitrate preset between simple and advanced --- DONE.md | 1 + TODO.md | 1 + main.go | 36 +++++++++++++++++++++++++++++++----- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/DONE.md b/DONE.md index a38b96f..9b319f9 100644 --- a/DONE.md +++ b/DONE.md @@ -829,6 +829,7 @@ This file tracks completed features, fixes, and milestones. - ✅ Added CRF preset dropdown with Manual option - ✅ Added 0.5/1.0 Mbps bitrate presets and simplified preset names - ✅ Default bitrate preset normalized to 2.5 Mbps to avoid "select one" +- ✅ Linked simple and advanced bitrate presets so they stay in sync - ✅ Stabilized video seeking and embedded rendering - ✅ Improved player window positioning - ✅ Fixed clear video functionality diff --git a/TODO.md b/TODO.md index 76cdd7d..45eb7e4 100644 --- a/TODO.md +++ b/TODO.md @@ -62,6 +62,7 @@ This file tracks upcoming features, improvements, and known issues. - CRF preset dropdown added with Manual option - Bitrate presets expanded to include 0.5/1.0 Mbps and renamed for clarity - Default bitrate preset normalized to 2.5 Mbps to prevent empty select + - Simple/advanced bitrate presets synced *Last Updated: 2025-12-20* diff --git a/main.go b/main.go index 52d519c..b572115 100644 --- a/main.go +++ b/main.go @@ -6117,10 +6117,15 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { } var applyBitratePreset func(string) + var setBitratePreset func(string) + var syncingBitratePreset bool bitratePresetSelect = widget.NewSelect(bitratePresetLabels, func(value string) { - if applyBitratePreset != nil { - applyBitratePreset(value) + if syncingBitratePreset { + return + } + if setBitratePreset != nil { + setBitratePreset(value) } }) state.convert.BitratePreset = normalizePresetLabel(state.convert.BitratePreset) @@ -6131,9 +6136,11 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { // Simple bitrate selector (shares presets) simpleBitrateSelect = widget.NewSelect(bitratePresetLabels, func(value string) { - state.convert.BitratePreset = value - if applyBitratePreset != nil { - applyBitratePreset(value) + if syncingBitratePreset { + return + } + if setBitratePreset != nil { + setBitratePreset(value) } }) simpleBitrateSelect.SetSelected(state.convert.BitratePreset) @@ -6430,6 +6437,25 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { } } + setBitratePreset = func(value string) { + if syncingBitratePreset { + return + } + syncingBitratePreset = true + state.convert.BitratePreset = value + if applyBitratePreset != nil { + applyBitratePreset(value) + } + if bitratePresetSelect != nil { + bitratePresetSelect.SetSelected(value) + } + if simpleBitrateSelect != nil { + simpleBitrateSelect.SetSelected(value) + } + syncingBitratePreset = false + } + setBitratePreset(state.convert.BitratePreset) + updateEncodingControls = func() { mode := state.convert.BitrateMode isLossless := state.convert.Quality == "Lossless"