Track direct conversion progress in stats and queue

This commit is contained in:
Stu Leak 2025-11-30 00:58:46 -05:00
parent d71a50eff1
commit 58773c509c

12
main.go
View File

@ -175,6 +175,7 @@ type appState struct {
playerSurf *playerSurface playerSurf *playerSurface
convertBusy bool convertBusy bool
convertStatus string convertStatus string
convertProgress float64
playSess *playSession playSess *playSession
jobQueue *queue.Queue jobQueue *queue.Queue
statsBar *ui.ConversionStatsBar statsBar *ui.ConversionStatsBar
@ -213,7 +214,7 @@ func (s *appState) updateStatsBar() {
// Reflect direct conversion as an active job in the stats bar // Reflect direct conversion as an active job in the stats bar
running = 1 running = 1
jobTitle = fmt.Sprintf("Direct convert: %s", filepath.Base(s.source.Path)) jobTitle = fmt.Sprintf("Direct convert: %s", filepath.Base(s.source.Path))
progress = 0 progress = s.convertProgress
} }
s.statsBar.UpdateStats(running, pending, completed, failed, progress, jobTitle) s.statsBar.UpdateStats(running, pending, completed, failed, progress, jobTitle)
@ -451,7 +452,7 @@ func (s *appState) refreshQueueView() {
Status: queue.JobStatusRunning, Status: queue.JobStatusRunning,
Title: fmt.Sprintf("Direct convert: %s", filepath.Base(s.source.Path)), Title: fmt.Sprintf("Direct convert: %s", filepath.Base(s.source.Path)),
Description: fmt.Sprintf("Output: %s", s.convert.OutputFile()), Description: fmt.Sprintf("Output: %s", s.convert.OutputFile()),
Progress: 0, Progress: s.convertProgress,
}}, jobs...) }}, jobs...)
} }
@ -3671,6 +3672,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
logging.Debug(logging.CatFFMPEG, "convert command: ffmpeg %s", strings.Join(args, " ")) logging.Debug(logging.CatFFMPEG, "convert command: ffmpeg %s", strings.Join(args, " "))
s.convertBusy = true s.convertBusy = true
s.convertProgress = 0
setStatus("Preparing conversion…") setStatus("Preparing conversion…")
// Widget states will be updated by the UI refresh ticker // Widget states will be updated by the UI refresh ticker
@ -3739,6 +3741,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
} }
lbl := fmt.Sprintf("Converting… %.0f%% | elapsed %s | ETA %s | %.2fx", pct, formatShortDuration(elapsedWall), etaOrDash(eta), speed) lbl := fmt.Sprintf("Converting… %.0f%% | elapsed %s | ETA %s | %.2fx", pct, formatShortDuration(elapsedWall), etaOrDash(eta), speed)
fyne.CurrentApp().Driver().DoFromGoroutine(func() { fyne.CurrentApp().Driver().DoFromGoroutine(func() {
s.convertProgress = pct
setStatus(lbl) setStatus(lbl)
}, false) }, false)
} }
@ -3754,6 +3757,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
fyne.CurrentApp().Driver().DoFromGoroutine(func() { fyne.CurrentApp().Driver().DoFromGoroutine(func() {
s.showErrorWithCopy("Conversion Failed", fmt.Errorf("convert failed: %w", err)) s.showErrorWithCopy("Conversion Failed", fmt.Errorf("convert failed: %w", err))
s.convertBusy = false s.convertBusy = false
s.convertProgress = 0
setStatus("Failed") setStatus("Failed")
}, false) }, false)
s.convertCancel = nil s.convertCancel = nil
@ -3767,6 +3771,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
logging.Debug(logging.CatFFMPEG, "convert cancelled") logging.Debug(logging.CatFFMPEG, "convert cancelled")
fyne.CurrentApp().Driver().DoFromGoroutine(func() { fyne.CurrentApp().Driver().DoFromGoroutine(func() {
s.convertBusy = false s.convertBusy = false
s.convertProgress = 0
setStatus("Cancelled") setStatus("Cancelled")
}, false) }, false)
s.convertCancel = nil s.convertCancel = nil
@ -3776,6 +3781,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
fyne.CurrentApp().Driver().DoFromGoroutine(func() { fyne.CurrentApp().Driver().DoFromGoroutine(func() {
s.showErrorWithCopy("Conversion Failed", fmt.Errorf("convert failed: %w", err)) s.showErrorWithCopy("Conversion Failed", fmt.Errorf("convert failed: %w", err))
s.convertBusy = false s.convertBusy = false
s.convertProgress = 0
setStatus("Failed") setStatus("Failed")
}, false) }, false)
s.convertCancel = nil s.convertCancel = nil
@ -3789,6 +3795,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
fyne.CurrentApp().Driver().DoFromGoroutine(func() { fyne.CurrentApp().Driver().DoFromGoroutine(func() {
s.showErrorWithCopy("Conversion Failed", fmt.Errorf("conversion output is invalid: %w", probeErr)) s.showErrorWithCopy("Conversion Failed", fmt.Errorf("conversion output is invalid: %w", probeErr))
s.convertBusy = false s.convertBusy = false
s.convertProgress = 0
setStatus("Failed") setStatus("Failed")
}, false) }, false)
s.convertCancel = nil s.convertCancel = nil
@ -3798,6 +3805,7 @@ func (s *appState) startConvert(status *widget.Label, btn, cancelBtn *widget.But
fyne.CurrentApp().Driver().DoFromGoroutine(func() { fyne.CurrentApp().Driver().DoFromGoroutine(func() {
dialog.ShowInformation("Convert", fmt.Sprintf("Saved %s", outPath), s.window) dialog.ShowInformation("Convert", fmt.Sprintf("Saved %s", outPath), s.window)
s.convertBusy = false s.convertBusy = false
s.convertProgress = 100
setStatus("Done") setStatus("Done")
}, false) }, false)
s.convertCancel = nil s.convertCancel = nil