refresh ticker

Former-commit-id: a946f0e254683a924c8e876eb095eb4dd33781f7 [formerly a946f0e254683a924c8e876eb095eb4dd33781f7 [formerly 693a6b1e91b6023d0bde19bdeb3df2dde201f254 [formerly 565a964e08]]]
Former-commit-id: 63620dc477d87bf1fffb4951448b17ca358fa3ae
Former-commit-id: daf3e1a45ce4fd3f8c673640eb56900a1b6420e3 [formerly 49502ddf6142e592971119e2355736b76558eb8b]
Former-commit-id: 413312a0eab8246dd25fa3fbc4d6c52efea00c9d
pull/15/head
Miguel Mota 6 years ago
parent 404d94bd64
commit 5668a4e0c7

@ -2,6 +2,8 @@ package cointop
import ( import (
"log" "log"
"sync"
"time"
"github.com/gizak/termui" "github.com/gizak/termui"
"github.com/jroimartin/gocui" "github.com/jroimartin/gocui"
@ -21,18 +23,21 @@ var (
// Cointop cointop // Cointop cointop
type Cointop struct { type Cointop struct {
g *gocui.Gui g *gocui.Gui
marketview *gocui.View marketview *gocui.View
chartview *gocui.View chartview *gocui.View
chartpoints [][]termui.Cell chartpoints [][]termui.Cell
headersview *gocui.View headersview *gocui.View
tableview *gocui.View tableview *gocui.View
table *table.Table table *table.Table
statusview *gocui.View statusview *gocui.View
sortdesc bool sortdesc bool
sortby string sortby string
api api.Interface api api.Interface
coins []*apitypes.Coin coins []*apitypes.Coin
coinsmap map[string]apitypes.Coin
refreshmux sync.Mutex
refreshticker *time.Ticker
} }
// Run runs cointop // Run runs cointop
@ -46,10 +51,9 @@ func Run() {
g.Mouse = true g.Mouse = true
g.Highlight = true g.Highlight = true
ct := Cointop{ ct := Cointop{
g: g, g: g,
api: api.NewCMC(), api: api.NewCMC(),
sortdesc: true, refreshticker: time.NewTicker(1 * time.Minute),
sortby: "rank",
} }
g.SetManagerFunc(ct.layout) g.SetManagerFunc(ct.layout)
if err := ct.keybindings(g); err != nil { if err := ct.keybindings(g); err != nil {

@ -1,8 +1,6 @@
package cointop package cointop
import ( import (
"time"
"github.com/jroimartin/gocui" "github.com/jroimartin/gocui"
apitypes "github.com/miguelmota/cointop/pkg/api/types" apitypes "github.com/miguelmota/cointop/pkg/api/types"
"github.com/miguelmota/cointop/pkg/pad" "github.com/miguelmota/cointop/pkg/pad"
@ -78,6 +76,8 @@ func (ct *Cointop) layout(g *gocui.Gui) error {
ct.tableview.SelBgColor = gocui.ColorCyan ct.tableview.SelBgColor = gocui.ColorCyan
ct.tableview.SelFgColor = gocui.ColorBlack ct.tableview.SelFgColor = gocui.ColorBlack
ct.updateTable() ct.updateTable()
ct.sort("rank", false)
ct.rowChanged()
} }
if v, err := g.SetView("status", 0, maxY-2, maxX, maxY); err != nil { if v, err := g.SetView("status", 0, maxY-2, maxX, maxY); err != nil {
@ -91,38 +91,39 @@ func (ct *Cointop) layout(g *gocui.Gui) error {
ct.updateStatus("") ct.updateStatus("")
} }
//ct.intervalFetchData() ct.intervalFetchData()
return nil return nil
} }
func (ct *Cointop) updateTable() error { func (ct *Cointop) updateTable() error {
result := []*apitypes.Coin{} list := []*apitypes.Coin{}
coins, err := ct.api.GetAllCoinData() coinsmap, err := ct.api.GetAllCoinData()
if err != nil { if err != nil {
return err return err
} }
for i := range coins { ct.coinsmap = coinsmap
coin := coins[i] for i := range ct.coinsmap {
result = append(result, &coin) coin := ct.coinsmap[i]
list = append(list, &coin)
} }
ct.coins = result ct.coins = list
ct.sort(ct.sortby, ct.sortdesc) ct.sort(ct.sortby, ct.sortdesc)
ct.refreshTable() ct.refreshTable()
ct.rowChanged()
return nil return nil
} }
func (ct *Cointop) intervalFetchData() { func (ct *Cointop) intervalFetchData() {
ticker := time.NewTicker(5 * time.Second)
go func() { go func() {
for { for {
select { select {
case <-ticker.C: case <-ct.refreshticker.C:
ct.refreshmux.Lock()
ct.updateTable() ct.updateTable()
//ct.updateMarket() ct.updateMarket()
//ct.updateChart() ct.updateChart()
ct.refreshmux.Unlock()
} }
} }
}() }()

@ -6,12 +6,8 @@ import (
) )
func (ct *Cointop) sort(sortby string, desc bool) { func (ct *Cointop) sort(sortby string, desc bool) {
if ct.sortby == sortby { ct.sortby = sortby
ct.sortdesc = !ct.sortdesc ct.sortdesc = desc
} else {
ct.sortby = sortby
ct.sortdesc = desc
}
slice.Sort(ct.coins[:], func(i, j int) bool { slice.Sort(ct.coins[:], func(i, j int) bool {
if ct.sortdesc { if ct.sortdesc {
i, j = j, i i, j = j, i
@ -51,6 +47,10 @@ func (ct *Cointop) sort(sortby string, desc bool) {
func (ct *Cointop) sortfn(sortby string, desc bool) func(g *gocui.Gui, v *gocui.View) error { func (ct *Cointop) sortfn(sortby string, desc bool) func(g *gocui.Gui, v *gocui.View) error {
return func(g *gocui.Gui, v *gocui.View) error { return func(g *gocui.Gui, v *gocui.View) error {
if ct.sortby == sortby {
desc = !desc
}
ct.sort(sortby, desc) ct.sort(sortby, desc)
ct.g.Update(func(g *gocui.Gui) error { ct.g.Update(func(g *gocui.Gui) error {
ct.tableview.Clear() ct.tableview.Clear()

@ -7,13 +7,13 @@ import (
"time" "time"
humanize "github.com/dustin/go-humanize" humanize "github.com/dustin/go-humanize"
"github.com/jroimartin/gocui"
apitypes "github.com/miguelmota/cointop/pkg/api/types" apitypes "github.com/miguelmota/cointop/pkg/api/types"
"github.com/miguelmota/cointop/pkg/color" "github.com/miguelmota/cointop/pkg/color"
"github.com/miguelmota/cointop/pkg/table" "github.com/miguelmota/cointop/pkg/table"
) )
func (ct *Cointop) refreshTable() error { func (ct *Cointop) refreshTable() error {
ct.tableview.Clear()
maxX, _ := ct.g.Size() maxX, _ := ct.g.Size()
ct.table = table.New().SetWidth(maxX) ct.table = table.New().SetWidth(maxX)
ct.table.AddCol("") ct.table.AddCol("")
@ -77,7 +77,12 @@ func (ct *Cointop) refreshTable() error {
) )
} }
ct.table.Format().Fprint(ct.tableview) ct.g.Update(func(g *gocui.Gui) error {
ct.tableview.Clear()
ct.table.Format().Fprint(ct.tableview)
return nil
})
return nil return nil
} }

Loading…
Cancel
Save