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.
cointop/cmd/commands/root.go

124 lines
4.1 KiB
Go

package cmd
import (
"fmt"
"github.com/miguelmota/cointop/cointop"
"github.com/spf13/cobra"
)
// RootCmd ...
func RootCmd() *cobra.Command {
var version bool
var test bool
var clean bool
var reset bool
var hideMarketbar bool
var hideChart bool
var hideStatusbar bool
var onlyTable bool
var silent bool
var noCache bool
var refreshRate uint
var config string
var cmcAPIKey string
var apiChoice string
var colorscheme string
var perPage = cointop.DefaultPerPage
var cacheDir string
var colorsDir string
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
}
// NOTE: if reset flag enabled, reset and run cointop
if reset {
if err := cointop.Reset(&cointop.ResetConfig{
Log: !silent,
}); err != nil {
return err
}
}
// NOTE: if clean flag enabled, clean and run cointop
if clean {
if err := cointop.Clean(&cointop.CleanConfig{
Log: !silent,
}); err != nil {
return err
}
}
var refreshRateP *uint
if cmd.Flags().Changed("refresh-rate") {
refreshRateP = &refreshRate
}
ct, err := cointop.NewCointop(&cointop.Config{
CacheDir: cacheDir,
ColorsDir: colorsDir,
NoCache: noCache,
ConfigFilepath: config,
CoinMarketCapAPIKey: cmcAPIKey,
APIChoice: apiChoice,
Colorscheme: colorscheme,
HideMarketbar: hideMarketbar,
HideChart: hideChart,
HideStatusbar: hideStatusbar,
OnlyTable: onlyTable,
RefreshRate: refreshRateP,
PerPage: perPage,
})
if err != nil {
return err
}
return ct.Run()
},
}
rootCmd.Flags().BoolVarP(&version, "version", "v", false, "Display current version")
rootCmd.Flags().BoolVarP(&test, "test", "", false, "Run test (for Homebrew)")
rootCmd.Flags().BoolVarP(&clean, "clean", "", false, "Wipe clean the cache")
rootCmd.Flags().BoolVarP(&reset, "reset", "", false, "Reset the config. Make sure to backup any relevant changes first!")
rootCmd.Flags().BoolVarP(&hideMarketbar, "hide-marketbar", "", false, "Hide the top marketbar")
rootCmd.Flags().BoolVarP(&hideChart, "hide-chart", "", false, "Hide the chart view")
rootCmd.Flags().BoolVarP(&hideStatusbar, "hide-statusbar", "", false, "Hide the bottom statusbar")
rootCmd.Flags().BoolVarP(&onlyTable, "only-table", "", false, "Show only the table. Hides the chart and top and bottom bars")
rootCmd.Flags().BoolVarP(&silent, "silent", "s", false, "Silence log ouput")
rootCmd.Flags().BoolVarP(&noCache, "no-cache", "", false, "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().StringVarP(&config, "config", "c", "", fmt.Sprintf("Config filepath. (default %s)", cointop.DefaultConfigFilepath))
rootCmd.Flags().StringVarP(&cmcAPIKey, "coinmarketcap-api-key", "", "", "Set the CoinMarketCap API key")
rootCmd.Flags().StringVarP(&apiChoice, "api", "", "", "API choice. Available choices are \"coinmarketcap\" and \"coingecko\"")
rootCmd.Flags().StringVarP(&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
}