star/gdu/tui/status.go

85 lines
1.8 KiB
Go
Raw Permalink Normal View History

2025-04-26 19:33:14 +08:00
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()
})
}