From 02ca67595c23891588d3919361daa0219bd08fa7 Mon Sep 17 00:00:00 2001 From: Edouard Paris Date: Tue, 19 Mar 2019 14:19:49 +0100 Subject: [PATCH] ft ui channels view --- cli/cli.go | 9 ++++---- ui/ui.go | 31 +++++++++++++------------- ui/views/channels.go | 52 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 19 deletions(-) diff --git a/cli/cli.go b/cli/cli.go index e6940ee..f2dda0c 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -10,7 +10,6 @@ import ( "github.com/edouardparis/lntop/config" "github.com/edouardparis/lntop/logging" "github.com/edouardparis/lntop/network" - "github.com/edouardparis/lntop/network/backend" "github.com/edouardparis/lntop/ui" ) @@ -48,21 +47,23 @@ func New() *cli.App { } func run(c *cli.Context) error { - a, err := app.Load() + network, err := getNetworkFromConfig(c) if err != nil { return err } + a := &app.App{Network: network} + return ui.New(a).Run() } -func getNetworkFromConfig(c *cli.Context) (backend.Backend, error) { +func getNetworkFromConfig(c *cli.Context) (*network.Network, error) { cfg, err := config.Load(c.String("config")) if err != nil { return nil, err } - logger := logging.New(config.Logger{Type: "development"}) + logger := logging.New(config.Logger{Type: "nope"}) return network.New(&cfg.Network, logger) } diff --git a/ui/ui.go b/ui/ui.go index b1b9e3b..72f04ec 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -1,15 +1,15 @@ package ui import ( - "fmt" - "github.com/jroimartin/gocui" "github.com/edouardparis/lntop/app" + "github.com/edouardparis/lntop/ui/views" ) type Ui struct { - app *app.App + gui *gocui.Gui + channels *views.Channels } func (u *Ui) Run() error { @@ -19,27 +19,26 @@ func (u *Ui) Run() error { } defer g.Close() - g.SetManagerFunc(layout) + u.gui = g + + g.SetManagerFunc(u.layout) - if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { + err = g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit) + if err != nil { return err } - if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { + err = g.MainLoop() + if err != nil && err != gocui.ErrQuit { return err } + return err } -func layout(g *gocui.Gui) error { +func (u *Ui) layout(g *gocui.Gui) error { maxX, maxY := g.Size() - if v, err := g.SetView("hello", maxX/2-7, maxY/2, maxX/2+7, maxY/2+2); err != nil { - if err != gocui.ErrUnknownView { - return err - } - fmt.Fprintln(v, "Hello world!") - } - return nil + return u.channels.Set(g, 0, maxY/2, maxX-1, maxY/2+2) } func quit(g *gocui.Gui, v *gocui.View) error { @@ -47,5 +46,7 @@ func quit(g *gocui.Gui, v *gocui.View) error { } func New(app *app.App) *Ui { - return &Ui{app: app} + return &Ui{ + channels: views.NewChannels(app.Network), + } } diff --git a/ui/views/channels.go b/ui/views/channels.go index 876c754..6c8954e 100644 --- a/ui/views/channels.go +++ b/ui/views/channels.go @@ -1,5 +1,57 @@ package views +import ( + "context" + "fmt" + + "github.com/jroimartin/gocui" + + "github.com/edouardparis/lntop/network" + "github.com/edouardparis/lntop/network/models" +) + +const CHANNELS = "channels" + type Channels struct { + *gocui.View + items []*models.Channel + network *network.Network +} + +func (c *Channels) Set(g *gocui.Gui, x0, y0, x1, y1 int) error { + var err error + c.View, err = g.SetView(CHANNELS, x0, y0, x1, y1) + if err != nil { + if err != gocui.ErrUnknownView { + return err + } + } + c.View.Frame = false + err = c.Update(context.Background()) + if err != nil { + return err + } + + c.Display() + return nil +} + +func (c *Channels) Update(ctx context.Context) error { + channels, err := c.network.ListChannels(ctx) + if err != nil { + return err + } + + c.items = channels + return nil +} + +func (c *Channels) Display() { + for i := range c.items { + fmt.Fprintln(c.View, fmt.Sprintf("%d", c.items[i].ID)) + } +} +func NewChannels(network *network.Network) *Channels { + return &Channels{network: network} }