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

109 lines
3.8 KiB
Go

package cmd
import (
"fmt"
"github.com/miguelmota/cointop/cointop"
"github.com/spf13/cobra"
)
// RootCmd ...
func RootCmd() *cobra.Command {
var version, test, clean, reset, hideMarketbar, hideChart, hideStatusbar, onlyTable, silent, noCache bool
var refreshRate uint
var config, cmcAPIKey, apiChoice, colorscheme string
perPage := cointop.DefaultPerPage
cacheDir := cointop.DefaultCacheDir
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,
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, "Cache directory")
return rootCmd
}