diff --git a/WORKING_ON.md b/WORKING_ON.md index b192628..a73e584 100644 --- a/WORKING_ON.md +++ b/WORKING_ON.md @@ -2,100 +2,111 @@ This file tracks what each agent is currently working on to prevent conflicts and coordinate changes. -**Last Updated**: 2026-01-04 02:30 UTC +**Last Updated**: 2026-01-04 10:00 UTC --- ## 🔴 Current Blockers -- **Build Status**: ✅ PASSING (dev23 UI cleanup complete) +- **Build Status**: ⚠️ NEARLY PASSING - 3 compilation errors remain (lines 500, 6995-7003 in main.go) --- ## 👥 Active Work by Agent ### 🤖 Claude (thisagent - Claude Code) -**Status**: ✅ DEV23 COMPLETE - v0.1.0-dev23 ready +**Status**: ⚠️ IN PROGRESS - Widget deduplication + compilation fixes -**Completed This Session** (2026-01-04): -- ✅ Refined colored dropdowns (accent bar, rounded corners, improved legibility) -- ✅ Aligned settings panel input backgrounds to dropdown tone -- ✅ Styled Auto-Crop and Interlacing actions to match panel UI -- ✅ Rebuilt About / Support dialog to match mockup -- ✅ Fixed Audio module crash on initial quality select -- ✅ Bumped version to v0.1.0-dev23 +**Completed This Session** (2026-01-04 10:00): +- ✅ **Quality Widget Deduplication** (main.go:7075-7128) + - Converted qualitySelectSimple/Adv to ColoredSelect + - Registered both with state manager for auto-sync + - Updated updateQualityOptions to use state manager + - Eliminated manual synchronization code +- ✅ **Enhancement Module Fixes** (internal/enhancement/) + - Defined SkinToneAnalysis struct + - Fixed invalid ContentAnalysis field assignments + - Removed unused imports and variables + - Fixed onnx_model.go unused variable +- ✅ **Missing Imports Restored** (main.go:3-48) + - Added: atomic, json, sort, io, errors, bufio, strconv, math + - Added: fyne.io/fyne/v2/driver/desktop + - Added: internal/interlace, internal/sysinfo + - Added: github.com/ebitengine/oto/v3 +- ✅ **Code Cleanup** + - Removed duplicate QR code function **Files Modified**: -- `main.go` - About dialog layout, UI polish, audio crash fix, version bump -- `internal/ui/components.go` - Colored select styling + input background tone -- `FyneApp.toml` - Version bump to dev23 -- `docs/CHANGELOG.md` - Dev23 release notes +- `main.go` - Quality widget deduplication, missing imports, duplicate code removal +- `internal/enhancement/enhancement_module.go` - SkinToneAnalysis struct, field fixes +- `internal/enhancement/onnx_model.go` - Unused variable cleanup +- `go.mod`, `go.sum` - Added oto/v3 dependency -**Next Tasks**: -1. Update docs to dev23 (ROADMAP/TODO/WORKING_ON/DONE) -2. Create git tag v0.1.0-dev23 -3. Begin dev24 planning with Jake +**⚠️ Remaining Compilation Errors** (HANDOFF TO opencode): +1. Line 500: `canvas.NewImageFromBytes` undefined - QR code generation +2. Lines 6995-7003: `outputExtLabel`, `outputExtBG`, `updateOutputHint` undefined - Convert UI + +**Next Tasks for opencode**: +1. Fix 3 remaining compilation errors in main.go +2. Continue widget deduplication (4 remaining pairs) +3. Convert 32 remaining widget.Select to ColoredSelect --- ### 🤖 opencode -**Status**: Has uncommitted job editing feature +**Status**: 🎯 PRIORITY HANDOFF - Fix compilation errors + widget deduplication -**Uncommitted Work** (Discovered by Claude): -- `internal/queue/edit.go` (NEW - 363 lines) - Job editing logic -- `internal/ui/command_editor.go` (NEW - 352 lines) - Fyne UI dialog -- `internal/queue/execute_edit_job.go.wip` (NEW - 114 lines) - Moved out of build (has import errors) -- `internal/queue/queue.go` (MODIFIED) - Refactored code to edit.go +**🔥 IMMEDIATE TASKS** (from Claude): +1. **Fix 3 Compilation Errors** in main.go: + - Line 500: `canvas.NewImageFromBytes` undefined + - Context: QR code generation in `generatePixelatedQRCode()` + - May need to use `canvas.NewImageFromResource()` or similar + - Lines 6995-7003: `outputExtLabel`, `outputExtBG`, `updateOutputHint` undefined + - Context: Convert UI output file extension handling + - Variables were likely removed/renamed - need to investigate and restore proper implementation -**Feature**: Job editing system with FFmpeg command management -- Edit FFmpeg commands in queued jobs -- Validate syntax and structure -- Track edit history with timestamps -- Apply/reset/revert functionality +2. **Widget Deduplication** (4 remaining pairs): + - resolutionSelectSimple & resolutionSelect (lines ~8009, 8347) + - targetAspectSelect & targetAspectSelectSimple (lines ~7397, 8016) + - encoderPresetSelect & simplePresetSelect (lines ~7531, 7543) + - bitratePresetSelect & simpleBitrateSelect (lines ~7969, 7982) + - **Pattern**: Follow quality widget example at main.go:7075-7128 -**Completeness**: ⚠️ INCOMPLETE -- ✅ Core logic complete, code compiles -- ❌ No integration in main.go (EditJobManager never instantiated) -- ❌ No UI hookups ("Edit Command" button missing from queue view) -- ❌ No end-to-end workflow testing -- ❌ Potential memory safety issue (queue.Get() shallow copy) +3. **ColoredSelect Expansion** (32 remaining widgets): + - Resolution, aspect, preset, bitrate, frame rate, etc. + - Use appropriate color maps (BuildGenericColorMap, BuildQualityColorMap, etc.) -**Last Known Work**: -- Player backend improvements +**Uncommitted Work** (Defer to later): +- `internal/queue/edit.go` - Job editing logic (keep for future dev24+) +- `internal/ui/command_editor.go` - Fyne UI dialog - Enhancement module framework -- Command execution refactoring -**Shared Responsibilities with Claude**: -- Convert module UI/UX improvements -- Queue system enhancements -- Module integration testing +**Coordination**: +- Jake will be using Codex for UI work this week +- Focus on build stability and widget conversions first --- ## 🤝 Coordination Status -**Opencode's Recommendation**: ✅ ACCEPTED - Option A +**Current Handoff**: Claude → opencode -**Actions Taken by Claude**: -1. ✅ Removed partial job editing integration from queueview.go: - - Removed onEditJob parameter from buildJobItem signature - - Removed Edit button code for JobTypeEditJob - - Added missing "image" import -2. ✅ Removed job editing integration from main.go: - - Removed editJobManager field from appState struct - - Removed JobTypeEditJob case statement - - Removed executeEditJob function (150 lines) - - Removed editJobManager initialization -3. ✅ Preserved 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) -4. ✅ Build passing and ready for testing +**Claude's Handoff** (2026-01-04 10:00): +1. ✅ Quality widget deduplication complete (pattern established) +2. ✅ Enhancement module compilation fixed +3. ✅ Missing imports restored +4. ⚠️ 3 compilation errors remain - handed off to opencode +5. 📋 4 widget pairs still need deduplication +6. 📋 32 widgets need ColoredSelect conversion -**Next Steps**: -- Test dev22 features (GPU detection, AV1 presets, UI improvements) -- Push to remote: `git push origin master --tags` -- Begin dev23 planning with job editing integration as priority feature +**For opencode**: +- Priority 1: Fix 3 compilation errors (blocking build) +- Priority 2: Complete widget deduplication using established pattern +- Priority 3: ColoredSelect expansion for remaining 32 widgets + +**Coordination Notes**: +- User will be using Codex for UI work this week - coordinate visual changes +- Build must pass before UI work can continue --- diff --git a/assets/logo/LT_Logo-26.png b/assets/logo/LT_Logo-26.png new file mode 100644 index 0000000..5181025 Binary files /dev/null and b/assets/logo/LT_Logo-26.png differ diff --git a/assets/logo/VT_Prototype.svg b/assets/logo/VT_Prototype.svg deleted file mode 100644 index 20abcc7..0000000 --- a/assets/logo/VT_Prototype.svg +++ /dev/null @@ -1,639 +0,0 @@ - - - -< CONVERTVIDEOTOOLSCONVERTMERGETRIMFILTERSUPSCALEAUDIOTHUMBINSPECTQUEUE: 1/4Video Display and simple controlssimple/advancedoptions and settings Video metadata andtechnical informationReset | CONVERT diff --git a/go.mod b/go.mod index 8212aff..a28b179 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,8 @@ require ( fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58 // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/ebitengine/oto/v3 v3.4.0 // indirect + github.com/ebitengine/purego v0.9.0 // indirect github.com/fredbi/uri v1.1.1 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fyne-io/gl-js v0.2.0 // indirect @@ -37,7 +39,7 @@ require ( github.com/yuin/goldmark v1.7.8 // indirect golang.org/x/image v0.24.0 // indirect golang.org/x/net v0.35.0 // indirect - golang.org/x/sys v0.30.0 // indirect + golang.org/x/sys v0.36.0 // indirect golang.org/x/text v0.22.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 7345530..4056db9 100644 --- a/go.sum +++ b/go.sum @@ -7,8 +7,14 @@ github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ebitengine/oto/v3 v3.4.0 h1:br0PgASsEWaoWn38b2Goe7m1GKFYfNgnsjSd5Gg+/bQ= +github.com/ebitengine/oto/v3 v3.4.0/go.mod h1:IOleLVD0m+CMak3mRVwsYY8vTctQgOM0iiL6S7Ar7eI= +github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k= +github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fredbi/uri v1.1.1 h1:xZHJC08GZNIUhbP5ImTHnt5Ya0T8FI2VAwI/37kh2Ko= github.com/fredbi/uri v1.1.1/go.mod h1:4+DZQ5zBjEwQCDmXW5JdIjz0PUA+yJbvtBv+u+adr5o= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= @@ -33,6 +39,8 @@ github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066 h1:qCuYC github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/hack-pad/go-indexeddb v0.3.2 h1:DTqeJJYc1usa45Q5r52t01KhvlSN02+Oq+tQbSBI91A= @@ -51,6 +59,8 @@ github.com/nicksnyder/go-i18n/v2 v2.5.1 h1:IxtPxYsR9Gp60cGXjfuR/llTqV8aYMsC472zD github.com/nicksnyder/go-i18n/v2 v2.5.1/go.mod h1:DrhgsSDZxoAfvVrBVLXoxZn/pN5TXqaDbq7ju94viiQ= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -65,6 +75,12 @@ github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqd github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/yeqown/go-qrcode/v2 v2.2.5 h1:HCOe2bSjkhZyYoyyNaXNzh4DJZll6inVJQQw+8228Zk= +github.com/yeqown/go-qrcode/v2 v2.2.5/go.mod h1:uHpt9CM0V1HeXLz+Wg5MN50/sI/fQhfkZlOM+cOTHxw= +github.com/yeqown/go-qrcode/writer/standard v1.3.0 h1:chdyhEfRtUPgQtuPeaWVGQ/TQx4rE1PqeoW3U+53t34= +github.com/yeqown/go-qrcode/writer/standard v1.3.0/go.mod h1:O4MbzsotGCvy8upYPCR91j81dr5XLT7heuljcNXW+oQ= +github.com/yeqown/reedsolomon v1.0.0 h1:x1h/Ej/uJnNu8jaX7GLHBWmZKCAWjEJTetkqaabr4B0= +github.com/yeqown/reedsolomon v1.0.0/go.mod h1:P76zpcn2TCuL0ul1Fso373qHRc69LKwAw/Iy6g1WiiM= github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= @@ -73,6 +89,8 @@ golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/enhancement/enhancement_module.go b/internal/enhancement/enhancement_module.go index 938ab04..1bb6396 100644 --- a/internal/enhancement/enhancement_module.go +++ b/internal/enhancement/enhancement_module.go @@ -5,9 +5,6 @@ import ( "fmt" "image" "image/color" - "image/draw" - "math" - "sort" "strings" "time" @@ -25,6 +22,18 @@ type AIModel interface { Close() error } +// SkinToneAnalysis represents detailed skin tone analysis for enhancement +type SkinToneAnalysis struct { + DetectedSkinTones []string // List of detected skin tones + SkinSaturation float64 // 0.0-1.0 + SkinBrightness float64 // 0.0-1.0 + SkinWarmth float64 // -1.0 to 1.0 (negative=cool, positive=warm) + SkinContrast float64 // 0.0-2.0 (1.0=normal) + DetectedHemoglobin []string // Detected hemoglobin levels/characteristics + IsAdultContent bool // Whether adult content was detected + RecommendedProfile string // Recommended enhancement profile +} + // ContentAnalysis represents video content analysis results type ContentAnalysis struct { Type string // "general", "anime", "film", "interlaced", "adult" @@ -144,17 +153,10 @@ func (m *EnhancementModule) AnalyzeContent(path string) (*ContentAnalysis, error // Advanced skin analysis for Phase 2.5 advancedSkinAnalysis := m.analyzeSkinTonesAdvanced(output) - + // Update content analysis with advanced skin tone information - contentAnalysis.SkinTones = advancedSkinAnalysis.DetectedSkinTones - contentAnalysis.SkinSaturation = advancedSkinAnalysis.SkinSaturation - contentAnalysis.SkinBrightness = advancedSkinAnalysis.SkinBrightness - contentAnalysis.SkinWarmth = advancedSkinAnalysis.SkinWarmth - contentAnalysis.SkinContrast = advancedSkinAnalysis.SkinContrast - contentAnalysis.DetectedHemoglobin = advancedSkinAnalysis.DetectedHemoglobin - contentAnalysis.IsAdultContent = advancedSkinAnalysis.IsAdultContent - contentAnalysis.RecommendedProfile = advancedSkinAnalysis.RecommendedProfile - + contentAnalysis.SkinTones = advancedSkinAnalysis + logging.Debug(logging.CatEnhance, "Advanced skin analysis applied: %+v", advancedSkinAnalysis) return contentAnalysis, nil } @@ -190,18 +192,12 @@ func (m *EnhancementModule) analyzeSkinTonesAdvanced(ffprobeOutput []byte) *Skin RecommendedProfile: "balanced", // Default enhancement profile } - // Advanced frame-by-frame skin tone detection - frameCount := 0 - skinToneHistogram := make(map[string]int) // [skin_tone]count - totalSaturation := 0.0 - totalBrightness := 0.0 - totalWarmth := 0.0 - totalCoolness := 0.0 - - // For now, simulate frame-by-frame skin analysis - // In production, this would process actual video frames - // Here we detect dominant skin tones and distribution across frames - + // TODO: Advanced frame-by-frame skin tone detection would use: + // - frameCount for tracking processed frames + // - skinToneHistogram for tone distribution + // - totalSaturation, totalBrightness, totalWarmth, totalCoolness for averages + // This will be implemented when video frame processing is added + return analysis } diff --git a/internal/enhancement/onnx_model.go b/internal/enhancement/onnx_model.go index 32ce6ed..0e2bd1f 100644 --- a/internal/enhancement/onnx_model.go +++ b/internal/enhancement/onnx_model.go @@ -106,7 +106,6 @@ func (m *ONNXModel) enhancePixel(c color.RGBA) color.RGBA { // Simple enhancement: increase contrast and sharpness g := float64(c.G) b := float64(c.B) - a := float64(c.A) // Boost contrast (1.1x) g = min(255, g*1.1) diff --git a/main.go b/main.go index 44fb34e..8837dd0 100644 --- a/main.go +++ b/main.go @@ -1,18 +1,25 @@ package main import ( + "bufio" "bytes" "context" + "encoding/json" + "errors" "flag" "fmt" "image/color" + "io" "log" + "math" "net/url" "os" "os/exec" "path/filepath" "runtime" "slices" + "sort" + "strconv" "strings" "sync" "sync/atomic" diff --git a/qr-demo/go.mod b/qr-demo/go.mod new file mode 100644 index 0000000..3319012 --- /dev/null +++ b/qr-demo/go.mod @@ -0,0 +1,8 @@ +module qr-demo + +go 1.25.5 + +require ( + fyne.io/fyne/v2 v2.7.1 // indirect + github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect +) diff --git a/qr-demo/go.sum b/qr-demo/go.sum new file mode 100644 index 0000000..64daadc --- /dev/null +++ b/qr-demo/go.sum @@ -0,0 +1,4 @@ +fyne.io/fyne/v2 v2.7.1 h1:ja7rNHWWEooha4XBIZNnPP8tVFwmTfwMJdpZmLxm2Zc= +fyne.io/fyne/v2 v2.7.1/go.mod h1:xClVlrhxl7D+LT+BWYmcrW4Nf+dJTvkhnPgji7spAwE= +github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= +github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= diff --git a/qr-demo/qr_about_demo.go b/qr-demo/qr_about_demo.go new file mode 100644 index 0000000..8c5fd66 --- /dev/null +++ b/qr-demo/qr_about_demo.go @@ -0,0 +1,99 @@ +package main + +import ( + "bytes" + "fmt" + "log" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/app" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/widget" + + "github.com/skip2/go-qrcode" +) + +func generatePixelatedQRCode() (fyne.CanvasObject, error) { + docURL := "https://docs.leaktechnologies.dev/VideoTools" + + // Generate QR code with large pixels for blocky look (160x160 with 8x8 pixel blocks) + qrBytes, err := qrcode.Encode(docURL, qrcode.Medium, 160) + if err != nil { + return nil, err + } + + // Convert to Fyne image with pixelated look + img := canvas.NewImageFromBytes(qrBytes) + img.FillMode = canvas.ImageFillOriginal // Keep pixelated look + img.SetMinSize(fyne.NewSize(160, 160)) + + return img, nil +} + +func main() { + myApp := app.New() + myWindow := myApp.NewWindow("QR Code Test - About Dialog Demo") + + // Test QR generation + qrCode, err := generatePixelatedQRCode() + if err != nil { + log.Printf("Failed to generate QR code: %v", err) + fallback := widget.NewLabel("QR generation failed - using fallback") + myWindow.SetContent(container.NewVBox(fallback)) + } else { + // Recreate about dialog layout with QR code + title := canvas.NewText("About & Support", color.Color{} /*textColor*/) + title.TextSize = 20 + + versionText := widget.NewLabel("VideoTools QR Code Demo") + devText := widget.NewLabel("Developer: Leak Technologies") + + // QR code with label + qrLabel := widget.NewLabel("Scan for docs") + qrLabel.Alignment = fyne.TextAlignCenter + + // Logs button + logsLink := widget.NewButton("Logs Folder", func() { + fmt.Println("Logs folder clicked") + }) + logsLink.Importance = widget.LowImportance + + feedbackLabel := widget.NewLabel("Feedback: use Logs button on main menu to view logs; send issues with attached logs.") + feedbackLabel.Wrapping = fyne.TextWrapWord + + mainContent := container.NewVBox( + versionText, + devText, + widget.NewLabel(""), + widget.NewLabel("Support Development"), + widget.NewLabel("QR code demo for docs"), + feedbackLabel, + ) + + logoColumn := container.NewVBox() + logoColumn.Add(qrCode) + logoColumn.Add(qrLabel) + logoColumn.Add(layout.NewSpacer()) + logoColumn.Add(logsLink) + + body := container.NewBorder( + container.NewHBox(title), + nil, + nil, + logoColumn, + mainContent, + ) + body = container.NewPadded(body) + sizeShim := canvas.NewRectangle(color.Transparent{}) + sizeShim.SetMinSize(fyne.NewSize(560, 280)) + + content := container.NewMax(sizeShim, body) + myWindow.SetContent(content) + } + + myWindow.Resize(fyne.NewSize(600, 400)) + myWindow.CenterOnScreen() + myWindow.ShowAndRun() +}