109 lines
1.9 KiB
Go
109 lines
1.9 KiB
Go
package gui
|
|
|
|
import (
|
|
|
|
"github.com/gdamore/tcell/v2"
|
|
"github.com/rivo/tview"
|
|
"shiny-pancake/internal/model"
|
|
"time"
|
|
)
|
|
|
|
|
|
|
|
type activeSessions struct {
|
|
*tview.Table
|
|
sn chan *model.Session
|
|
filterCol, filterTerm string
|
|
}
|
|
|
|
|
|
func newSessions(g *Gui) *activeSessions {
|
|
sess := &activeSessions{
|
|
Table: tview.NewTable(),
|
|
sn: make(chan *model.Session),
|
|
}
|
|
|
|
sess.SetBorder(true)
|
|
sess.entries(g)
|
|
return sess
|
|
}
|
|
|
|
func (t *activeSessions) name() string {
|
|
return `activeSessions`
|
|
}
|
|
|
|
|
|
|
|
func (t *activeSessions) entries(g *Gui) {
|
|
sss, err := g.db.UserSessions()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
g.state.resources.ActSess = sss
|
|
}
|
|
|
|
func (t *activeSessions) setEntries(g *Gui) {
|
|
t.entries(g)
|
|
table := t.Clear()
|
|
|
|
headers := []string{
|
|
"user",
|
|
"session count",
|
|
}
|
|
|
|
for i, header := range headers {
|
|
table.SetCell(0, i, &tview.TableCell{
|
|
Text: header,
|
|
NotSelectable: true,
|
|
Align: tview.AlignLeft,
|
|
Color: tview.Styles.PrimaryTextColor,
|
|
BackgroundColor: tview.Styles.PrimitiveBackgroundColor,
|
|
Attributes: tcell.AttrBold,
|
|
})
|
|
}
|
|
|
|
for i, s := range g.state.resources.ActSess {
|
|
table.SetCell(i+1, 0, tview.NewTableCell(s.Username).
|
|
SetTextColor(tview.Styles.PrimaryTextColor).
|
|
SetMaxWidth(30).
|
|
SetExpansion(1))
|
|
|
|
table.SetCell(i+1, 1, tview.NewTableCell(string(s.Count)).
|
|
SetTextColor(tview.Styles.PrimaryTextColor).
|
|
SetMaxWidth(30).
|
|
SetExpansion(1))
|
|
|
|
}
|
|
}
|
|
|
|
func (t *activeSessions) updateEntries(g *Gui) {
|
|
g.app.QueueUpdateDraw(func() {
|
|
t.setEntries(g)
|
|
})
|
|
}
|
|
|
|
func (t *activeSessions) focus(g *Gui) {
|
|
t.SetSelectable(true, false)
|
|
g.app.SetFocus(t)
|
|
}
|
|
|
|
func (t *activeSessions) unfocus() {
|
|
t.SetSelectable(false, false)
|
|
}
|
|
|
|
func (t *activeSessions) monitoringSessions(g *Gui) {
|
|
ticker := time.NewTicker(5 * time.Minute)
|
|
|
|
LOOP:
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
t.updateEntries(g)
|
|
case <-g.state.stopChans["trips"]:
|
|
ticker.Stop()
|
|
break LOOP
|
|
}
|
|
}
|
|
}
|