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.
99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
7 years ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"time"
|
||
|
|
||
|
humanize "github.com/dustin/go-humanize"
|
||
|
apitypes "github.com/miguelmota/cointop/pkg/api/types"
|
||
|
"github.com/miguelmota/cointop/pkg/color"
|
||
|
"github.com/miguelmota/cointop/pkg/pad"
|
||
|
"github.com/miguelmota/cointop/pkg/table"
|
||
|
)
|
||
|
|
||
|
func (ct *Cointop) updateTable() error {
|
||
|
maxX, _ := ct.g.Size()
|
||
|
ct.table = table.New().SetWidth(maxX)
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.AddCol("")
|
||
|
ct.table.HideColumHeaders = true
|
||
|
var err error
|
||
|
if len(ct.coins) == 0 {
|
||
|
ct.coins, err = ct.fetchData()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
for _, coin := range ct.coins {
|
||
|
unix, _ := strconv.ParseInt(coin.LastUpdated, 10, 64)
|
||
|
lastUpdated := time.Unix(unix, 0).Format("15:04:05 Jan 02")
|
||
|
colorprice := color.Cyan
|
||
|
color1h := color.White
|
||
|
color24h := color.White
|
||
|
color7d := color.White
|
||
|
if coin.PercentChange1H > 0 {
|
||
|
color1h = color.Green
|
||
|
}
|
||
|
if coin.PercentChange1H < 0 {
|
||
|
color1h = color.Red
|
||
|
}
|
||
|
if coin.PercentChange24H > 0 {
|
||
|
color24h = color.Green
|
||
|
}
|
||
|
if coin.PercentChange24H < 0 {
|
||
|
color24h = color.Red
|
||
|
}
|
||
|
if coin.PercentChange7D > 0 {
|
||
|
color7d = color.Green
|
||
|
}
|
||
|
if coin.PercentChange7D < 0 {
|
||
|
color7d = color.Red
|
||
|
}
|
||
|
ct.table.AddRow(
|
||
|
pad.Left(fmt.Sprint(coin.Rank), 4, " "),
|
||
|
pad.Right(coin.Name, 22, " "),
|
||
|
pad.Right(coin.Symbol, 6, " "),
|
||
|
colorprice(pad.Left(humanize.Commaf(coin.PriceUSD), 12, " ")),
|
||
|
pad.Left(humanize.Commaf(coin.MarketCapUSD), 17, " "),
|
||
|
pad.Left(humanize.Commaf(coin.USD24HVolume), 15, " "),
|
||
|
color1h(pad.Left(fmt.Sprintf("%.2f%%", coin.PercentChange1H), 9, " ")),
|
||
|
color24h(pad.Left(fmt.Sprintf("%.2f%%", coin.PercentChange24H), 9, " ")),
|
||
|
color7d(pad.Left(fmt.Sprintf("%.2f%%", coin.PercentChange7D), 9, " ")),
|
||
|
pad.Left(humanize.Commaf(coin.TotalSupply), 20, " "),
|
||
|
pad.Left(humanize.Commaf(coin.AvailableSupply), 18, " "),
|
||
|
pad.Left(fmt.Sprintf("%s", lastUpdated), 18, " "),
|
||
|
// add %percent of cap
|
||
|
)
|
||
|
}
|
||
|
|
||
|
ct.table.Format().Fprint(ct.tableview)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (ct *Cointop) selectedRowIndex() int {
|
||
|
_, y := ct.tableview.Origin()
|
||
|
_, cy := ct.tableview.Cursor()
|
||
|
return y + cy
|
||
|
}
|
||
|
|
||
|
func (ct *Cointop) selectedCoin() *apitypes.Coin {
|
||
|
return ct.coins[ct.selectedRowIndex()]
|
||
|
}
|
||
|
|
||
|
func (ct *Cointop) rowLink() string {
|
||
|
slug := strings.ToLower(strings.Replace(ct.selectedCoin().Name, " ", "-", -1))
|
||
|
return fmt.Sprintf("https://coinmarketcap.com/currencies/%s", slug)
|
||
|
}
|