shiny-pancake/internal/gui/sessions.go
2020-11-08 07:33:07 -06:00

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
}
}
}