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
.bz2
# flatpak
.flatpak-builder
build-dir
#repo
# do not ignore .flathub
# do not ignore .rpm
@ -66,4 +63,4 @@ deploy_docs.sh
package-lock.json
# Local Netlify folder
.netlify
.netlify

@ -39,7 +39,7 @@ In action
- [Documentation](#documentation)
- [Install](#install)
- [Update](#update)
- [Getting started](#getting-started)
- [Getting Started](#getting-started)
- [Shortcuts](#shortcuts)
- [Colorschemes](#colorschemes)
- [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)
## Getting Started
See [docs.cointop.sh/getting-started](https://docs.cointop.sh/getting-started)
## Shortcuts
See [docs.cointop.sh/shortcuts](https://docs.cointop.sh/shortcuts)

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

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

@ -6,8 +6,8 @@ import (
"sync"
fcolor "github.com/fatih/color"
gocui "github.com/miguelmota/gocui"
xtermcolor "github.com/tomnomnom/xtermcolor"
"github.com/miguelmota/gocui"
"github.com/tomnomnom/xtermcolor"
)
// TODO: fix hex color support
@ -18,7 +18,7 @@ type ColorschemeColors map[string]interface{}
// ISprintf is a sprintf interface
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
// Colorscheme is the struct for colorscheme
@ -337,17 +337,17 @@ func (c *Colorscheme) ToBgAttr(v string) (fcolor.Attribute, bool) {
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) {
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) {
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) {
if attr, ok := GocuiColorschemeColorsMap[v]; ok {
return attr, true

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

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

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

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

@ -6,7 +6,7 @@ import (
"strings"
"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/humanize"
"github.com/cointop-sh/cointop/pkg/pad"

@ -537,7 +537,7 @@ func (ct *Cointop) TableScrollLeft() error {
return nil
}
// TableScrollRight scrolls the the table to the right
// TableScrollRight scrolls the table to the right
func (ct *Cointop) TableScrollRight() error {
ct.State.tableOffsetX--
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
func (ct *Cointop) GetPortfolioSlice() []*Coin {
log.Debug("GetPortfolioSlice()")
sliced := []*Coin{}
var sliced []*Coin
if ct.PortfolioEntriesCount() == 0 {
return sliced
}

@ -477,7 +477,7 @@ func (ct *Cointop) SetPriceAlert(coinName string, operator string, targetPrice f
func (ct *Cointop) RemovePriceAlert(id string) error {
log.Debug("RemovePriceAlert()")
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:]...)
}
}

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

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

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

@ -12,7 +12,7 @@ import (
"time"
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"
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.
func (s *Service) GetCoinDataBatch(names []string, convert string) ([]apitypes.Coin, error) {
ret := []apitypes.Coin{}
var ret []apitypes.Coin
coins, err := s.getPaginatedCoinData(convert, 0)
if err != nil {
return ret, err

@ -1,7 +1,7 @@
package api
import (
types "github.com/cointop-sh/cointop/pkg/api/types"
"github.com/cointop-sh/cointop/pkg/api/types"
)
// Interface interface
@ -13,9 +13,6 @@ type Interface interface {
GetGlobalMarketData(convert string) (types.GlobalMarketData, error)
GetCoinData(name 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
SupportedCurrencies() []string
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) {
input = strings.TrimSpace(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() {
for Path, _ := range es.Handlers {
delete(es.Handlers, Path)

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

@ -27,15 +27,15 @@ import (
*/
type MBarChart struct {
Block
BarColor [NumberofColors]Attribute
BarColor [NumberOfColors]Attribute
TextColor Attribute
NumColor [NumberofColors]Attribute
Data [NumberofColors][]int
NumColor [NumberOfColors]Attribute
Data [NumberOfColors][]int
DataLabels []string
BarWidth int
BarGap int
labels [][]rune
dataNum [NumberofColors][][]rune
dataNum [NumberOfColors][][]rune
numBar int
scale float64
max int
@ -102,11 +102,11 @@ func (bc *MBarChart) layout() {
bc.BarColor[i] = ColorBlack
} else {
bc.BarColor[i] = bc.BarColor[i-1] + 1
if bc.BarColor[i] > NumberofColors {
if bc.BarColor[i] > NumberOfColors {
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{'▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'}
// Add appends a given Sparkline to s *Sparklines.
func (s *Sparklines) Add(sl Sparkline) {
s.Lines = append(s.Lines, sl)
func (sl *Sparklines) Add(line Sparkline) {
sl.Lines = append(sl.Lines, line)
}
// 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
}
// 0<=r,g,b <= 5
// ColorRGB return an Attribute for the given RGB (value 0-5)
func ColorRGB(r, g, b int) Attribute {
within := func(n int) int {
if n < 0 {

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

Loading…
Cancel
Save