Stabilize queue back navigation

This commit is contained in:
Stu Leak 2025-12-24 16:22:24 -05:00
parent 7226da0970
commit e919339e3d

24
main.go
View File

@ -816,6 +816,8 @@ type appState struct {
window fyne.Window window fyne.Window
active string active string
lastModule string lastModule string
queueBackTarget string
queueLastRefresh time.Time
navigationHistory []string // Track module navigation history for back/forward buttons navigationHistory []string // Track module navigation history for back/forward buttons
navigationHistoryPosition int // Current position in navigation history navigationHistoryPosition int // Current position in navigation history
navigationHistorySuppress bool // Temporarily suppress history tracking during navigation navigationHistorySuppress bool // Temporarily suppress history tracking during navigation
@ -1593,6 +1595,7 @@ func (s *appState) showMainMenu() {
s.stopPlayer() s.stopPlayer()
s.stopQueueAutoRefresh() s.stopQueueAutoRefresh()
s.active = "" s.active = ""
s.queueBackTarget = ""
// Track navigation history // Track navigation history
s.pushNavigationHistory("mainmenu") s.pushNavigationHistory("mainmenu")
@ -1697,7 +1700,10 @@ func (s *appState) showMainMenu() {
func (s *appState) showQueue() { func (s *appState) showQueue() {
s.stopPreview() s.stopPreview()
s.stopPlayer() s.stopPlayer()
s.lastModule = s.active if s.active != "queue" {
s.lastModule = s.active
s.queueBackTarget = s.active
}
s.active = "queue" s.active = "queue"
s.refreshQueueView() s.refreshQueueView()
s.startQueueAutoRefresh() s.startQueueAutoRefresh()
@ -1705,6 +1711,14 @@ func (s *appState) showQueue() {
// refreshQueueView rebuilds the queue UI while preserving scroll position and inline active conversion. // refreshQueueView rebuilds the queue UI while preserving scroll position and inline active conversion.
func (s *appState) refreshQueueView() { func (s *appState) refreshQueueView() {
if s.active == "queue" {
now := time.Now()
if !s.queueLastRefresh.IsZero() && now.Sub(s.queueLastRefresh) < 500*time.Millisecond {
return
}
s.queueLastRefresh = now
}
// Preserve current scroll offset if we already have a view // Preserve current scroll offset if we already have a view
if s.queueScroll != nil { if s.queueScroll != nil {
s.queueOffset = s.queueScroll.Offset s.queueOffset = s.queueScroll.Offset
@ -1736,8 +1750,12 @@ func (s *appState) refreshQueueView() {
view, scroll := ui.BuildQueueView( view, scroll := ui.BuildQueueView(
jobs, jobs,
func() { // onBack func() { // onBack
if s.lastModule != "" && s.lastModule != "queue" && s.lastModule != "menu" { target := s.queueBackTarget
s.showModule(s.lastModule) if target == "" {
target = s.lastModule
}
if target != "" && target != "queue" && target != "menu" {
s.showModule(target)
} else { } else {
s.showMainMenu() s.showMainMenu()
} }