Page:
CONVERT_MODULARIZATION_PLAN
Pages
AUTHOR_MODULE
BUGS
BUILD
BUILD_AND_RUN
CHANGELOG
CHOCO_INSTALL
COMPARE_FULLSCREEN
COMPLETION_SUMMARY
CONVERT_MODULARIZATION_PLAN
CROSS_PLATFORM_GUIDE
DEV14_WINDOWS_IMPLEMENTATION
DEV30_FINALIZATION_CHECKLIST
DVD_IMPLEMENTATION_SUMMARY
DVD_USER_GUIDE
Documentation
GNOME_COMPATIBILITY
GSTREAMER_MIGRATION_PLAN
Home
IMPLEMENTATION_SUMMARY
INSTALLATION
INSTALL_LINUX
INSTALL_WINDOWS
INTEGRATION_GUIDE
INTERNAL_DVD_AUTHORING_SPEC
LATEST_UPDATES
LATEX_PREPARATION
LOSSLESSCUT_INSPIRATION
MODULES
PERSISTENT_VIDEO_CONTEXT
PHASE2_COMPLETE
PHASE2_INTEGRATION_PLAN
PLAYER_MODULE
PLAYER_PERFORMANCE_ISSUES
PROJECT_STATUS
QUEUE_SYSTEM_GUIDE
QUICKSTART
REFACTOR_DEV30_PLAN
ROADMAP
TESTING_CHECKLIST
TESTING_DEV13
TESTING_MODULE_CHECKLIST
TEST_DVD_CONVERSION
TODO_EXTRACTION_NOTES
TRIM_MODULE_DESIGN
VIDEO_METADATA_GUIDE
VIDEO_PLAYER
VIDEO_PLAYER_FORK
VT_PLAYER_IMPLEMENTATION
VT_PLAYER_INTEGRATION_NOTES
WINDOWS_BUILD_PERFORMANCE
WINDOWS_COMPATIBILITY
WINDOWS_PACKAGING
WINDOWS_SETUP
WORKING_ON
localization policy
No results
3
CONVERT_MODULARIZATION_PLAN
Gemini CLI edited this page 2026-03-13 11:05:17 -04:00
Table of Contents
- Convert Panel Modularization Plan (Dev24/25)
- Goal
- File Structure
- What to Extract from main.go
- 1. UI Builders (buildConvertView -> convert_advanced.go)
- 2. State Management (convertUIState -> convert_state.go)
- 3. Callback Functions (applyQuality, setQuality, updateEncodingControls -> convert_state.go)
- Integration Pattern
- Benefits
- Implementation Order
- Success Metrics
Convert Panel Modularization Plan (Dev24/25)
Goal
Move Advanced Convert UI logic out of main.go into modular UI components, keeping main.go as glue only.
File Structure
internal/ui/
├── convert_advanced.go # Advanced panel UI builder
├── convert_state.go # State manager + callbacks
├── convert_simple.go # Simple panel UI builder (future)
└── convert_types.go # Shared types and constants
main.go (cleanup)
├── Keep encoding/FFmpeg logic in existing helpers
├── Import internal/ui package only
└── Replace UI blocks with module calls
What to Extract from main.go
1. UI Builders (buildConvertView -> convert_advanced.go)
- Advanced panel dropdowns, sliders, toggles
- Layout containers and responsive sizing
- Quality presets and format selection
- Hardware acceleration controls
- Two-pass encoding interface
- Progress preview and command display
2. State Management (convertUIState -> convert_state.go)
type ConvertState struct {
// Current settings
Format formatOption
Quality string
Preset string
TwoPass bool
HardwareAccel bool
// UI bindings
FormatList *widget.Select
QualitySelect *widget.Select
// ... etc
}
type ConvertUIBindings struct {
// Controls accessible to main.go
StartConversion func()
StopConversion func()
ShowPreview func()
// ... etc
}
3. Callback Functions (applyQuality, setQuality, updateEncodingControls -> convert_state.go)
- State change management
- Validation and sanitization
- Settings persistence
- Progress update handling
Integration Pattern
main.go Changes:
import "git.leaktechnologies.dev/stu/VideoTools/internal/ui"
// Replace giant UI block with:
if useAdvanced {
panel := ui.BuildConvertAdvancedPanel(state, src)
mainContent := container.NewVBox(panel)
} else {
panel := ui.BuildConvertSimplePanel(state, src)
mainContent := container.NewVBox(panel)
}
Module Interface:
func BuildConvertAdvancedPanel(state *appState, src *videoSource) (fyne.CanvasObject, *ConvertUIBindings)
func BuildConvertSimplePanel(state *appState, src *videoSource) (fyne.CanvasObject, *ConvertUIBindings)
func InitConvertState(state *appState, src *videoSource) *ConvertState
Benefits
- Maintainable: UI logic separated from core logic
- Testable: UI components can be unit tested independently
- Reusability: Simple/Advanced panels reused in other modules
- Clean Code: main.go becomes readable and focused
- Future-Proof: Easy to add new UI features without bloating main.go
Implementation Order
- Phase 1: Create convert_types.go with shared types
- Phase 2: Extract state management into convert_state.go
- Phase 3: Build convert_advanced.go with UI logic
- Phase 4: Update main.go to use new modules
- Phase 5: Test and iterate on modular interface
Success Metrics
main.go reduced by 2000+ lines
UI logic properly separated and testable
Clean module boundaries with no circular deps
Maintain existing functionality and user experience
Foundation for future UI improvements in other modules
This modularization will make the codebase much more maintainable and prepare us for advanced features in dev25.
Navigation
What is VideoTools?
Project Status
Capabilities
Codecs and Frame Rates
Installation (One Command)
Alternative: Developer Setup
DVD Workflow (Optional)
Documentation
- Project Status
- Installation
- Readme
- Build And Run
- DVD User Guide
- DVD Implementation Summary
- Integration Guide
- Queue System Guide
- Localization-Policy