cmd

package
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 11, 2025 License: GPL-3.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Command = &cobra.Command{
	Use:          "rong",
	Short:        "A material you color generator from image or video.",
	SilenceUsage: true,
	PersistentPostRun: func(_ *cobra.Command, _ []string) {
		if logfile != nil {
			slog.Info("Exiting rong")
			logfile.Close()
		}
	},
	PersistentPreRunE: func(cmd *cobra.Command, _ []string) error {
		if cmd.Name() == "_carapace" {
			return nil
		}

		tty := os.Getenv("TERM") != "dumb" &&
			(isatty.IsTerminal(os.Stderr.Fd()) ||
				isatty.IsCygwinTerminal(os.Stderr.Fd()))
		termcolor.NoColor = !tty

		opts := slogcolor.DefaultOptions
		opts.NoTime = true
		opts.SrcFileMode = 0
		opts.LevelTags = map[slog.Level]string{
			slog.LevelDebug: termcolor.New(termcolor.FgGreen).Sprint("DBG"),
			slog.LevelInfo:  termcolor.New(termcolor.FgCyan).Sprint("INF"),
			slog.LevelWarn:  termcolor.New(termcolor.FgYellow).Sprint("WRN"),
			slog.LevelError: termcolor.New(termcolor.FgRed).Sprint("ERR"),
		}

		verbose, _ := cmd.Flags().GetBool("verbose")
		if verbose {
			opts.Level = slog.LevelDebug
		}

		quiet, _ := cmd.Flags().GetBool("quiet")
		if quiet {
			opts.Level = slog.Level(100)
		}

		stderrHandler := slogcolor.NewHandler(os.Stderr, opts)

		logFilePath, err := cmd.Flags().GetString("log-file")
		if err != nil || logFilePath == "" {
			logger := slog.New(stderrHandler)
			slog.SetDefault(logger)
			viper.SetOptions(viper.WithLogger(logger))
		} else {
			err := os.MkdirAll(filepath.Dir(logFilePath), 0755)
			if err != nil {
				slog.Error("Failed to create parent directory for log file", "error", err)
			}

			file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
			if err != nil {
				logger := slog.New(stderrHandler)
				slog.SetDefault(logger)
				viper.SetOptions(viper.WithLogger(logger))
				slog.Error("Failed to open log-file", "error", err)
			} else {
				fileHanlder := slog.NewJSONHandler(file, &slog.HandlerOptions{
					AddSource: true,

					Level: slog.LevelDebug,
				})

				handler := slogmulti.Fanout(stderrHandler, fileHanlder)
				logger := slog.New(handler)
				slog.SetDefault(logger)
				viper.SetOptions(viper.WithLogger(logger))
				logfile = file
			}
		}

		viper.AddConfigPath("/etc/rong")
		viper.AddConfigPath(pathutil.ConfigDir)
		viper.SetConfigType("yaml")
		viper.SetConfigName("config")

		viper.SetEnvPrefix("rong")

		viper.SetDefault("dark", true)
		viper.SetDefault("variant", dynamic.Expressive)
		viper.SetDefault("platform", dynamic.Phone)

		cfgFlag := cmd.Flags().Lookup("config")
		if cfgFlag != nil && cfgFlag.Changed {
			viper.SetConfigFile(cfgFlag.Value.String())
		}

		return viper.ReadInConfig()
	},
}

Command is root command of the cli

Functions

This section is empty.

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL