Add configurable favorites table columns

pull/94/head
Miguel Mota 3 years ago
parent 184ebfb497
commit 673d05a928

@ -46,6 +46,9 @@ func (ct *Cointop) GetCoinsTable() *table.Table {
t := table.NewTable().SetWidth(maxX) t := table.NewTable().SetWidth(maxX)
var rows [][]*table.RowCell var rows [][]*table.RowCell
headers := ct.GetCoinsTableHeaders() headers := ct.GetCoinsTableHeaders()
if ct.IsFavoritesVisible() {
headers = ct.GetFavoritesTableHeaders()
}
ct.ClearSyncMap(ct.State.tableColumnWidths) ct.ClearSyncMap(ct.State.tableColumnWidths)
ct.ClearSyncMap(ct.State.tableColumnAlignLeft) ct.ClearSyncMap(ct.State.tableColumnAlignLeft)
for _, coin := range ct.State.coins { for _, coin := range ct.State.coins {

@ -52,6 +52,7 @@ type State struct {
favoritesBySymbol map[string]bool favoritesBySymbol map[string]bool
favorites map[string]bool favorites map[string]bool
favoritesTableColumns []string
helpVisible bool helpVisible bool
hideMarketbar bool hideMarketbar bool
hideChart bool hideChart bool
@ -219,19 +220,20 @@ func NewCointop(config *Config) (*Cointop, error) {
coinsTableColumns: DefaultCoinTableHeaders, coinsTableColumns: DefaultCoinTableHeaders,
currencyConversion: "USD", currencyConversion: "USD",
// 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.
favoritesBySymbol: make(map[string]bool), favoritesBySymbol: make(map[string]bool),
favorites: make(map[string]bool), favorites: make(map[string]bool),
hideMarketbar: config.HideMarketbar, favoritesTableColumns: DefaultCoinTableHeaders,
hideChart: config.HideChart, hideMarketbar: config.HideMarketbar,
hideStatusbar: config.HideStatusbar, hideChart: config.HideChart,
marketBarHeight: 1, hideStatusbar: config.HideStatusbar,
onlyTable: config.OnlyTable, marketBarHeight: 1,
refreshRate: 60 * time.Second, onlyTable: config.OnlyTable,
selectedChartRange: "7D", refreshRate: 60 * time.Second,
shortcutKeys: DefaultShortcuts(), selectedChartRange: "7D",
sortBy: "rank", shortcutKeys: DefaultShortcuts(),
page: 0, sortBy: "rank",
perPage: int(perPage), page: 0,
perPage: int(perPage),
portfolio: &Portfolio{ portfolio: &Portfolio{
Entries: make(map[string]*PortfolioEntry), Entries: make(map[string]*PortfolioEntry),
}, },

@ -31,18 +31,18 @@ var possibleConfigPaths = []string{
} }
type config struct { type config struct {
Shortcuts map[string]interface{} `toml:"shortcuts"` Shortcuts map[string]interface{} `toml:"shortcuts"`
Favorites map[string][]interface{} `toml:"favorites"` Favorites map[string]interface{} `toml:"favorites"`
Portfolio map[string]interface{} `toml:"portfolio"` Portfolio map[string]interface{} `toml:"portfolio"`
PriceAlerts map[string]interface{} `toml:"price_alerts"` PriceAlerts map[string]interface{} `toml:"price_alerts"`
Currency interface{} `toml:"currency"` Currency interface{} `toml:"currency"`
DefaultView interface{} `toml:"default_view"` DefaultView interface{} `toml:"default_view"`
CoinMarketCap map[string]interface{} `toml:"coinmarketcap"` CoinMarketCap map[string]interface{} `toml:"coinmarketcap"`
API interface{} `toml:"api"` API interface{} `toml:"api"`
Colorscheme interface{} `toml:"colorscheme"` Colorscheme interface{} `toml:"colorscheme"`
RefreshRate interface{} `toml:"refresh_rate"` RefreshRate interface{} `toml:"refresh_rate"`
CacheDir interface{} `toml:"cache_dir"` CacheDir interface{} `toml:"cache_dir"`
Table map[string]interface{} `toml:"table"` Table map[string]interface{} `toml:"table"`
} }
// SetupConfig loads config file // SetupConfig loads config file
@ -219,12 +219,15 @@ 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,
} }
var favoritesColumnsIfc interface{} = ct.State.favoritesTableColumns
favoritesMapIfc["columns"] = favoritesColumnsIfc
portfolioIfc := map[string]interface{}{} portfolioIfc := map[string]interface{}{}
var holdingsIfc [][]string var holdingsIfc [][]string
for name := range ct.State.portfolio.Entries { for name := range ct.State.portfolio.Entries {
@ -470,20 +473,40 @@ func (ct *Cointop) loadAPIChoiceFromConfig() error {
// LoadFavoritesFromConfig loads favorites data from config file to struct // LoadFavoritesFromConfig loads favorites data from config file to struct
func (ct *Cointop) loadFavoritesFromConfig() error { func (ct *Cointop) loadFavoritesFromConfig() error {
ct.debuglog("loadFavoritesFromConfig()") ct.debuglog("loadFavoritesFromConfig()")
for k, arr := range ct.config.Favorites { for k, valueIfc := range ct.config.Favorites {
ifcs, ok := valueIfc.([]interface{})
if !ok {
continue
}
switch k {
// 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.
if k == "symbols" { case "symbols":
for _, ifc := range arr { for _, ifc := range ifcs {
if v, ok := ifc.(string); ok { if v, ok := ifc.(string); ok {
ct.State.favoritesBySymbol[strings.ToUpper(v)] = true ct.State.favoritesBySymbol[strings.ToUpper(v)] = true
} }
} }
} else if k == "names" { case "names":
for _, ifc := range arr { for _, ifc := range ifcs {
if v, ok := ifc.(string); ok { if v, ok := ifc.(string); ok {
ct.State.favorites[v] = true ct.State.favorites[v] = true
} }
} }
case "columns":
var columns []string
for _, ifc := range ifcs {
col, ok := ifc.(string)
if !ok {
continue
}
if !ct.ValidCoinsTableHeader(col) {
return fmt.Errorf("invalid table header name %q. Valid names are: %s", col, strings.Join(DefaultCoinTableHeaders, ","))
}
columns = append(columns, col)
}
if len(columns) > 0 {
ct.State.favoritesTableColumns = columns
}
} }
} }
return nil return nil

@ -4,6 +4,11 @@ import (
"sort" "sort"
) )
// GetFavoritesTableHeaders returns the favorites table headers
func (ct *Cointop) GetFavoritesTableHeaders() []string {
return ct.State.favoritesTableColumns
}
// ToggleFavorite toggles coin as favorite // ToggleFavorite toggles coin as favorite
func (ct *Cointop) ToggleFavorite() error { func (ct *Cointop) ToggleFavorite() error {
ct.debuglog("toggleFavorite()") ct.debuglog("toggleFavorite()")

Loading…
Cancel
Save