121 lines
2.0 KiB
Go
121 lines
2.0 KiB
Go
package gui
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/sirupsen/logrus"
|
|
"shiny-pancake/internal/model"
|
|
"shiny-pancake/logger"
|
|
|
|
|
|
"shiny-pancake/internal/database"
|
|
"strings"
|
|
"github.com/rivo/tview"
|
|
)
|
|
|
|
type resources struct {
|
|
ActSess []*model.Session
|
|
}
|
|
|
|
|
|
type panels struct {
|
|
currentPanel int
|
|
panel []panel
|
|
}
|
|
|
|
|
|
type state struct {
|
|
panels panels
|
|
tabBar *tview.TextView
|
|
resources resources
|
|
stopChans map[string]chan int
|
|
}
|
|
|
|
func newState() *state {
|
|
return &state{
|
|
stopChans: make(map[string]chan int),
|
|
}
|
|
}
|
|
|
|
type Gui struct {
|
|
app *tview.Application
|
|
pages *tview.Pages
|
|
state *state
|
|
db *database.Database
|
|
}
|
|
|
|
func New(db *database.Database) *Gui {
|
|
return &Gui{
|
|
app: tview.NewApplication(),
|
|
pages: tview.NewPages(),
|
|
state: newState(),
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
|
|
func (g *Gui) sessionPanel() *activeSessions {
|
|
for _, panel := range g.state.panels.panel {
|
|
if panel.name() == `activeSessions` {
|
|
return panel.(*activeSessions)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Start start application
|
|
func (g *Gui) Start() error {
|
|
g.initPanels()
|
|
g.startMonitoring()
|
|
var l logger.Log
|
|
l = logger.Log{"info", logrus.Fields{"init" : "ran"}, "got this far"}
|
|
logger.Lgr(&l)
|
|
if err := g.app.Run(); err != nil {
|
|
g.app.Stop()
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (g *Gui) Stop() {
|
|
g.stopMonitoring()
|
|
g.app.Stop()
|
|
}
|
|
|
|
// Page "definitions"
|
|
|
|
|
|
|
|
func (g *Gui) initPanels() {
|
|
|
|
g.state.tabBar = newTabBar()
|
|
// Page definitions
|
|
s := newSessions(g)
|
|
|
|
var l logger.Log
|
|
l = logger.Log{"info", logrus.Fields{"initPanels" : "ran"}, "got this far"}
|
|
logger.Lgr(&l)
|
|
|
|
|
|
g.pages.AddPage(`activeSessions`, s, true, true)
|
|
fmt.Fprintf(g.state.tabBar, ` ["%d"]%d %s[""] `, 0, 1, strings.Title(s.name()))
|
|
|
|
g.state.tabBar.Highlight("0")
|
|
|
|
// Panels
|
|
|
|
g.state.panels.panel = append(g.state.panels.panel, s)
|
|
|
|
layout := tview.NewFlex().SetDirection(tview.FlexRow).
|
|
AddItem(g.state.tabBar, 1, 1, false).
|
|
AddItem(g.pages, 0, 16, true)
|
|
|
|
g.app.SetRoot(layout, true)
|
|
g.goTo(`activeSessions`)
|
|
}
|
|
|
|
func (g *Gui) goTo(page string) {
|
|
g.pages.SwitchToPage(page)
|
|
}
|
|
|