|
|
@@ -1,6 +1,7 @@
|
|
|
package cmd
|
|
|
|
|
|
import (
|
|
|
+ "flag"
|
|
|
"log/slog"
|
|
|
|
|
|
"github.com/ayn2op/discordo/internal/config"
|
|
|
@@ -9,7 +10,6 @@ import (
|
|
|
"github.com/diamondburned/arikawa/v3/utils/ws"
|
|
|
"github.com/gdamore/tcell/v2"
|
|
|
"github.com/rivo/tview"
|
|
|
- "github.com/spf13/cobra"
|
|
|
"github.com/zalando/go-keyring"
|
|
|
)
|
|
|
|
|
|
@@ -18,78 +18,65 @@ var (
|
|
|
app *App
|
|
|
)
|
|
|
|
|
|
-var (
|
|
|
- rootCmd = &cobra.Command{
|
|
|
- PreRunE: func(cmd *cobra.Command, args []string) error {
|
|
|
- flags := cmd.Flags()
|
|
|
-
|
|
|
- var level slog.Level
|
|
|
- switch s, _ := flags.GetString("log-level"); s {
|
|
|
- case "debug":
|
|
|
- ws.EnableRawEvents = true
|
|
|
- level = slog.LevelDebug
|
|
|
- case "info":
|
|
|
- level = slog.LevelInfo
|
|
|
- case "warn":
|
|
|
- level = slog.LevelWarn
|
|
|
- case "error":
|
|
|
- level = slog.LevelError
|
|
|
- }
|
|
|
-
|
|
|
- var format logger.Format
|
|
|
- switch s, _ := flags.GetString("log-format"); s {
|
|
|
- case "text":
|
|
|
- format = logger.FormatText
|
|
|
- case "json":
|
|
|
- format = logger.FormatJson
|
|
|
- }
|
|
|
-
|
|
|
- return logger.Load(format, level)
|
|
|
- },
|
|
|
-
|
|
|
- RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
- token, _ := cmd.Flags().GetString("token")
|
|
|
- if token == "" {
|
|
|
- var err error
|
|
|
- token, err = keyring.Get(consts.Name, "token")
|
|
|
- if err != nil {
|
|
|
- slog.Info("failed to retrieve token from keyring", "err", err)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- cfg, err := config.Load()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
+func Run() error {
|
|
|
+ logLevel := flag.String("log-level", "info", "log level")
|
|
|
+ var level slog.Level
|
|
|
+ switch *logLevel {
|
|
|
+ case "debug":
|
|
|
+ ws.EnableRawEvents = true
|
|
|
+ level = slog.LevelDebug
|
|
|
+ case "info":
|
|
|
+ level = slog.LevelInfo
|
|
|
+ case "warn":
|
|
|
+ level = slog.LevelWarn
|
|
|
+ case "error":
|
|
|
+ level = slog.LevelError
|
|
|
+ }
|
|
|
|
|
|
- tview.Styles.PrimitiveBackgroundColor = tcell.GetColor(cfg.Theme.BackgroundColor)
|
|
|
+ logFormat := flag.String("log-format", "text", "log format")
|
|
|
+ var format logger.Format
|
|
|
+ switch *logFormat {
|
|
|
+ case "text":
|
|
|
+ format = logger.FormatText
|
|
|
+ case "json":
|
|
|
+ format = logger.FormatJson
|
|
|
+ }
|
|
|
|
|
|
- tview.Borders.Horizontal = cfg.Theme.Border.Preset.Horizontal
|
|
|
- tview.Borders.Vertical = cfg.Theme.Border.Preset.Vertical
|
|
|
- tview.Borders.TopLeft = cfg.Theme.Border.Preset.TopLeft
|
|
|
- tview.Borders.TopRight = cfg.Theme.Border.Preset.TopRight
|
|
|
- tview.Borders.BottomLeft = cfg.Theme.Border.Preset.BottomLeft
|
|
|
- tview.Borders.BottomRight = cfg.Theme.Border.Preset.BottomRight
|
|
|
+ if err := logger.Load(format, level); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
|
|
|
- tview.Borders.HorizontalFocus = tview.Borders.Horizontal
|
|
|
- tview.Borders.VerticalFocus = tview.Borders.Vertical
|
|
|
- tview.Borders.TopLeftFocus = tview.Borders.TopLeft
|
|
|
- tview.Borders.TopRightFocus = tview.Borders.TopRight
|
|
|
- tview.Borders.BottomLeftFocus = tview.Borders.BottomLeft
|
|
|
- tview.Borders.BottomRightFocus = tview.Borders.BottomRight
|
|
|
+ token := flag.String("token", "", "authentication token")
|
|
|
+ tok := *token
|
|
|
+ if tok == "" {
|
|
|
+ var err error
|
|
|
+ tok, err = keyring.Get(consts.Name, "token")
|
|
|
+ if err != nil {
|
|
|
+ slog.Info("failed to retrieve token from keyring", "err", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- app = newApp(cfg)
|
|
|
- return app.run(token)
|
|
|
- },
|
|
|
+ cfg, err := config.Load()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
- Execute = rootCmd.Execute
|
|
|
-)
|
|
|
+ tview.Styles.PrimitiveBackgroundColor = tcell.GetColor(cfg.Theme.BackgroundColor)
|
|
|
+
|
|
|
+ tview.Borders.Horizontal = cfg.Theme.Border.Preset.Horizontal
|
|
|
+ tview.Borders.Vertical = cfg.Theme.Border.Preset.Vertical
|
|
|
+ tview.Borders.TopLeft = cfg.Theme.Border.Preset.TopLeft
|
|
|
+ tview.Borders.TopRight = cfg.Theme.Border.Preset.TopRight
|
|
|
+ tview.Borders.BottomLeft = cfg.Theme.Border.Preset.BottomLeft
|
|
|
+ tview.Borders.BottomRight = cfg.Theme.Border.Preset.BottomRight
|
|
|
|
|
|
-func init() {
|
|
|
- flags := rootCmd.Flags()
|
|
|
- flags.StringP("token", "t", "", "the authentication token")
|
|
|
+ tview.Borders.HorizontalFocus = tview.Borders.Horizontal
|
|
|
+ tview.Borders.VerticalFocus = tview.Borders.Vertical
|
|
|
+ tview.Borders.TopLeftFocus = tview.Borders.TopLeft
|
|
|
+ tview.Borders.TopRightFocus = tview.Borders.TopRight
|
|
|
+ tview.Borders.BottomLeftFocus = tview.Borders.BottomLeft
|
|
|
+ tview.Borders.BottomRightFocus = tview.Borders.BottomRight
|
|
|
|
|
|
- flags.String("log-level", "info", "log level")
|
|
|
- flags.String("log-format", "text", "log format")
|
|
|
+ app = newApp(cfg)
|
|
|
+ return app.run(tok)
|
|
|
}
|