From 381c9ea8cc0a10fea313946ff747af083f3216c2 Mon Sep 17 00:00:00 2001 From: Miguel Mota Date: Fri, 30 Mar 2018 12:14:28 -0700 Subject: [PATCH] organize --- cointop.go | 252 ++++++++++++++++++++++++++--------------------------- 1 file changed, 126 insertions(+), 126 deletions(-) diff --git a/cointop.go b/cointop.go index 57fc705..bbcd822 100644 --- a/cointop.go +++ b/cointop.go @@ -40,93 +40,66 @@ type Cointop struct { coins []*apitypes.Coin } -func main() { - g, err := gocui.NewGui(gocui.Output256) - if err != nil { - log.Fatalf("new gocui: %v", err) - } - defer g.Close() - g.Cursor = true - g.Mouse = true - g.Highlight = true - - ct := Cointop{ - g: g, - api: apis.NewCMC(), - } - g.SetManagerFunc(ct.layout) - - if err := ct.keybindings(g); err != nil { - log.Fatalf("keybindings: %v", err) - } +func (ct *Cointop) layout(g *gocui.Gui) error { + maxX, maxY := g.Size() - if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { - log.Fatalf("main loop: %v", err) + chartHeight := 10 + if v, err := g.SetView("chart", 0, 0, maxX, chartHeight); err != nil { + if err != gocui.ErrUnknownView { + return err + } + ct.chartview = v + ct.chartview.Frame = false + ct.updateChart() } -} - -func (ct *Cointop) chartPoints(maxX int, coin string) error { - chart := termui.NewLineChart() - chart.Height = 10 - chart.AxesColor = termui.ColorWhite - chart.LineColor = termui.ColorCyan - chart.Border = false - now := time.Now() - secs := now.Unix() - start := secs - oneDay - end := secs - - _ = coin - //graphData, err := cmc.GetCoinGraphData(coin, start, end) - graphData, err := ct.api.GetGlobalMarketGraphData(start, end) - if err != nil { - log.Fatal(err) - return nil - } + if v, err := g.SetView("header", 0, chartHeight, maxX, maxY); err != nil { + if err != gocui.ErrUnknownView { + return err + } + t := table.New().SetWidth(maxX) - var data []float64 - /* - for i := range graphData.PriceUSD { - data = append(data, graphData.PriceUSD[i][1]) + headers := []string{ + pad.Right("[r]ank", 13, " "), + pad.Right("[n]ame", 13, " "), + pad.Right("[s]ymbol", 8, " "), + pad.Left("[p]rice", 10, " "), + pad.Left("[m]arket cap", 17, " "), + pad.Left("24H [v]olume", 15, " "), + pad.Left("[1]H%", 9, " "), + pad.Left("[2]4H%", 9, " "), + pad.Left("[7]D%", 9, " "), + pad.Left("[t]otal supply", 20, " "), + pad.Left("[a]vailable supply", 19, " "), + pad.Left("[l]ast updated", 17, " "), } - */ - for i := range graphData.MarketCapByAvailableSupply { - data = append(data, graphData.MarketCapByAvailableSupply[i][1]) + for _, h := range headers { + t.AddCol(h) + } + + t.Format().Fprint(v) + ct.headersview = v + ct.headersview.Highlight = true + ct.headersview.SelBgColor = gocui.ColorGreen + ct.headersview.SelFgColor = gocui.ColorBlack + ct.headersview.Frame = false } - chart.Data = data - termui.Body = termui.NewGrid() - termui.Body.Width = maxX - termui.Body.AddRows( - termui.NewRow( - termui.NewCol(12, 0, chart), - ), - ) - var points [][]termui.Cell - // calculate layout - termui.Body.Align() - w := termui.Body.Width - h := 10 - row := termui.Body.Rows[0] - b := row.Buffer() - for i := 0; i < h; i = i + 1 { - var rowpoints []termui.Cell - for j := 0; j < w; j = j + 1 { - p := b.At(j, i) - rowpoints = append(rowpoints, p) + if v, err := g.SetView("table", 0, chartHeight+1, maxX, maxY); err != nil { + if err != gocui.ErrUnknownView { + return err } - points = append(points, rowpoints) + ct.tableview = v + ct.tableview.Highlight = true + ct.tableview.SelBgColor = gocui.ColorCyan + ct.tableview.SelFgColor = gocui.ColorBlack + ct.tableview.Frame = false + ct.updateTable() } - ct.chartpoints = points return nil } -func (ct *Cointop) quit(g *gocui.Gui, v *gocui.View) error { - return gocui.ErrQuit -} - func (ct *Cointop) keybindings(g *gocui.Gui) error { if err := g.SetKeybinding("", gocui.KeyArrowDown, gocui.ModNone, ct.cursorDown); err != nil { return err @@ -239,7 +212,7 @@ func (ct *Cointop) sort(sortby string, desc bool) func(g *gocui.Gui, v *gocui.Vi }) g.Update(func(g *gocui.Gui) error { ct.tableview.Clear() - ct.setTable() + ct.updateTable() return nil }) /* @@ -249,7 +222,7 @@ func (ct *Cointop) sort(sortby string, desc bool) func(g *gocui.Gui, v *gocui.Vi _, cy := ct.chartview.Cursor() coin := "ethereum" ct.chartPoints(maxX, coin) - ct.setChart() + ct.updateChart() fmt.Fprint(ct.chartview, cy) return nil }) @@ -352,67 +325,65 @@ func (ct *Cointop) fetchData() ([]*apitypes.Coin, error) { return result, nil } -func (ct *Cointop) layout(g *gocui.Gui) error { - maxX, maxY := g.Size() +func (ct *Cointop) chartPoints(maxX int, coin string) error { + chart := termui.NewLineChart() + chart.Height = 10 + chart.AxesColor = termui.ColorWhite + chart.LineColor = termui.ColorCyan + chart.Border = false - chartHeight := 10 - if v, err := g.SetView("chart", 0, 0, maxX, chartHeight); err != nil { - if err != gocui.ErrUnknownView { - return err - } - ct.chartview = v - ct.chartview.Frame = false - ct.setChart() - } + now := time.Now() + secs := now.Unix() + start := secs - oneDay + end := secs - if v, err := g.SetView("header", 0, chartHeight, maxX, maxY); err != nil { - if err != gocui.ErrUnknownView { - return err - } - t := table.New().SetWidth(maxX) + _ = coin + //graphData, err := cmc.GetCoinGraphData(coin, start, end) + graphData, err := ct.api.GetGlobalMarketGraphData(start, end) + if err != nil { + log.Fatal(err) + return nil + } - headers := []string{ - pad.Right("[r]ank", 13, " "), - pad.Right("[n]ame", 13, " "), - pad.Right("[s]ymbol", 8, " "), - pad.Left("[p]rice", 10, " "), - pad.Left("[m]arket cap", 17, " "), - pad.Left("24H [v]olume", 15, " "), - pad.Left("[1]H%", 9, " "), - pad.Left("[2]4H%", 9, " "), - pad.Left("[7]D%", 9, " "), - pad.Left("[t]otal supply", 20, " "), - pad.Left("[a]vailable supply", 19, " "), - pad.Left("[l]ast updated", 17, " "), - } - for _, h := range headers { - t.AddCol(h) + var data []float64 + /* + for i := range graphData.PriceUSD { + data = append(data, graphData.PriceUSD[i][1]) } - - t.Format().Fprint(v) - ct.headersview = v - ct.headersview.Highlight = true - ct.headersview.SelBgColor = gocui.ColorGreen - ct.headersview.SelFgColor = gocui.ColorBlack - ct.headersview.Frame = false + */ + for i := range graphData.MarketCapByAvailableSupply { + data = append(data, graphData.MarketCapByAvailableSupply[i][1]) } + chart.Data = data + termui.Body = termui.NewGrid() + termui.Body.Width = maxX + termui.Body.AddRows( + termui.NewRow( + termui.NewCol(12, 0, chart), + ), + ) - if v, err := g.SetView("table", 0, chartHeight+1, maxX, maxY); err != nil { - if err != gocui.ErrUnknownView { - return err + var points [][]termui.Cell + // calculate layout + termui.Body.Align() + w := termui.Body.Width + h := 10 + row := termui.Body.Rows[0] + b := row.Buffer() + for i := 0; i < h; i = i + 1 { + var rowpoints []termui.Cell + for j := 0; j < w; j = j + 1 { + p := b.At(j, i) + rowpoints = append(rowpoints, p) } - ct.tableview = v - ct.tableview.Highlight = true - ct.tableview.SelBgColor = gocui.ColorCyan - ct.tableview.SelFgColor = gocui.ColorBlack - ct.tableview.Frame = false - ct.setTable() + points = append(points, rowpoints) } + ct.chartpoints = points return nil } -func (ct *Cointop) setChart() error { +func (ct *Cointop) updateChart() error { maxX, _ := ct.g.Size() if len(ct.chartpoints) == 0 { ct.chartPoints(maxX, "bitcoin") @@ -429,7 +400,7 @@ func (ct *Cointop) setChart() error { return nil } -func (ct *Cointop) setTable() error { +func (ct *Cointop) updateTable() error { maxX, _ := ct.g.Size() ct.table = table.New().SetWidth(maxX) ct.table.AddCol("") @@ -497,3 +468,32 @@ func (ct *Cointop) setTable() error { ct.table.Format().Fprint(ct.tableview) return nil } + +func (ct *Cointop) quit(g *gocui.Gui, v *gocui.View) error { + return gocui.ErrQuit +} + +func main() { + g, err := gocui.NewGui(gocui.Output256) + if err != nil { + log.Fatalf("new gocui: %v", err) + } + defer g.Close() + g.Cursor = true + g.Mouse = true + g.Highlight = true + + ct := Cointop{ + g: g, + api: apis.NewCMC(), + } + g.SetManagerFunc(ct.layout) + + if err := ct.keybindings(g); err != nil { + log.Fatalf("keybindings: %v", err) + } + + if err := g.MainLoop(); err != nil && err != gocui.ErrQuit { + log.Fatalf("main loop: %v", err) + } +}