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.
cointop/cointop/sort.go

119 lines
2.4 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]
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
}