mirror of https://github.com/miguelmota/cointop
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.5 KiB
Go
125 lines
2.5 KiB
Go
package cointop
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/jroimartin/gocui"
|
|
)
|
|
|
|
func (ct *Cointop) sort(sortby string, desc bool, list []*coin) {
|
|
ct.sortby = sortby
|
|
ct.sortdesc = desc
|
|
sort.Slice(list[:], func(i, j int) bool {
|
|
if ct.sortdesc {
|
|
i, j = j, i
|
|
}
|
|
a := list[i]
|
|
b := list[j]
|
|
if a == nil {
|
|
return true
|
|
}
|
|
if b == nil {
|
|
return false
|
|
}
|
|
switch sortby {
|
|
case "rank":
|
|
return a.Rank < b.Rank
|
|
case "name":
|
|
return a.Name < b.Name
|
|
case "symbol":
|
|
return a.Symbol < b.Symbol
|
|
case "price":
|
|
return a.Price < b.Price
|
|
case "holdings":
|
|
return a.Holdings < b.Holdings
|
|
case "balance":
|
|
return a.Balance < b.Balance
|
|
case "marketcap":
|
|
return a.MarketCap < b.MarketCap
|
|
case "24hvolume":
|
|
return a.Volume24H < b.Volume24H
|
|
case "1hchange":
|
|
return a.PercentChange1H < b.PercentChange1H
|
|
case "24hchange":
|
|
return a.PercentChange24H < b.PercentChange24H
|
|
case "7dchange":
|
|
return a.PercentChange7D < b.PercentChange7D
|
|
case "totalsupply":
|
|
return a.TotalSupply < b.TotalSupply
|
|
case "availablesupply":
|
|
return a.AvailableSupply < b.AvailableSupply
|
|
case "lastupdated":
|
|
return a.LastUpdated < b.LastUpdated
|
|
default:
|
|
return a.Rank < b.Rank
|
|
}
|
|
})
|
|
ct.updateHeaders()
|
|
}
|
|
|
|
func (ct *Cointop) sortToggle(sortby string, desc bool) error {
|
|
if ct.sortby == sortby {
|
|
desc = !ct.sortdesc
|
|
}
|
|
|
|
ct.sort(sortby, desc, ct.coins)
|
|
ct.updateTable()
|
|
return nil
|
|
}
|
|
|
|
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 ct.sortToggle(sortby, desc)
|
|
}
|
|
}
|
|
|
|
func (ct *Cointop) getSortColIndex() int {
|
|
for i, col := range ct.tablecolumnorder {
|
|
if ct.sortby == col {
|
|
return i
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (ct *Cointop) sortAsc() error {
|
|
ct.sortdesc = false
|
|
ct.sort(ct.sortby, ct.sortdesc, ct.coins)
|
|
ct.updateTable()
|
|
return nil
|
|
}
|
|
|
|
func (ct *Cointop) sortDesc() error {
|
|
ct.sortdesc = true
|
|
ct.sort(ct.sortby, ct.sortdesc, ct.coins)
|
|
ct.updateTable()
|
|
return nil
|
|
}
|
|
|
|
func (ct *Cointop) sortPrevCol() error {
|
|
nextsortby := ct.tablecolumnorder[0]
|
|
i := ct.getSortColIndex()
|
|
k := i - 1
|
|
if k < 0 {
|
|
k = 0
|
|
}
|
|
nextsortby = ct.tablecolumnorder[k]
|
|
ct.sort(nextsortby, ct.sortdesc, ct.coins)
|
|
ct.updateTable()
|
|
return nil
|
|
}
|
|
|
|
func (ct *Cointop) sortNextCol() error {
|
|
nextsortby := ct.tablecolumnorder[0]
|
|
l := len(ct.tablecolumnorder)
|
|
i := ct.getSortColIndex()
|
|
k := i + 1
|
|
if k > l-1 {
|
|
k = l - 1
|
|
}
|
|
nextsortby = ct.tablecolumnorder[k]
|
|
ct.sort(nextsortby, ct.sortdesc, ct.coins)
|
|
ct.updateTable()
|
|
return nil
|
|
}
|