Feature/code cleanups (#191)

Lots of style/comment/redundancy cleanups. No functional change.
pull/194/head^2
Simon Roberts 3 years ago committed by GitHub
parent cfc93c92c6
commit 9824c409ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

5
.gitignore vendored

@ -47,9 +47,6 @@ wasm
.config .config
.bz2 .bz2
# flatpak
.flatpak-builder
build-dir
#repo #repo
# do not ignore .flathub # do not ignore .flathub
# do not ignore .rpm # do not ignore .rpm
@ -66,4 +63,4 @@ deploy_docs.sh
package-lock.json package-lock.json
# Local Netlify folder # Local Netlify folder
.netlify .netlify

@ -39,7 +39,7 @@ In action
- [Documentation](#documentation) - [Documentation](#documentation)
- [Install](#install) - [Install](#install)
- [Update](#update) - [Update](#update)
- [Getting started](#getting-started) - [Getting Started](#getting-started)
- [Shortcuts](#shortcuts) - [Shortcuts](#shortcuts)
- [Colorschemes](#colorschemes) - [Colorschemes](#colorschemes)
- [Config](#config) - [Config](#config)
@ -86,6 +86,10 @@ See [docs.cointop.sh/install](https://docs.cointop.sh/install)
See [docs.cointop.sh/update](https://docs.cointop.sh/update) See [docs.cointop.sh/update](https://docs.cointop.sh/update)
## Getting Started
See [docs.cointop.sh/getting-started](https://docs.cointop.sh/getting-started)
## Shortcuts ## Shortcuts
See [docs.cointop.sh/shortcuts](https://docs.cointop.sh/shortcuts) See [docs.cointop.sh/shortcuts](https://docs.cointop.sh/shortcuts)

@ -103,7 +103,7 @@ func (ct *Cointop) UpdateChart() error {
return nil return nil
} }
// ChartPoints calculates the the chart points // ChartPoints calculates the chart points
func (ct *Cointop) ChartPoints(symbol string, name string) error { func (ct *Cointop) ChartPoints(symbol string, name string) error {
log.Debug("ChartPoints()") log.Debug("ChartPoints()")
maxX := ct.ChartWidth() maxX := ct.ChartWidth()

@ -193,7 +193,7 @@ var DefaultSortBy = "rank"
// DefaultPerPage ... // DefaultPerPage ...
var DefaultPerPage uint = 100 var DefaultPerPage uint = 100
// MaxPages // DefaultMaxPages ...
var DefaultMaxPages uint = 35 var DefaultMaxPages uint = 35
// DefaultColorscheme ... // DefaultColorscheme ...

@ -6,8 +6,8 @@ import (
"sync" "sync"
fcolor "github.com/fatih/color" fcolor "github.com/fatih/color"
gocui "github.com/miguelmota/gocui" "github.com/miguelmota/gocui"
xtermcolor "github.com/tomnomnom/xtermcolor" "github.com/tomnomnom/xtermcolor"
) )
// TODO: fix hex color support // TODO: fix hex color support
@ -18,7 +18,7 @@ type ColorschemeColors map[string]interface{}
// ISprintf is a sprintf interface // ISprintf is a sprintf interface
type ISprintf func(...interface{}) string type ISprintf func(...interface{}) string
// colorCache is a map of color string names to sprintf functions // ColorCache is a map of color string names to sprintf functions
type ColorCache map[string]ISprintf type ColorCache map[string]ISprintf
// Colorscheme is the struct for colorscheme // Colorscheme is the struct for colorscheme
@ -337,17 +337,17 @@ func (c *Colorscheme) ToBgAttr(v string) (fcolor.Attribute, bool) {
return 0, false return 0, false
} }
// toBoldAttr converts a boolean to an Attribute type // ToBoldAttr converts a boolean to an Attribute type
func (c *Colorscheme) ToBoldAttr(v bool) (fcolor.Attribute, bool) { func (c *Colorscheme) ToBoldAttr(v bool) (fcolor.Attribute, bool) {
return fcolor.Bold, v return fcolor.Bold, v
} }
// toUnderlineAttr converts a boolean to an Attribute type // ToUnderlineAttr converts a boolean to an Attribute type
func (c *Colorscheme) ToUnderlineAttr(v bool) (fcolor.Attribute, bool) { func (c *Colorscheme) ToUnderlineAttr(v bool) (fcolor.Attribute, bool) {
return fcolor.Underline, v return fcolor.Underline, v
} }
// toGocuiAttr converts a color string name to a gocui Attribute type // ToGocuiAttr converts a color string name to a gocui Attribute type
func (c *Colorscheme) ToGocuiAttr(v string) (gocui.Attribute, bool) { func (c *Colorscheme) ToGocuiAttr(v string) (gocui.Attribute, bool) {
if attr, ok := GocuiColorschemeColorsMap[v]; ok { if attr, ok := GocuiColorschemeColorsMap[v]; ok {
return attr, true return attr, true

@ -24,7 +24,7 @@ var FilePerm = os.FileMode(0644)
// ErrInvalidPriceAlert is error for invalid price alert value // ErrInvalidPriceAlert is error for invalid price alert value
var ErrInvalidPriceAlert = errors.New("invalid price alert value") var ErrInvalidPriceAlert = errors.New("invalid price alert value")
// PossibleConfigPaths are the the possible config file paths. // PossibleConfigPaths are the possible config file paths.
// NOTE: this is to support previous default config filepaths // NOTE: this is to support previous default config filepaths
var PossibleConfigPaths = []string{ var PossibleConfigPaths = []string{
":PREFERRED_CONFIG_HOME:/cointop/config.toml", ":PREFERRED_CONFIG_HOME:/cointop/config.toml",
@ -54,54 +54,30 @@ type ConfigFileConfig struct {
// SetupConfig loads config file // SetupConfig loads config file
func (ct *Cointop) SetupConfig() error { func (ct *Cointop) SetupConfig() error {
log.Debug("SetupConfig()") type loadConfigFunc func() error
if err := ct.CreateConfigIfNotExists(); err != nil { loaders := []loadConfigFunc{
return err ct.CreateConfigIfNotExists,
} ct.ParseConfig,
if err := ct.ParseConfig(); err != nil { ct.loadTableConfig,
return err ct.loadChartConfig,
} ct.loadShortcutsFromConfig,
if err := ct.loadTableConfig(); err != nil { ct.loadFavoritesFromConfig,
return err ct.loadCurrencyFromConfig,
} ct.loadDefaultViewFromConfig,
if err := ct.loadChartConfig(); err != nil { ct.loadDefaultChartRangeFromConfig,
return err ct.loadAPIKeysFromConfig,
} ct.loadAPIChoiceFromConfig,
if err := ct.loadShortcutsFromConfig(); err != nil { ct.loadColorschemeFromConfig,
return err ct.loadRefreshRateFromConfig,
} ct.loadCacheDirFromConfig,
if err := ct.loadFavoritesFromConfig(); err != nil { ct.loadPriceAlertsFromConfig,
return err ct.loadPortfolioFromConfig,
} }
if err := ct.loadCurrencyFromConfig(); err != nil {
return err for _, f := range loaders {
} if err := f(); err != nil {
if err := ct.loadDefaultViewFromConfig(); err != nil { return err
return err }
}
if err := ct.loadDefaultChartRangeFromConfig(); err != nil {
return err
}
if err := ct.loadAPIKeysFromConfig(); err != nil {
return err
}
if err := ct.loadAPIChoiceFromConfig(); err != nil {
return err
}
if err := ct.loadColorschemeFromConfig(); err != nil {
return err
}
if err := ct.loadRefreshRateFromConfig(); err != nil {
return err
}
if err := ct.loadCacheDirFromConfig(); err != nil {
return err
}
if err := ct.loadPriceAlertsFromConfig(); err != nil {
return err
}
if err := ct.loadPortfolioFromConfig(); err != nil {
return err
} }
return nil return nil
@ -152,7 +128,7 @@ func (ct *Cointop) ConfigFilePath() string {
return pathutil.NormalizePath(ct.configFilepath) return pathutil.NormalizePath(ct.configFilepath)
} }
// ConfigPath return the config file path // MakeConfigDir creates the directory for the config file
func (ct *Cointop) MakeConfigDir() error { func (ct *Cointop) MakeConfigDir() error {
log.Debug("MakeConfigDir()") log.Debug("MakeConfigDir()")
path := ct.ConfigDirPath() path := ct.ConfigDirPath()
@ -239,15 +215,12 @@ func (ct *Cointop) ConfigToToml() ([]byte, error) {
var favoritesBySymbolIfc []interface{} var favoritesBySymbolIfc []interface{}
favoritesMapIfc := map[string]interface{}{ favoritesMapIfc := map[string]interface{}{
// DEPRECATED: favorites by 'symbol' is deprecated because of collisions. Kept for backward compatibility. // DEPRECATED: favorites by 'symbol' is deprecated because of collisions. Kept for backward compatibility.
"symbols": favoritesBySymbolIfc, "symbols": favoritesBySymbolIfc,
"names": favoritesIfc, "names": favoritesIfc,
"columns": ct.State.favoritesTableColumns,
"character": ct.State.favoriteChar,
} }
var favoritesColumnsIfc interface{} = ct.State.favoritesTableColumns
favoritesMapIfc["columns"] = favoritesColumnsIfc
favoritesMapIfc["character"] = ct.State.favoriteChar
portfolioIfc := map[string]interface{}{}
var holdingsIfc [][]string var holdingsIfc [][]string
for name := range ct.State.portfolio.Entries { for name := range ct.State.portfolio.Entries {
entry, ok := ct.State.portfolio.Entries[name] entry, ok := ct.State.portfolio.Entries[name]
@ -262,24 +235,15 @@ func (ct *Cointop) ConfigToToml() ([]byte, error) {
sort.Slice(holdingsIfc, func(i, j int) bool { sort.Slice(holdingsIfc, func(i, j int) bool {
return holdingsIfc[i][0] < holdingsIfc[j][0] return holdingsIfc[i][0] < holdingsIfc[j][0]
}) })
portfolioIfc["holdings"] = holdingsIfc portfolioIfc := map[string]interface{}{
"holdings": holdingsIfc,
var columnsIfc interface{} = ct.State.portfolioTableColumns "columns": ct.State.portfolioTableColumns,
portfolioIfc["columns"] = columnsIfc }
var currencyIfc interface{} = ct.State.currencyConversion
var defaultViewIfc interface{} = ct.State.defaultView
var defaultChartRangeIfc interface{} = ct.State.defaultChartRange
var colorschemeIfc interface{} = ct.colorschemeName
var refreshRateIfc interface{} = uint(ct.State.refreshRate.Seconds())
var cacheDirIfc interface{} = ct.State.cacheDir
cmcIfc := map[string]interface{}{ cmcIfc := map[string]interface{}{
"pro_api_key": ct.apiKeys.cmc, "pro_api_key": ct.apiKeys.cmc,
} }
var apiChoiceIfc interface{} = ct.apiChoice
var priceAlertsIfc []interface{} var priceAlertsIfc []interface{}
for _, priceAlert := range ct.State.priceAlerts.Entries { for _, priceAlert := range ct.State.priceAlerts.Entries {
if priceAlert.Expired { if priceAlert.Expired {
@ -297,29 +261,29 @@ func (ct *Cointop) ConfigToToml() ([]byte, error) {
//"sound": ct.State.priceAlerts.SoundEnabled, //"sound": ct.State.priceAlerts.SoundEnabled,
} }
var coinsTableColumnsIfc interface{} = ct.State.coinsTableColumns tableMapIfc := map[string]interface{}{
tableMapIfc := map[string]interface{}{} "columns": ct.State.coinsTableColumns,
tableMapIfc["columns"] = coinsTableColumnsIfc "keep_row_focus_on_sort": ct.State.keepRowFocusOnSort,
var keepRowFocusOnSortIfc interface{} = ct.State.keepRowFocusOnSort }
tableMapIfc["keep_row_focus_on_sort"] = keepRowFocusOnSortIfc
chartMapIfc := map[string]interface{}{} chartMapIfc := map[string]interface{}{
chartMapIfc["max_width"] = ct.State.maxChartWidth "max_width": ct.State.maxChartWidth,
chartMapIfc["height"] = ct.State.chartHeight "height": ct.State.chartHeight,
}
var inputs = &ConfigFileConfig{ var inputs = &ConfigFileConfig{
API: apiChoiceIfc, API: ct.apiChoice,
Colorscheme: colorschemeIfc, Colorscheme: ct.colorschemeName,
CoinMarketCap: cmcIfc, CoinMarketCap: cmcIfc,
Currency: currencyIfc, Currency: ct.State.currencyConversion,
DefaultView: defaultViewIfc, DefaultView: ct.State.defaultView,
DefaultChartRange: defaultChartRangeIfc, DefaultChartRange: ct.State.defaultChartRange,
Favorites: favoritesMapIfc, Favorites: favoritesMapIfc,
RefreshRate: refreshRateIfc, RefreshRate: uint(ct.State.refreshRate.Seconds()),
Shortcuts: shortcutsIfcs, Shortcuts: shortcutsIfcs,
Portfolio: portfolioIfc, Portfolio: portfolioIfc,
PriceAlerts: priceAlertsMapIfc, PriceAlerts: priceAlertsMapIfc,
CacheDir: cacheDirIfc, CacheDir: ct.State.cacheDir,
Table: tableMapIfc, Table: tableMapIfc,
Chart: chartMapIfc, Chart: chartMapIfc,
} }
@ -680,7 +644,7 @@ func (ct *Cointop) loadPriceAlertsFromConfig() error {
return nil return nil
} }
// GetColorschemeColors loads colors from colorsheme file to struct // GetColorschemeColors loads colors from colorscheme file to struct
func (ct *Cointop) GetColorschemeColors() (map[string]interface{}, error) { func (ct *Cointop) GetColorschemeColors() (map[string]interface{}, error) {
log.Debug("GetColorschemeColors()") log.Debug("GetColorschemeColors()")
var colors map[string]interface{} var colors map[string]interface{}

@ -6,7 +6,7 @@ import (
"sort" "sort"
"strings" "strings"
color "github.com/cointop-sh/cointop/pkg/color" "github.com/cointop-sh/cointop/pkg/color"
"github.com/cointop-sh/cointop/pkg/pad" "github.com/cointop-sh/cointop/pkg/pad"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )

@ -56,7 +56,7 @@ func (ct *Cointop) ToggleShowFavorites() error {
// GetFavoritesSlice returns coin favorites as slice // GetFavoritesSlice returns coin favorites as slice
func (ct *Cointop) GetFavoritesSlice() []*Coin { func (ct *Cointop) GetFavoritesSlice() []*Coin {
log.Debug("GetFavoritesSlice()") log.Debug("GetFavoritesSlice()")
sliced := []*Coin{} var sliced []*Coin
for i := range ct.State.allCoins { for i := range ct.State.allCoins {
coin := ct.State.allCoins[i] coin := ct.State.allCoins[i]
if coin.Favorite { if coin.Favorite {

@ -4,7 +4,7 @@ import (
"sync" "sync"
"time" "time"
types "github.com/cointop-sh/cointop/pkg/api/types" "github.com/cointop-sh/cointop/pkg/api/types"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
@ -114,7 +114,7 @@ func (ct *Cointop) processCoins(coins []types.Coin) {
}) })
if len(ct.State.allCoins) < size { if len(ct.State.allCoins) < size {
list := []*Coin{} var list []*Coin
for _, v := range coins { for _, v := range coins {
k := v.Name k := v.Name
icoin, _ := ct.State.allCoinsSlugMap.Load(k) icoin, _ := ct.State.allCoinsSlugMap.Load(k)

@ -6,7 +6,7 @@ import (
"strings" "strings"
"time" "time"
types "github.com/cointop-sh/cointop/pkg/api/types" "github.com/cointop-sh/cointop/pkg/api/types"
"github.com/cointop-sh/cointop/pkg/color" "github.com/cointop-sh/cointop/pkg/color"
"github.com/cointop-sh/cointop/pkg/humanize" "github.com/cointop-sh/cointop/pkg/humanize"
"github.com/cointop-sh/cointop/pkg/pad" "github.com/cointop-sh/cointop/pkg/pad"

@ -537,7 +537,7 @@ func (ct *Cointop) TableScrollLeft() error {
return nil return nil
} }
// TableScrollRight scrolls the the table to the right // TableScrollRight scrolls the table to the right
func (ct *Cointop) TableScrollRight() error { func (ct *Cointop) TableScrollRight() error {
ct.State.tableOffsetX-- ct.State.tableOffsetX--
maxX := int(math.Min(float64(1-(ct.maxTableWidth-ct.Width())), 0)) maxX := int(math.Min(float64(1-(ct.maxTableWidth-ct.Width())), 0))

@ -555,7 +555,7 @@ func (ct *Cointop) PortfolioEntriesCount() int {
// GetPortfolioSlice returns portfolio entries as a slice // GetPortfolioSlice returns portfolio entries as a slice
func (ct *Cointop) GetPortfolioSlice() []*Coin { func (ct *Cointop) GetPortfolioSlice() []*Coin {
log.Debug("GetPortfolioSlice()") log.Debug("GetPortfolioSlice()")
sliced := []*Coin{} var sliced []*Coin
if ct.PortfolioEntriesCount() == 0 { if ct.PortfolioEntriesCount() == 0 {
return sliced return sliced
} }

@ -477,7 +477,7 @@ func (ct *Cointop) SetPriceAlert(coinName string, operator string, targetPrice f
func (ct *Cointop) RemovePriceAlert(id string) error { func (ct *Cointop) RemovePriceAlert(id string) error {
log.Debug("RemovePriceAlert()") log.Debug("RemovePriceAlert()")
for i, entry := range ct.State.priceAlerts.Entries { for i, entry := range ct.State.priceAlerts.Entries {
if entry.ID == ct.State.priceAlertEditID { if entry.ID == id {
ct.State.priceAlerts.Entries = append(ct.State.priceAlerts.Entries[:i], ct.State.priceAlerts.Entries[i+1:]...) ct.State.priceAlerts.Entries = append(ct.State.priceAlerts.Entries[:i], ct.State.priceAlerts.Entries[i+1:]...)
} }
} }

@ -98,7 +98,7 @@ func (ct *Cointop) UpdateTable() error {
// GetTableCoinsSlice returns a slice of the table rows // GetTableCoinsSlice returns a slice of the table rows
func (ct *Cointop) GetTableCoinsSlice() []*Coin { func (ct *Cointop) GetTableCoinsSlice() []*Coin {
log.Debug("GetTableCoinsSlice()") log.Debug("GetTableCoinsSlice()")
sliced := []*Coin{} var sliced []*Coin
start := ct.State.page * ct.State.perPage start := ct.State.page * ct.State.perPage
end := start + ct.State.perPage end := start + ct.State.perPage
allCoins := ct.AllCoins() allCoins := ct.AllCoins()

@ -26,97 +26,97 @@ type HeaderColumn struct {
// HeaderColumns are the header column widths // HeaderColumns are the header column widths
var HeaderColumns = map[string]*HeaderColumn{ var HeaderColumns = map[string]*HeaderColumn{
"rank": &HeaderColumn{ "rank": {
Slug: "rank", Slug: "rank",
Label: "[r]ank", Label: "[r]ank",
PlainLabel: "rank", PlainLabel: "rank",
}, },
"name": &HeaderColumn{ "name": {
Slug: "name", Slug: "name",
Label: "[n]ame", Label: "[n]ame",
PlainLabel: "name", PlainLabel: "name",
}, },
"symbol": &HeaderColumn{ "symbol": {
Slug: "symbol", Slug: "symbol",
Label: "[s]ymbol", Label: "[s]ymbol",
PlainLabel: "symbol", PlainLabel: "symbol",
}, },
"target_price": &HeaderColumn{ "target_price": {
Slug: "target_price", Slug: "target_price",
Label: "[t]target price", Label: "[t]target price",
PlainLabel: "target price", PlainLabel: "target price",
}, },
"price": &HeaderColumn{ "price": {
Slug: "price", Slug: "price",
Label: "[p]rice", Label: "[p]rice",
PlainLabel: "price", PlainLabel: "price",
}, },
"frequency": &HeaderColumn{ "frequency": {
Slug: "frequency", Slug: "frequency",
Label: "frequency", Label: "frequency",
PlainLabel: "frequency", PlainLabel: "frequency",
}, },
"holdings": &HeaderColumn{ "holdings": {
Slug: "holdings", Slug: "holdings",
Label: "[h]oldings", Label: "[h]oldings",
PlainLabel: "holdings", PlainLabel: "holdings",
}, },
"balance": &HeaderColumn{ "balance": {
Slug: "balance", Slug: "balance",
Label: "[b]alance", Label: "[b]alance",
PlainLabel: "balance", PlainLabel: "balance",
}, },
"market_cap": &HeaderColumn{ "market_cap": {
Slug: "market_cap", Slug: "market_cap",
Label: "[m]arket cap", Label: "[m]arket cap",
PlainLabel: "market cap", PlainLabel: "market cap",
}, },
"24h_volume": &HeaderColumn{ "24h_volume": {
Slug: "24h_volume", Slug: "24h_volume",
Label: "24H [v]olume", Label: "24H [v]olume",
PlainLabel: "24H volume", PlainLabel: "24H volume",
}, },
"1h_change": &HeaderColumn{ "1h_change": {
Slug: "1h_change", Slug: "1h_change",
Label: "[1]H%", Label: "[1]H%",
PlainLabel: "1H%", PlainLabel: "1H%",
}, },
"24h_change": &HeaderColumn{ "24h_change": {
Slug: "24h_change", Slug: "24h_change",
Label: "[2]4H%", Label: "[2]4H%",
PlainLabel: "24H%", PlainLabel: "24H%",
}, },
"7d_change": &HeaderColumn{ "7d_change": {
Slug: "7d_change", Slug: "7d_change",
Label: "[7]D%", Label: "[7]D%",
PlainLabel: "7D%", PlainLabel: "7D%",
}, },
"30d_change": &HeaderColumn{ "30d_change": {
Slug: "30d_change", Slug: "30d_change",
Label: "[3]0D%", Label: "[3]0D%",
PlainLabel: "30D%", PlainLabel: "30D%",
}, },
"1y_change": &HeaderColumn{ "1y_change": {
Slug: "1y_change", Slug: "1y_change",
Label: "1[y]%", Label: "1[y]%",
PlainLabel: "1Y%", PlainLabel: "1Y%",
}, },
"total_supply": &HeaderColumn{ "total_supply": {
Slug: "total_supply", Slug: "total_supply",
Label: "[t]otal supply", Label: "[t]otal supply",
PlainLabel: "total supply", PlainLabel: "total supply",
}, },
"available_supply": &HeaderColumn{ "available_supply": {
Slug: "available_supply", Slug: "available_supply",
Label: "[a]vailable supply", Label: "[a]vailable supply",
PlainLabel: "available supply", PlainLabel: "available supply",
}, },
"percent_holdings": &HeaderColumn{ "percent_holdings": {
Slug: "percent_holdings", Slug: "percent_holdings",
Label: "[%]holdings", Label: "[%]holdings",
PlainLabel: "%holdings", PlainLabel: "%holdings",
}, },
"last_updated": &HeaderColumn{ "last_updated": {
Slug: "last_updated", Slug: "last_updated",
Label: "last [u]pdated", Label: "last [u]pdated",
PlainLabel: "last updated", PlainLabel: "last updated",

@ -10,7 +10,7 @@ import (
"time" "time"
apitypes "github.com/cointop-sh/cointop/pkg/api/types" apitypes "github.com/cointop-sh/cointop/pkg/api/types"
util "github.com/cointop-sh/cointop/pkg/api/util" "github.com/cointop-sh/cointop/pkg/api/util"
gecko "github.com/cointop-sh/cointop/pkg/api/vendors/coingecko/v3" gecko "github.com/cointop-sh/cointop/pkg/api/vendors/coingecko/v3"
geckoTypes "github.com/cointop-sh/cointop/pkg/api/vendors/coingecko/v3/types" geckoTypes "github.com/cointop-sh/cointop/pkg/api/vendors/coingecko/v3/types"
) )
@ -293,7 +293,7 @@ func (s *Service) cacheCoinsIDList() error {
if list == nil { if list == nil {
return nil return nil
} }
firstWords := [][]string{} var firstWords [][]string
for _, item := range *list { for _, item := range *list {
keys := []string{ keys := []string{
strings.ToLower(item.Name), strings.ToLower(item.Name),

@ -12,7 +12,7 @@ import (
"time" "time"
apitypes "github.com/cointop-sh/cointop/pkg/api/types" apitypes "github.com/cointop-sh/cointop/pkg/api/types"
util "github.com/cointop-sh/cointop/pkg/api/util" "github.com/cointop-sh/cointop/pkg/api/util"
cmc "github.com/miguelmota/go-coinmarketcap/pro/v1" cmc "github.com/miguelmota/go-coinmarketcap/pro/v1"
cmcv2 "github.com/miguelmota/go-coinmarketcap/v2" cmcv2 "github.com/miguelmota/go-coinmarketcap/v2"
) )
@ -135,7 +135,7 @@ func (s *Service) GetCoinData(name string, convert string) (apitypes.Coin, error
// GetCoinDataBatch gets all data of specified coins. // GetCoinDataBatch gets all data of specified coins.
func (s *Service) GetCoinDataBatch(names []string, convert string) ([]apitypes.Coin, error) { func (s *Service) GetCoinDataBatch(names []string, convert string) ([]apitypes.Coin, error) {
ret := []apitypes.Coin{} var ret []apitypes.Coin
coins, err := s.getPaginatedCoinData(convert, 0) coins, err := s.getPaginatedCoinData(convert, 0)
if err != nil { if err != nil {
return ret, err return ret, err

@ -1,7 +1,7 @@
package api package api
import ( import (
types "github.com/cointop-sh/cointop/pkg/api/types" "github.com/cointop-sh/cointop/pkg/api/types"
) )
// Interface interface // Interface interface
@ -13,9 +13,6 @@ type Interface interface {
GetGlobalMarketData(convert string) (types.GlobalMarketData, error) GetGlobalMarketData(convert string) (types.GlobalMarketData, error)
GetCoinData(name string, convert string) (types.Coin, error) GetCoinData(name string, convert string) (types.Coin, error)
GetCoinDataBatch(names []string, convert string) ([]types.Coin, error) GetCoinDataBatch(names []string, convert string) ([]types.Coin, error)
//GetAltcoinMarketGraphData(start int64, end int64) (types.MarketGraph, error)
//GetCoinPriceUSD(coin string) (float64, error)
//GetCoinMarkets(coin string) ([]types.Market, error)
CoinLink(name string) string CoinLink(name string) string
SupportedCurrencies() []string SupportedCurrencies() []string
Price(name string, convert string) (float64, error) Price(name string, convert string) (float64, error)

@ -19,7 +19,7 @@ func (p *patcher) Exit(node *ast.Node) {
} }
} }
// EvaluateExpression evaulates a simple math expression string to a float64 // EvaluateExpressionToFloat64 evaulates a simple math expression string to a float64
func EvaluateExpressionToFloat64(input string, env interface{}) (float64, error) { func EvaluateExpressionToFloat64(input string, env interface{}) (float64, error) {
input = strings.TrimSpace(input) input = strings.TrimSpace(input)
if input == "" { if input == "" {

@ -223,7 +223,7 @@ func findMatch(mux map[string]func(Event), path string) string {
} }
// Remove all existing defined Handlers from the map // ResetHandlers Remove all existing defined Handlers from the map
func (es *EvtStream) ResetHandlers() { func (es *EvtStream) ResetHandlers() {
for Path, _ := range es.Handlers { for Path, _ := range es.Handlers {
delete(es.Handlers, Path) delete(es.Handlers, Path)

@ -18,7 +18,7 @@ import (
// Attribute is printable cell's color and style. // Attribute is printable cell's color and style.
type Attribute uint16 type Attribute uint16
// 8 basic clolrs // 8 basic colors
const ( const (
ColorDefault Attribute = iota ColorDefault Attribute = iota
ColorBlack ColorBlack
@ -31,8 +31,8 @@ const (
ColorWhite ColorWhite
) )
//Have a constant that defines number of colors // NumberOfColors ...
const NumberofColors = 8 const NumberOfColors = 8
// Text style // Text style
const ( const (

@ -27,15 +27,15 @@ import (
*/ */
type MBarChart struct { type MBarChart struct {
Block Block
BarColor [NumberofColors]Attribute BarColor [NumberOfColors]Attribute
TextColor Attribute TextColor Attribute
NumColor [NumberofColors]Attribute NumColor [NumberOfColors]Attribute
Data [NumberofColors][]int Data [NumberOfColors][]int
DataLabels []string DataLabels []string
BarWidth int BarWidth int
BarGap int BarGap int
labels [][]rune labels [][]rune
dataNum [NumberofColors][][]rune dataNum [NumberOfColors][][]rune
numBar int numBar int
scale float64 scale float64
max int max int
@ -102,11 +102,11 @@ func (bc *MBarChart) layout() {
bc.BarColor[i] = ColorBlack bc.BarColor[i] = ColorBlack
} else { } else {
bc.BarColor[i] = bc.BarColor[i-1] + 1 bc.BarColor[i] = bc.BarColor[i-1] + 1
if bc.BarColor[i] > NumberofColors { if bc.BarColor[i] > NumberOfColors {
bc.BarColor[i] = ColorBlack bc.BarColor[i] = ColorBlack
} }
} }
bc.NumColor[i] = (NumberofColors + 1) - bc.BarColor[i] //Make NumColor opposite of barColor for visibility bc.NumColor[i] = (NumberOfColors + 1) - bc.BarColor[i] //Make NumColor opposite of barColor for visibility
} }
} }

@ -39,8 +39,8 @@ type Sparklines struct {
var sparks = []rune{'▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'} var sparks = []rune{'▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'}
// Add appends a given Sparkline to s *Sparklines. // Add appends a given Sparkline to s *Sparklines.
func (s *Sparklines) Add(sl Sparkline) { func (sl *Sparklines) Add(line Sparkline) {
s.Lines = append(s.Lines, sl) sl.Lines = append(sl.Lines, line)
} }
// NewSparkline returns a unrenderable single sparkline that intended to be added into Sparklines. // NewSparkline returns a unrenderable single sparkline that intended to be added into Sparklines.

@ -121,7 +121,7 @@ func lookUpAttr(clrmap map[string]Attribute, name string) Attribute {
return a return a
} }
// 0<=r,g,b <= 5 // ColorRGB return an Attribute for the given RGB (value 0-5)
func ColorRGB(r, g, b int) Attribute { func ColorRGB(r, g, b int) Attribute {
within := func(n int) int { within := func(n int) int {
if n < 0 { if n < 0 {

@ -9,7 +9,7 @@ import (
"sync" "sync"
) )
// event mixins // WgtMgr event mixins
type WgtMgr map[string]WgtInfo type WgtMgr map[string]WgtInfo
type WgtInfo struct { type WgtInfo struct {

Loading…
Cancel
Save