add toggle coin chart key

Former-commit-id: 79c0c96419b4dba0c000cb7a38cf2d3b51a5e616 [formerly 79c0c96419b4dba0c000cb7a38cf2d3b51a5e616 [formerly 096a79aa28948dd4b93f1a598520a8331c9fd814 [formerly d1a02645b8]]]
Former-commit-id: 04989d70e466e3d550a5f59a1ab5aff3145cd5e9
Former-commit-id: 06c7b2de2659216d22031203440294a1ee224872 [formerly dee75777e06f0fc97b2b306c3ee701f280edcf29]
Former-commit-id: 403f6aa8c2a6de3436f8c3ba9da594bc4cf94a42
pull/15/head
Miguel Mota 6 years ago
parent 4f17e84e65
commit 096a21f62e

@ -19,7 +19,6 @@
- Advanced search
- "Favorites" list
- Coin charts
- Currency conversion (i.e. Euro, Yen)
- Markets/Exchanges
- CryptoCompare API
@ -88,6 +87,7 @@ Key|Action
<kbd>2</kbd>|Sort table by *[2]4 hour change*
<kbd>7</kbd>|Sort table by *[7] day change*
<kbd>a</kbd>|Sort table by *[a]vailable supply*
<kbd>c</kbd>|Toggle [c]hart for highlighted coin
<kbd>g</kbd>|Go to first line of page (vim style)
<kbd>G</kbd>|Go to last line of page (vim style)
<kbd>h</kbd>|Go to previous page (vim style)

@ -2,18 +2,17 @@ package cointop
import (
"fmt"
"log"
"time"
"github.com/gizak/termui"
"github.com/jroimartin/gocui"
"github.com/miguelmota/cointop/pkg/color"
)
func (ct *Cointop) updateChart() error {
maxX := ct.Width()
if len(ct.chartpoints) == 0 {
ct.chartPoints(maxX, "bitcoin")
}
coin := ct.selectedCoinName()
ct.chartPoints(maxX, coin)
for i := range ct.chartpoints {
var s string
@ -38,23 +37,25 @@ func (ct *Cointop) chartPoints(maxX int, coin string) error {
start := secs - oneWeek
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
}
var data []float64
/*
if coin == "" {
graphData, err := ct.api.GetGlobalMarketGraphData(start, end)
if err != nil {
return nil
}
for i := range graphData.MarketCapByAvailableSupply {
data = append(data, graphData.MarketCapByAvailableSupply[i][1]/1E9)
}
} else {
graphData, err := ct.api.GetCoinGraphData(coin, start, end)
if err != nil {
return nil
}
for i := range graphData.PriceUSD {
data = append(data, graphData.PriceUSD[i][1])
}
*/
for i := range graphData.MarketCapByAvailableSupply {
data = append(data, graphData.MarketCapByAvailableSupply[i][1]/1E9)
}
chart.Data = data
termui.Body = termui.NewGrid()
termui.Body.Width = maxX
@ -83,3 +84,27 @@ func (ct *Cointop) chartPoints(maxX int, coin string) error {
ct.chartpoints = points
return nil
}
func (ct *Cointop) selectedCoinName() string {
coin := ct.selectedcoin
if coin != nil {
return coin.Name
}
return ""
}
func (ct *Cointop) toggleCoinChart(g *gocui.Gui, v *gocui.View) error {
highlightedcoin := ct.highlightedRowCoin()
if ct.selectedcoin == highlightedcoin {
ct.selectedcoin = nil
} else {
ct.selectedcoin = highlightedcoin
}
ct.Update(func() {
ct.chartview.Clear()
ct.updateMarketbar()
ct.updateChart()
})
return nil
}

@ -42,6 +42,7 @@ type Cointop struct {
refreshmux sync.Mutex
refreshticker *time.Ticker
forcerefresh chan bool
selectedcoin *apt.Coin
}
// Run runs cointop

@ -34,6 +34,7 @@ func (ct *Cointop) keybindings(g *gocui.Gui) error {
ct.setKeybinding('2', ct.sortfn("24hchange", true))
ct.setKeybinding('7', ct.sortfn("7dchange", true))
ct.setKeybinding('a', ct.sortfn("availablesupply", true))
ct.setKeybinding('c', ct.toggleCoinChart)
ct.setKeybinding('g', ct.navigateFirstLine)
ct.setKeybinding('G', ct.navigateLastLine)
ct.setKeybinding('h', ct.prevPage)

@ -15,25 +15,28 @@ func (ct *Cointop) updateMarketbar() error {
return err
}
timeframe := "7 Day"
chartname := ct.selectedCoinName()
if chartname == "" {
chartname = "Global"
}
ct.Update(func() {
ct.marketview.Clear()
fmt.Fprintln(
ct.marketview,
color.White(
pad.Right(
fmt.Sprintf(
"%s Chart: %s • Total Market Cap: %s • 24H Volume: %s • BTC Dominance: %.2f%% • Active Currencies: %s • Active Markets: %s",
color.Cyan("cointop"),
timeframe,
humanize.Commaf(market.TotalMarketCapUSD),
humanize.Commaf(market.Total24HVolumeUSD),
market.BitcoinPercentageOfMarketCap,
humanize.Commaf(float64(market.ActiveCurrencies)),
humanize.Commaf(float64(market.ActiveMarkets)),
),
maxX,
" ",
pad.Right(
fmt.Sprintf(
"%s [ Chart: %s %s ] Global ▶ Market Cap: %s • 24H Volume: %s • BTC Dominance: %.2f%% • Active Currencies: %s • Active Markets: %s",
fmt.Sprintf("%s%s%s%s", color.Green(""), color.Cyan(""), color.Green(""), color.Cyan("cointop")),
color.Cyan(chartname),
timeframe,
humanize.Commaf(market.TotalMarketCapUSD),
humanize.Commaf(market.Total24HVolumeUSD),
market.BitcoinPercentageOfMarketCap,
humanize.Commaf(float64(market.ActiveCurrencies)),
humanize.Commaf(float64(market.ActiveMarkets)),
),
maxX,
" ",
),
)
})

@ -12,7 +12,8 @@ func (ct *Cointop) updateStatusbar(s string) {
ct.statusbarview.Clear()
currpage := ct.getCurrentPage()
totalpages := ct.getTotalPages()
fmt.Fprintln(ct.statusbarview, pad.Right(fmt.Sprintf("[q]uit [?]help [← →]page %v/%v %s", currpage, totalpages, s), maxX, " "))
base := "[q]uit [?]help [c]hart"
fmt.Fprintln(ct.statusbarview, pad.Right(fmt.Sprintf("%v [← →]page %v/%v %s", base, currpage, totalpages, s), maxX, " "))
})
}

@ -86,7 +86,7 @@ func (ct *Cointop) refreshTable() error {
return nil
}
func (ct *Cointop) selectedRowIndex() int {
func (ct *Cointop) highlightedRowIndex() int {
_, y := ct.tableview.Origin()
_, cy := ct.tableview.Cursor()
idx := y + cy
@ -99,13 +99,13 @@ func (ct *Cointop) selectedRowIndex() int {
return idx
}
func (ct *Cointop) selectedCoin() *apt.Coin {
idx := ct.selectedRowIndex()
func (ct *Cointop) highlightedRowCoin() *apt.Coin {
idx := ct.highlightedRowIndex()
return ct.coins[idx]
}
func (ct *Cointop) rowLink() string {
slug := strings.ToLower(strings.Replace(ct.selectedCoin().Name, " ", "-", -1))
slug := strings.ToLower(strings.Replace(ct.highlightedRowCoin().Name, " ", "-", -1))
return fmt.Sprintf("https://coinmarketcap.com/currencies/%s", slug)
}

@ -1,6 +1,8 @@
package api
import (
"strings"
types "github.com/miguelmota/cointop/pkg/api/types"
cmc "github.com/miguelmota/go-coinmarketcap"
)
@ -45,7 +47,7 @@ func (s *Service) GetAllCoinData() (map[string]types.Coin, error) {
// GetCoinGraphData gets coin graph data
func (s *Service) GetCoinGraphData(coin string, start int64, end int64) (types.CoinGraph, error) {
ret := types.CoinGraph{}
graphData, err := cmc.GetCoinGraphData(coin, start, end)
graphData, err := cmc.GetCoinGraphData(strings.ToLower(coin), start, end)
if err != nil {
return ret, err
}

@ -8,15 +8,19 @@ var (
// White color
White = color.New(color.FgWhite).SprintFunc()
// WhiteBold bold
WhiteBold = color.New(color.FgWhite & color.Bold).SprintFunc()
WhiteBold = color.New(color.FgWhite, color.Bold).SprintFunc()
// Green color
Green = color.New(color.FgGreen).SprintFunc()
// GreenBg color
GreenBg = color.New(color.BgGreen, color.FgBlack).SprintFunc()
// Red color
Red = color.New(color.FgRed).SprintFunc()
// Cyan color
Cyan = color.New(color.FgCyan).SprintFunc()
// CyanBg color
CyanBg = color.New(color.BgCyan).SprintFunc()
CyanBg = color.New(color.BgCyan, color.FgBlack).SprintFunc()
// Blue color
Blue = color.New(color.FgBlue).SprintFunc()
// BlueBg color
BlueBg = color.New(color.BgBlue).SprintFunc()
)

Loading…
Cancel
Save