Phase 1 Progress - Convert UI Cleanup (dev23):
Architecture Improvements:
- Add SetSelectedSilent() method to ColoredSelect to prevent callback loops
- Create convertUIState manager with setQuality(), setResolution(), setAspect(), setBitratePreset()
- Eliminate syncingQuality flag (quality widgets use state manager)
- Eliminate syncingAspect flag and syncAspect() function (aspect widgets use state manager)
- Eliminate syncingBitratePreset flag (bitrate preset widgets use state manager)
Impact:
- Sync flags reduced from 5 to 2 (60% reduction)
- Automatic widget synchronization (no manual SetSelected calls)
- Single source of truth for UI state
- Foundation for eliminating remaining sync flags
Remaining: syncingBitrate, syncingTargetSize (text entry debouncing needed)
Files modified:
- internal/ui/components.go (SetSelectedSilent method)
- main.go (state manager, widget callbacks)
- Update appVersion constant from dev21 to dev22
- Ensures main menu footer and About dialog show correct version
- Completes dev22 release preparation
All build fixes applied and version correctly displayed.
Fixed compilation errors in queueview.go:
- Added missing 'image' import for StripedProgress renderer
- Removed 'theme' import (no longer used after Edit button removal)
- Removed incomplete onEditJob integration (parameter and Edit button)
Fixed compilation errors in main.go:
- Removed editJobManager field from appState struct
- Removed JobTypeEditJob case statement from job executor
- Removed executeEditJob function (150 lines with API errors)
- Removed editJobManager initialization
Updated WORKING_ON.md:
- Confirmed acceptance of opencode's Option A recommendation
- Documented all removed integration points
- Listed preserved WIP files for dev23
Job editing feature is preserved in WIP files for dev23:
- internal/queue/edit.go (not committed, ready for dev23)
- internal/ui/command_editor.go (not committed, ready for dev23)
- internal/queue/execute_edit_job.go.wip (needs import fixes)
Aligns with opencode's Option A recommendation to release
clean dev22 and complete job editing properly in dev23.
Added detailed analysis of uncommitted job editing work and coordination
request asking opencode to choose between:
- Option A: Commit refactor only, hold editing for dev23 (recommended)
- Option B: Commit all as WIP with feature flags
- Option C: Hold everything for dev23
This ensures we coordinate on dev22 feature freeze and proper integration.
- Removed Gemini from active rotation
- Updated with Claude (thisagent) and opencode as active agents
- Documented all dev22 fixes and features
- Marked build status as PASSING
- Ready for dev22 release and dev23 planning
- Fixed syntax error in main.go formatBackground section
- Added formatContainer widget for format selection in Convert module
- Fixed forward declaration issues for updateDVDOptions and buildCommandPreview
- Added GPUVendor() method to sysinfo.HardwareInfo for GPU detection
- Implemented automatic GPU detection for hardware encoding (auto mode)
- Fixed JobTypeFilters -> JobTypeFilter naming inconsistency in queue.go
- Added proper JobType specifications to all queue constants
- Removed duplicate/conflicting types.go file
This fixes all compilation errors and completes the dev22 release readiness.
Implemented automatic hardware encoder selection when hardware
acceleration is set to 'auto'. The system now detects the GPU
vendor and automatically selects the appropriate encoder:
- NVIDIA GPU → nvenc (h264_nvenc, hevc_nvenc, av1_nvenc)
- AMD GPU → amf (h264_amf, hevc_amf, av1_amf)
- Intel GPU → qsv (h264_qsv, hevc_qsv, av1_qsv)
- No compatible GPU → none (software encoding)
Detection uses the existing sysinfo.Detect() function which
identifies GPUs via nvidia-smi, lspci, wmic, and system_profiler
depending on the platform.
Location: main.go line 5867-5883
🎨 Major Convert Module Redesign:
• Navy blue Format section with 30/70 layout and rounded corners
• Two-tone Simple/Advanced buttons with dynamic colour changes
• Proper color-coded Format dropdown with navy indicators
• Dark background containers with consistent spacing
• Responsive design matching mockup specifications
📊 Technical Implementation:
• Replaced existing Format UI with card-based layout system
• Implemented 30/70 split design for better space utilization
• Added dynamic button colouring based on selection state
• Used container.NewBorder with navy rectangles for rounded corners
• Maintained backward compatibility with existing state management
🎯 Design Philosophy:
• Professional dark theme with navy blue (#1E3A8F) accents
• Clear visual hierarchy with proper sectioning
• Consistent 12pt/16pt text sizing throughout
• Rounded corners and soft edges for modern appearance
• Color-coded visual feedback for better UX
📊 Impact: Enhanced user experience with professional, responsive UI that matches
contemporary video editing application design standards.
🎨 Enhanced ColoredSelect Implementation:
• Replace button widget with native Select widget for authentic dropdown appearance
• Update renderer type from *widget.Button to *widget.Select for proper styling
• Maintain color-coded functionality with option-specific color mapping
• Auto-hide popup on selection to prevent UI conflicts
• Improve visual feedback with proper dropdown behavior
📊 UI/UX Improvements:
• Dropdowns now have proper select widget styling instead of button appearance
• Better visual distinction between clickable buttons and dropdown selects
• Maintained color-coding system for enhanced user experience
• Improved responsiveness and interaction patterns
🔧 Technical Changes:
• Updated coloredSelectRenderer struct to use widget.Select
• Modified CreateRenderer to use native Select with proper callback handling
• Ensured backward compatibility with existing SetSelected and UpdateOptions methods
• Preserved all color mapping and placeholder functionality