pull/15/head
Miguel Mota 6 years ago
parent ee294d8c68
commit 6be9c49a11

@ -3,6 +3,7 @@ package cointop
import (
"fmt"
"strings"
"sync"
"time"
"github.com/miguelmota/cointop/pkg/color"
@ -11,7 +12,12 @@ import (
"github.com/miguelmota/cointop/pkg/termui"
)
var chartlock sync.Mutex
var chartpointslock sync.Mutex
func (ct *Cointop) updateChart() error {
chartlock.Lock()
defer chartlock.Unlock()
maxX := ct.maxtablewidth - 3
coin := ct.selectedCoinSymbol()
ct.chartPoints(maxX, coin)
@ -36,6 +42,8 @@ func (ct *Cointop) updateChart() error {
}
func (ct *Cointop) chartPoints(maxX int, coin string) error {
chartpointslock.Lock()
defer chartpointslock.Unlock()
// TODO: not do this (SOC)
go ct.updateMarketbar()

@ -1,13 +1,18 @@
package cointop
import (
"sync"
"time"
types "github.com/miguelmota/cointop/pkg/api/types"
"github.com/miguelmota/cointop/pkg/fcache"
)
var coinslock sync.Mutex
func (ct *Cointop) updateCoins() error {
coinslock.Lock()
defer coinslock.Unlock()
list := []*coin{}
cachekey := "allcoinsmap"
@ -43,10 +48,9 @@ func (ct *Cointop) updateCoins() error {
Name: v.Name,
Symbol: v.Symbol,
Rank: v.Rank,
PriceUSD: v.PriceUSD,
PriceBTC: v.PriceBTC,
USD24HVolume: v.USD24HVolume,
MarketCapUSD: v.MarketCapUSD,
Price: v.Price,
Volume24H: v.Volume24H,
MarketCap: v.MarketCap,
AvailableSupply: v.AvailableSupply,
TotalSupply: v.TotalSupply,
PercentChange1H: v.PercentChange1H,
@ -77,10 +81,9 @@ func (ct *Cointop) updateCoins() error {
c.Name = cm.Name
c.Symbol = cm.Symbol
c.Rank = cm.Rank
c.PriceUSD = cm.PriceUSD
c.PriceBTC = cm.PriceBTC
c.USD24HVolume = cm.USD24HVolume
c.MarketCapUSD = cm.MarketCapUSD
c.Price = cm.Price
c.Volume24H = cm.Volume24H
c.MarketCap = cm.MarketCap
c.AvailableSupply = cm.AvailableSupply
c.TotalSupply = cm.TotalSupply
c.PercentChange1H = cm.PercentChange1H

@ -48,7 +48,7 @@ func (ct *Cointop) updateMarketbar() error {
ct.marketbarview,
pad.Right(
fmt.Sprintf(
"%s [ Chart: %s %s ] Global ▶ Market Cap: %s • 24H Volume: %s • BTC Dominance: %.2f%% • Active Currencies: %s • Active Markets: %s",
"%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,

@ -23,11 +23,11 @@ func (ct *Cointop) sort(sortby string, desc bool, list []*coin) {
case "symbol":
return a.Symbol < b.Symbol
case "price":
return a.PriceUSD < b.PriceUSD
return a.Price < b.Price
case "marketcap":
return a.MarketCapUSD < b.MarketCapUSD
return a.MarketCap < b.MarketCap
case "24hvolume":
return a.USD24HVolume < b.USD24HVolume
return a.Volume24H < b.Volume24H
case "1hchange":
return a.PercentChange1H < b.PercentChange1H
case "24hchange":

@ -71,9 +71,9 @@ func (ct *Cointop) refreshTable() error {
rank,
namecolor(fmt.Sprintf("%.22s", name)),
color.White(fmt.Sprintf("%.6s", coin.Symbol)),
colorprice(fmt.Sprintf("%12s", humanize.Commaf(coin.PriceUSD))),
color.White(fmt.Sprintf("%17s", humanize.Commaf(coin.MarketCapUSD))),
color.White(fmt.Sprintf("%15s", humanize.Commaf(coin.USD24HVolume))),
colorprice(fmt.Sprintf("%12s", humanize.Commaf(coin.Price))),
color.White(fmt.Sprintf("%17s", humanize.Commaf(coin.MarketCap))),
color.White(fmt.Sprintf("%15s", humanize.Commaf(coin.Volume24H))),
color1h(fmt.Sprintf("%8.2f%%", coin.PercentChange1H)),
color24h(fmt.Sprintf("%8.2f%%", coin.PercentChange24H)),
color7d(fmt.Sprintf("%8.2f%%", coin.PercentChange7D)),

@ -5,10 +5,9 @@ type coin struct {
Name string
Symbol string
Rank int
PriceUSD float64
PriceBTC float64
USD24HVolume float64
MarketCapUSD float64
Price float64
Volume24H float64
MarketCap float64
AvailableSupply float64
TotalSupply float64
PercentChange1H float64

@ -1,10 +1,14 @@
package api
import (
cmc "github.com/miguelmota/cointop/pkg/api/cmc"
cmc "github.com/miguelmota/cointop/pkg/api/impl/coinmarketcap"
)
// NewCMC new CoinMarketCap api
// NewCMC new CoinMarketCap API
func NewCMC() Interface {
return cmc.New()
}
// NewCC new CryptoCompare API
func NewCC() {
}

@ -1,4 +1,4 @@
package api
package coinmarketcap
import (
"fmt"
@ -12,6 +12,7 @@ import (
// Service service
type Service struct {
lock sync.RWMutex
}
// New new service
@ -38,41 +39,18 @@ func getLimitedCoinData(convert string, offset int) (map[string]apitypes.Coin, e
Rank: v.Rank,
AvailableSupply: v.CirculatingSupply,
TotalSupply: v.TotalSupply,
MarketCapUSD: v.Quotes[convert].MarketCap,
PriceUSD: v.Quotes[convert].Price,
MarketCap: v.Quotes[convert].MarketCap,
Price: v.Quotes[convert].Price,
PercentChange1H: v.Quotes[convert].PercentChange1H,
PercentChange24H: v.Quotes[convert].PercentChange24H,
PercentChange7D: v.Quotes[convert].PercentChange7D,
USD24HVolume: v.Quotes[convert].Volume24H,
PriceBTC: 0,
Volume24H: v.Quotes[convert].Volume24H,
LastUpdated: strconv.Itoa(v.LastUpdated),
}
}
return ret, nil
}
// GetAllCoinDataV2 gets all coin data
// V1 is currently better for fetching all the coins at once
func (s *Service) GetAllCoinDataV2(convert string) (map[string]apitypes.Coin, error) {
var wg sync.WaitGroup
ret := make(map[string]apitypes.Coin)
for i := 0; i < 5; i++ {
wg.Add(1)
go func(j int) {
coins, err := getLimitedCoinData(convert, j)
if err != nil {
return
}
for k, v := range coins {
ret[k] = v
}
defer wg.Done()
}(i)
}
wg.Wait()
return ret, nil
}
// GetAllCoinData get all coin data
func (s *Service) GetAllCoinData(convert string) (map[string]apitypes.Coin, error) {
ret := make(map[string]apitypes.Coin)
@ -81,9 +59,11 @@ func (s *Service) GetAllCoinData(convert string) (map[string]apitypes.Coin, erro
return ret, err
}
for _, v := range coins {
priceraw := v.Quotes[convert].Price
pricestr := fmt.Sprintf("%.2f", priceraw)
price, _ := strconv.ParseFloat(pricestr, 64)
price := v.Quotes[convert].Price
if convert != "USD" {
pricestr := fmt.Sprintf("%.2f", price)
price, _ = strconv.ParseFloat(pricestr, 64)
}
ret[v.Symbol] = apitypes.Coin{
ID: strings.ToLower(v.Name),
Name: v.Name,
@ -91,19 +71,42 @@ func (s *Service) GetAllCoinData(convert string) (map[string]apitypes.Coin, erro
Rank: v.Rank,
AvailableSupply: v.AvailableSupply,
TotalSupply: v.TotalSupply,
MarketCapUSD: v.Quotes[convert].MarketCap,
PriceUSD: price,
MarketCap: v.Quotes[convert].MarketCap,
Price: price,
PercentChange1H: v.PercentChange1H,
PercentChange24H: v.PercentChange24H,
PercentChange7D: v.PercentChange7D,
USD24HVolume: v.Quotes[convert].Volume24H,
PriceBTC: 0,
Volume24H: v.Quotes[convert].Volume24H,
LastUpdated: strconv.Itoa(v.LastUpdated),
}
}
return ret, nil
}
// GetAllCoinDataV2 gets all coin data
// V1 is currently better for fetching all the coins at once
func (s *Service) GetAllCoinDataV2(convert string) (map[string]apitypes.Coin, error) {
var wg sync.WaitGroup
ret := make(map[string]apitypes.Coin)
for i := 0; i < 5; i++ {
wg.Add(1)
go func(j int) {
s.lock.RLock()
defer s.lock.RUnlock()
defer wg.Done()
coins, err := getLimitedCoinData(convert, j)
if err != nil {
return
}
for k, v := range coins {
ret[k] = v
}
}(i)
}
wg.Wait()
return ret, nil
}
// GetCoinGraphData gets coin graph data
func (s *Service) GetCoinGraphData(coin string, start int64, end int64) (apitypes.CoinGraph, error) {
ret := apitypes.CoinGraph{}

@ -0,0 +1,3 @@
package cryptocompare
// TODO

@ -1,4 +1,4 @@
package api
package types
// Coin struct
type Coin struct {
@ -6,10 +6,9 @@ type Coin struct {
Name string
Symbol string
Rank int
PriceUSD float64
PriceBTC float64
USD24HVolume float64
MarketCapUSD float64
Price float64
Volume24H float64
MarketCap float64
AvailableSupply float64
TotalSupply float64
PercentChange1H float64

Loading…
Cancel
Save