add loader

This commit is contained in:
Gustavo Chain 2020-02-14 14:05:21 +01:00
parent 9abe9905d7
commit fd4272886b
No known key found for this signature in database
GPG Key ID: DA7C1746DC118A46
2 changed files with 28 additions and 7 deletions

10
main.go
View File

@ -8,11 +8,6 @@ import (
)
func main() {
c, err := client.New()
if err != nil {
log.Fatal(err)
}
gui, err := ui.New()
if err != nil {
log.Fatal(err)
@ -20,6 +15,11 @@ func main() {
defer gui.Close()
go func() {
c, err := client.New()
if err != nil {
log.Fatal(err)
}
for {
resp, err := c.Read()
if err != nil {

View File

@ -15,6 +15,7 @@ const (
)
type state struct {
loaded bool
blocks []client.Block
projected []client.ProjectedBlock
info *client.MempoolInfo
@ -57,6 +58,8 @@ func (ui *UI) Loop() error {
}
func (ui *UI) Render(resp *client.Response) {
ui.state.loaded = true
nBlocks := len(resp.Blocks)
blocks := make([]client.Block, nBlocks)
for i := 0; i < nBlocks; i++ {
@ -90,6 +93,11 @@ func (ui *UI) Render(resp *client.Response) {
func (ui *UI) Layout(g *gocui.Gui) error {
x, y := g.Size()
if !ui.state.loaded {
return ui.loading(g, x, y)
}
g.DeleteView("loading")
// vertical layout is used if 8 blocks don't fit on the screen
// when in vertical layout the mempool is shown in the top
// and the blockchain in the bottom
@ -118,8 +126,8 @@ func (ui *UI) Layout(g *gocui.Gui) error {
}
v.BgColor = gocui.ColorBlack
}
v.Clear()
v.Clear()
if _, err := v.Write(ui.printProjectedBlock(i, x1-x0, y1-y0)); err != nil {
return err
}
@ -152,6 +160,7 @@ func (ui *UI) Layout(g *gocui.Gui) error {
}
v.BgColor = gocui.ColorBlack
}
v.Title = fmt.Sprintf("#%d", block.Height)
v.Clear()
if _, err := v.Write(ui.printBlock(i, x1-x0, y1-y0)); err != nil {
@ -166,6 +175,18 @@ func (ui *UI) Layout(g *gocui.Gui) error {
return nil
}
func (ui *UI) loading(g *gocui.Gui, x, y int) error {
v, err := g.SetView("loading", x/2-10, y/2-1, x/2+10, y/2+1)
if err != nil {
if err != gocui.ErrUnknownView {
return err
}
}
v.Clear()
fmt.Fprintf(v, "Loading blocks ...")
return nil
}
func (ui *UI) printProjectedBlock(n int, x, y int) []byte {
b := ui.state.projected[n]
return ProjectedBlock(b).Print(n, x, y)
@ -186,7 +207,7 @@ func (ui *UI) separator(g *gocui.Gui, x, y int, vertical bool) error {
y0, y1 = 0, y
}
v, err := g.SetView("separtor", x0, y0, x1, y1)
v, err := g.SetView("separator", x0, y0, x1, y1)
if err != nil {
if err != gocui.ErrUnknownView {
return err