74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
|
package cmd
|
||
|
|
||
|
import (
|
||
|
"github.com/pterm/pterm"
|
||
|
"github.com/rs/zerolog"
|
||
|
"github.com/rs/zerolog/log"
|
||
|
"github.com/satisfactorymodding/ficsit-cli/tea"
|
||
|
"github.com/spf13/cobra"
|
||
|
"github.com/spf13/viper"
|
||
|
"os"
|
||
|
"path"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var rootCmd = &cobra.Command{
|
||
|
Use: "ficsit",
|
||
|
Short: "cli mod manager for satisfactory",
|
||
|
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||
|
viper.SetConfigName("config")
|
||
|
viper.AddConfigPath(".")
|
||
|
viper.SetEnvPrefix("ficsit")
|
||
|
viper.AutomaticEnv()
|
||
|
|
||
|
_ = viper.ReadInConfig()
|
||
|
|
||
|
level, err := zerolog.ParseLevel(viper.GetString("log"))
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
zerolog.SetGlobalLevel(level)
|
||
|
|
||
|
if viper.GetBool("pretty") {
|
||
|
pterm.EnableStyling()
|
||
|
log.Logger = zerolog.New(os.Stdout).With().Timestamp().Logger().Output(zerolog.ConsoleWriter{
|
||
|
Out: os.Stdout,
|
||
|
TimeFormat: time.RFC3339,
|
||
|
})
|
||
|
} else {
|
||
|
pterm.DisableStyling()
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func Execute() {
|
||
|
// Execute tea as default
|
||
|
cmd, _, err := rootCmd.Find(os.Args[1:])
|
||
|
if (len(os.Args) <= 1 || os.Args[1] != "help") && (err != nil || cmd == rootCmd) {
|
||
|
tea.RunTea()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if err := rootCmd.Execute(); err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func init() {
|
||
|
baseCacheDir, err := os.UserCacheDir()
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
rootCmd.PersistentFlags().String("log", "info", "The log level to output")
|
||
|
rootCmd.PersistentFlags().Bool("pretty", true, "Whether to render pretty terminal output")
|
||
|
|
||
|
rootCmd.PersistentFlags().String("cache-dir", path.Join(baseCacheDir, "ficsit"), "The cache directory")
|
||
|
|
||
|
_ = viper.BindPFlag("log", rootCmd.PersistentFlags().Lookup("log"))
|
||
|
_ = viper.BindPFlag("pretty", rootCmd.PersistentFlags().Lookup("pretty"))
|
||
|
|
||
|
_ = viper.BindPFlag("cache-dir", rootCmd.PersistentFlags().Lookup("cache-dir"))
|
||
|
}
|