star/gdu/tui/status.go
2025-04-26 19:33:14 +08:00

85 lines
1.8 KiB
Go

package tui
import (
"fmt"
"time"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
func (ui *UI) toggleStatusBar(show bool) {
var textColor, textBgColor tcell.Color
if ui.UseColors {
textColor = tcell.NewRGBColor(0, 0, 0)
textBgColor = tcell.NewRGBColor(36, 121, 208)
} else {
textColor = tcell.NewRGBColor(0, 0, 0)
textBgColor = tcell.NewRGBColor(255, 255, 255)
}
ui.grid.Clear()
ui.statusMut.Lock()
defer ui.statusMut.Unlock()
if show {
ui.status = tview.NewTextView().SetDynamicColors(true)
ui.status.SetTextColor(textColor)
ui.status.SetBackgroundColor(textBgColor)
ui.grid.SetRows(1, 1, 0, 1, 1)
ui.grid.AddItem(ui.header, 0, 0, 1, 1, 0, 0, false).
AddItem(ui.currentDirLabel, 1, 0, 1, 1, 0, 0, false).
AddItem(ui.table, 2, 0, 1, 1, 0, 0, true).
AddItem(ui.status, 3, 0, 1, 1, 0, 0, false).
AddItem(ui.footer, 4, 0, 1, 1, 0, 0, false)
return
}
ui.status = nil
ui.grid.SetRows(1, 1, 0, 1)
ui.grid.AddItem(ui.header, 0, 0, 1, 1, 0, 0, false).
AddItem(ui.currentDirLabel, 1, 0, 1, 1, 0, 0, false).
AddItem(ui.table, 2, 0, 1, 1, 0, 0, true).
AddItem(ui.footer, 3, 0, 1, 1, 0, 0, false)
}
func (ui *UI) updateStatusWorker() {
for {
ui.updateStatus()
time.Sleep(500 * time.Millisecond)
}
}
func (ui *UI) updateStatus() {
ui.workersMut.Lock()
cnt := ui.activeWorkers
ui.workersMut.Unlock()
ui.statusMut.RLock()
status := ui.status
ui.statusMut.RUnlock()
if cnt == 0 && status == nil {
return
}
if cnt > 0 && status == nil {
ui.app.QueueUpdateDraw(func() {
ui.toggleStatusBar(true)
})
} else if cnt == 0 {
ui.app.QueueUpdateDraw(func() {
ui.toggleStatusBar(false)
})
return
}
ui.app.QueueUpdateDraw(func() {
msg := fmt.Sprintf(" Active background deletions: %d", cnt)
ui.statusMut.RLock()
ui.status.SetText(msg)
ui.statusMut.RUnlock()
})
}