From d20dcde5bb8c7f389f6daf44030c88ae162d53f9 Mon Sep 17 00:00:00 2001 From: Stu Leak Date: Sat, 20 Dec 2025 15:24:24 -0500 Subject: [PATCH] Refactor convert config reset to use helper function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Extract reset defaults logic to resetConvertDefaults function - Add setTargetFileSize helper with syncing guard - Add syncingTargetSize flag to prevent update loops - Consolidate reset button handlers to call shared function - Improves code organization and maintainability 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- main.go | 134 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 74 insertions(+), 60 deletions(-) diff --git a/main.go b/main.go index e910146..73dca36 100644 --- a/main.go +++ b/main.go @@ -5806,50 +5806,8 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { settingsInfoLabel.Alignment = fyne.TextAlignCenter resetSettingsBtn := widget.NewButton("Reset to Defaults", func() { - state.convert = convertConfig{ - SelectedFormat: formatOptions[0], - OutputBase: "converted", - Quality: "Standard (CRF 23)", - InverseTelecine: false, - OutputAspect: "Source", - AspectHandling: "Auto", - AspectUserSet: false, - VideoCodec: "H.264", - EncoderPreset: "medium", - BitrateMode: "CRF", - BitratePreset: "Manual", - CRF: "", - VideoBitrate: "", - TargetResolution: "Source", - FrameRate: "Source", - PixelFormat: "yuv420p", - HardwareAccel: "auto", - AudioCodec: "AAC", - AudioBitrate: "192k", - AudioChannels: "Source", - UseAutoNaming: false, - AutoNameTemplate: " - - ", - } - logging.Debug(logging.CatUI, "settings reset to defaults") - formatSelect.SetSelected(state.convert.SelectedFormat.Label) - videoCodecSelect.SetSelected(state.convert.VideoCodec) - qualitySelectSimple.SetSelected(state.convert.Quality) - qualitySelectAdv.SetSelected(state.convert.Quality) - simplePresetSelect.SetSelected(state.convert.EncoderPreset) - bitrateModeSelect.SetSelected(state.convert.BitrateMode) - bitratePresetSelect.SetSelected(state.convert.BitratePreset) - crfEntry.SetText(state.convert.CRF) - videoBitrateEntry.SetText(state.convert.VideoBitrate) - targetFileSizeSelect.SetSelected("Manual") - targetFileSizeEntry.SetText(state.convert.TargetFileSize) - autoNameCheck.SetChecked(state.convert.UseAutoNaming) - autoNameTemplate.SetText(state.convert.AutoNameTemplate) - outputEntry.SetText(state.convert.OutputBase) - if updateEncodingControls != nil { - updateEncodingControls() - } - if updateQualityVisibility != nil { - updateQualityVisibility() + if resetConvertDefaults != nil { + resetConvertDefaults() } }) resetSettingsBtn.Importance = widget.LowImportance @@ -6171,7 +6129,11 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { return numStr, unit, true } + var syncingTargetSize bool updateTargetSizeState := func() { + if syncingTargetSize { + return + } val := strings.TrimSpace(targetFileSizeEntry.Text) if val == "" { state.convert.TargetFileSize = "" @@ -6200,6 +6162,26 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { } } + setTargetFileSize := func(value string) { + syncingTargetSize = true + defer func() { syncingTargetSize = false }() + if value == "" { + targetFileSizeEntry.SetText("") + targetFileSizeUnitSelect.SetSelected("MB") + state.convert.TargetFileSize = "" + return + } + if num, unit, ok := parseSizeParts(value); ok { + targetFileSizeEntry.SetText(num) + if unit != "" { + targetFileSizeUnitSelect.SetSelected(unit) + } + } else { + targetFileSizeEntry.SetText(value) + } + state.convert.TargetFileSize = value + } + targetFileSizeUnitSelect.OnChanged = func(value string) { if targetFileSizeEntry.Hidden { return @@ -6851,6 +6833,52 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { layout.NewSpacer(), ) + resetConvertDefaults = func() { + state.convert = defaultConvertConfig() + logging.Debug(logging.CatUI, "convert settings reset to defaults") + + tabs.SelectIndex(0) + state.convert.Mode = "Simple" + + formatSelect.SetSelected(state.convert.SelectedFormat.Label) + videoCodecSelect.SetSelected(state.convert.VideoCodec) + qualitySelectSimple.SetSelected(state.convert.Quality) + qualitySelectAdv.SetSelected(state.convert.Quality) + simplePresetSelect.SetSelected(state.convert.EncoderPreset) + encoderPresetSelect.SetSelected(state.convert.EncoderPreset) + bitrateModeSelect.SetSelected(reverseMap[state.convert.BitrateMode]) + bitratePresetSelect.SetSelected(state.convert.BitratePreset) + simpleBitrateSelect.SetSelected(state.convert.BitratePreset) + crfEntry.SetText(state.convert.CRF) + setManualBitrate(state.convert.VideoBitrate) + targetFileSizeSelect.SetSelected("Manual") + setTargetFileSize(state.convert.TargetFileSize) + autoNameCheck.SetChecked(state.convert.UseAutoNaming) + autoNameTemplate.SetText(state.convert.AutoNameTemplate) + outputEntry.SetText(state.convert.OutputBase) + resolutionSelectSimple.SetSelected(state.convert.TargetResolution) + resolutionSelect.SetSelected(state.convert.TargetResolution) + frameRateSelect.SetSelected(state.convert.FrameRate) + motionInterpCheck.SetChecked(state.convert.UseMotionInterpolation) + syncAspect(state.convert.OutputAspect, false) + aspectOptions.SetSelected(state.convert.AspectHandling) + pixelFormatSelect.SetSelected(state.convert.PixelFormat) + hwAccelSelect.SetSelected(state.convert.HardwareAccel) + twoPassCheck.SetChecked(state.convert.TwoPass) + audioCodecSelect.SetSelected(state.convert.AudioCodec) + audioBitrateSelect.SetSelected(state.convert.AudioBitrate) + audioChannelsSelect.SetSelected(state.convert.AudioChannels) + + updateAspectBoxVisibility() + if updateEncodingControls != nil { + updateEncodingControls() + } + if updateQualityVisibility != nil { + updateQualityVisibility() + } + state.persistConvertConfig() + } + // Create tabs for Simple/Advanced modes // Wrap simple options with settings box at top simpleWithSettings := container.NewVBox(settingsBox, simpleOptions) @@ -7078,23 +7106,9 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject { mainContent := container.NewMax(mainSplit) resetBtn := widget.NewButton("Reset", func() { - tabs.SelectIndex(0) // Select Simple tab - state.convert.Mode = "Simple" - formatSelect.SetSelected("MP4 (H.264)") - state.convert.Quality = "Standard (CRF 23)" - qualitySelectSimple.SetSelected("Standard (CRF 23)") - qualitySelectAdv.SetSelected("Standard (CRF 23)") - aspectOptions.SetSelected("Auto") - targetAspectSelect.SetSelected("Source") - updateAspectBoxVisibility() - if updateEncodingControls != nil { - updateEncodingControls() + if resetConvertDefaults != nil { + resetConvertDefaults() } - if updateQualityVisibility != nil { - updateQualityVisibility() - } - state.persistConvertConfig() - logging.Debug(logging.CatUI, "convert settings reset to defaults") }) statusLabel := widget.NewLabel("") statusLabel.Wrapping = fyne.TextTruncate // Prevent text wrapping to new line