mirror of https://github.com/miguelmota/cointop
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
6.0 KiB
Go
179 lines
6.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/cointop-sh/cointop/cointop"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// RootCmd ...
|
|
func RootCmd() *cobra.Command {
|
|
var version bool
|
|
var refreshRate uint
|
|
test := getEnvBool("COINTOP_TEST")
|
|
clean := getEnvBool("COINTOP_CLEAN")
|
|
reset := getEnvBool("COINTOP_RESET")
|
|
hideMarketbar := getEnvBool("COINTOP_HIDE_MARKETBAR")
|
|
hideChart := getEnvBool("COINTOP_HIDE_CHART")
|
|
hideTable := getEnvBool("COINTOP_HIDE_TABLE")
|
|
hideStatusbar := getEnvBool("COINTOP_HIDE_STATUSBAR")
|
|
hidePortfolioBalances := getEnvBool("COINTOP_HIDE_PORTFOLIO_BALANCES")
|
|
onlyTable := getEnvBool("COINTOP_ONLY_TABLE")
|
|
onlyChart := getEnvBool("COINTOP_ONLY_CHART")
|
|
silent := getEnvBool("COINTOP_SILENT")
|
|
noCache := getEnvBool("COINTOP_NO_CACHE")
|
|
colorscheme := os.Getenv("COINTOP_COLORSCHEME")
|
|
cacheDir := os.Getenv("COINTOP_CACHE_DIR")
|
|
colorsDir := os.Getenv("COINTOP_COLORS_DIR")
|
|
config := os.Getenv("COINTOP_CONFIG")
|
|
apiChoice := os.Getenv("COINTOP_API")
|
|
cmcAPIKey := os.Getenv("CMC_PRO_API_KEY")
|
|
perPage := cointop.DefaultPerPage
|
|
maxPages := cointop.DefaultMaxPages
|
|
|
|
rootCmd := &cobra.Command{
|
|
Use: "cointop",
|
|
Short: "Cointop is an interactive terminal based app for tracking cryptocurrencies",
|
|
Long: `
|
|
_ _
|
|
___ ___ (_)_ __ | |_ ___ _ __
|
|
/ __/ _ \| | '_ \| __/ _ \| '_ \
|
|
| (_| (_) | | | | | || (_) | |_) |
|
|
\___\___/|_|_| |_|\__\___/| .__/
|
|
|_|
|
|
|
|
Cointop is a fast and lightweight interactive terminal based UI application for tracking and monitoring cryptocurrency coin stats in real-time.
|
|
|
|
See git.io/cointop for more info.`,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if version {
|
|
cointop.PrintVersion()
|
|
return nil
|
|
}
|
|
|
|
if test {
|
|
// TODO: deprecate test flag, only have test command
|
|
doTest()
|
|
return nil
|
|
}
|
|
|
|
// wipe before starting program
|
|
if reset || clean {
|
|
ct, err := cointop.NewCointop(&cointop.Config{
|
|
CacheDir: cacheDir,
|
|
ConfigFilepath: config,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if reset {
|
|
if err := ct.Reset(&cointop.ResetConfig{
|
|
Log: !silent,
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
} else if clean {
|
|
if err := ct.Clean(&cointop.CleanConfig{
|
|
Log: !silent,
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
var refreshRateP *uint
|
|
if cmd.Flags().Changed("refresh-rate") {
|
|
refreshRateP = &refreshRate
|
|
}
|
|
if refreshRateP == nil {
|
|
value, ok := getEnvInt("COINTOP_REFRESH_RATE")
|
|
if ok {
|
|
uv := uint(value)
|
|
refreshRateP = &uv
|
|
}
|
|
}
|
|
|
|
ct, err := cointop.NewCointop(&cointop.Config{
|
|
CacheDir: cacheDir,
|
|
ColorsDir: colorsDir,
|
|
NoCache: noCache,
|
|
ConfigFilepath: config,
|
|
CoinMarketCapAPIKey: cmcAPIKey,
|
|
APIChoice: apiChoice,
|
|
Colorscheme: colorscheme,
|
|
HideMarketbar: hideMarketbar,
|
|
HideChart: hideChart,
|
|
HideTable: hideTable,
|
|
HideStatusbar: hideStatusbar,
|
|
OnlyTable: onlyTable,
|
|
OnlyChart: onlyChart,
|
|
RefreshRate: refreshRateP,
|
|
PerPage: perPage,
|
|
MaxPages: maxPages,
|
|
HidePortfolioBalances: hidePortfolioBalances,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return ct.Run()
|
|
},
|
|
}
|
|
|
|
rootCmd.Flags().BoolVarP(&version, "version", "v", version, "Display current version")
|
|
rootCmd.Flags().BoolVarP(&test, "test", "", test, "Run test (for Homebrew)")
|
|
rootCmd.Flags().BoolVarP(&clean, "clean", "", clean, "Wipe clean the cache")
|
|
rootCmd.Flags().BoolVarP(&reset, "reset", "", reset, "Reset the config. Make sure to backup any relevant changes first!")
|
|
rootCmd.Flags().BoolVarP(&hideMarketbar, "hide-marketbar", "", hideMarketbar, "Hide the top marketbar")
|
|
rootCmd.Flags().BoolVarP(&hideChart, "hide-chart", "", hideChart, "Hide the chart view")
|
|
rootCmd.Flags().BoolVarP(&hideTable, "hide-table", "", hideTable, "Hide the table view")
|
|
rootCmd.Flags().BoolVarP(&hideStatusbar, "hide-statusbar", "", hideStatusbar, "Hide the bottom statusbar")
|
|
rootCmd.Flags().BoolVarP(&hidePortfolioBalances, "hide-portfolio-balances", "", hidePortfolioBalances, "Hide portfolio balances. Useful for when sharing screen or taking screenshots")
|
|
rootCmd.Flags().BoolVarP(&onlyTable, "only-table", "", onlyTable, "Show only the table. Hides the chart and top and bottom bars")
|
|
rootCmd.Flags().BoolVarP(&onlyChart, "only-chart", "", onlyChart, "Show only the chart. Hides the table and top and bottom bars")
|
|
rootCmd.Flags().BoolVarP(&silent, "silent", "s", silent, "Silence log ouput")
|
|
rootCmd.Flags().BoolVarP(&noCache, "no-cache", "", noCache, "No cache")
|
|
rootCmd.Flags().UintVarP(&refreshRate, "refresh-rate", "r", 60, "Refresh rate in seconds. Set to 0 to not auto-refresh")
|
|
rootCmd.Flags().UintVarP(&perPage, "per-page", "", perPage, "Per page")
|
|
rootCmd.Flags().UintVarP(&maxPages, "max-pages", "", maxPages, "Max number of pages")
|
|
rootCmd.Flags().StringVarP(&config, "config", "c", config, fmt.Sprintf("Config filepath. (default %s)", cointop.DefaultConfigFilepath))
|
|
rootCmd.Flags().StringVarP(&cmcAPIKey, "coinmarketcap-api-key", "", cmcAPIKey, "Set the CoinMarketCap API key")
|
|
rootCmd.Flags().StringVarP(&apiChoice, "api", "", apiChoice, "API choice. Available choices are \"coinmarketcap\" and \"coingecko\"")
|
|
rootCmd.Flags().StringVarP(&colorscheme, "colorscheme", "", colorscheme, fmt.Sprintf("Colorscheme to use (default \"cointop\").\n%s", cointop.ColorschemeHelpString()))
|
|
rootCmd.Flags().StringVarP(&cacheDir, "cache-dir", "", cacheDir, fmt.Sprintf("Cache directory (default %s)", cointop.DefaultCacheDir))
|
|
rootCmd.Flags().StringVarP(&colorsDir, "colors-dir", "", colorsDir, "Colorschemes directory")
|
|
|
|
return rootCmd
|
|
}
|
|
|
|
func getEnvBool(key string) bool {
|
|
val := os.Getenv(key)
|
|
if val == "" {
|
|
return false
|
|
}
|
|
|
|
v, err := strconv.ParseBool(val)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return v
|
|
}
|
|
|
|
func getEnvInt(key string) (int, bool) {
|
|
val := os.Getenv(key)
|
|
if val == "" {
|
|
return 0, false
|
|
}
|
|
|
|
v, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return 0, false
|
|
}
|
|
|
|
return v, true
|
|
}
|