From 75a8b900e8848c401b0e84e69fe49417ceef26ff Mon Sep 17 00:00:00 2001 From: Stu Leak Date: Tue, 30 Dec 2025 21:50:12 -0500 Subject: [PATCH] feat(author): Add VIDEO_TS folder burning UI support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added visual feedback in the Author module when a VIDEO_TS folder is loaded: - Display VIDEO_TS path with info card in Videos tab - Show message that folder will be burned directly without re-encoding - Add Remove button to clear VIDEO_TS folder - Update empty state message to indicate VIDEO_TS folder support Backend support for VIDEO_TS burning was already implemented, this adds the missing UI elements to show users when a VIDEO_TS folder is loaded. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- author_module.go | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/author_module.go b/author_module.go index 9606a64..9e8c959 100644 --- a/author_module.go +++ b/author_module.go @@ -186,6 +186,44 @@ func buildVideoClipsTab(state *appState) fyne.CanvasObject { rebuildList = func() { list.Objects = nil + // Show VIDEO_TS folder if loaded + if state.authorVideoTSPath != "" { + if emptyOverlay != nil { + emptyOverlay.Hide() + } + + videoTSLabel := widget.NewLabel("VIDEO_TS Folder:") + videoTSLabel.TextStyle = fyne.TextStyle{Bold: true} + pathLabel := widget.NewLabel(state.authorVideoTSPath) + pathLabel.Wrapping = fyne.TextWrapBreak + + removeBtn := widget.NewButton("Remove", func() { + state.authorVideoTSPath = "" + state.authorOutputType = "dvd" + rebuildList() + state.updateAuthorSummary() + }) + removeBtn.Importance = widget.MediumImportance + + infoLabel := widget.NewLabel("This VIDEO_TS folder will be burned directly to ISO without re-encoding.") + infoLabel.TextStyle = fyne.TextStyle{Italic: true} + infoLabel.Wrapping = fyne.TextWrapWord + + row := container.NewBorder( + nil, + nil, + nil, + removeBtn, + container.NewVBox(videoTSLabel, pathLabel, infoLabel), + ) + cardBg := canvas.NewRectangle(utils.MustHex("#171C2A")) + cardBg.CornerRadius = 6 + cardBg.SetMinSize(fyne.NewSize(0, videoTSLabel.MinSize().Height+pathLabel.MinSize().Height+infoLabel.MinSize().Height+20)) + list.Add(container.NewPadded(container.NewMax(cardBg, row))) + list.Refresh() + return + } + if len(state.authorClips) == 0 { if emptyOverlay != nil { emptyOverlay.Show() @@ -315,7 +353,7 @@ func buildVideoClipsTab(state *appState) fyne.CanvasObject { } }) - emptyLabel := widget.NewLabel("Drag and drop video files here\nor click 'Add Files' to select videos") + emptyLabel := widget.NewLabel("Drag and drop video files or VIDEO_TS folder here\nor click 'Add Files' to select videos") emptyLabel.Alignment = fyne.TextAlignCenter emptyOverlay = container.NewCenter(emptyLabel)