root.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package cmd
  2. import (
  3. "log/slog"
  4. "github.com/ayn2op/discordo/internal/config"
  5. "github.com/ayn2op/discordo/internal/consts"
  6. "github.com/ayn2op/discordo/internal/logger"
  7. "github.com/gdamore/tcell/v2"
  8. "github.com/rivo/tview"
  9. "github.com/spf13/cobra"
  10. "github.com/zalando/go-keyring"
  11. )
  12. var (
  13. discordState *State
  14. app *App
  15. )
  16. var (
  17. rootCmd = &cobra.Command{
  18. PreRunE: func(cmd *cobra.Command, args []string) error {
  19. var level slog.Level
  20. switch str, _ := cmd.Flags().GetString("log-level"); str {
  21. case "debug":
  22. level = slog.LevelDebug
  23. case "info":
  24. level = slog.LevelInfo
  25. case "warn":
  26. level = slog.LevelWarn
  27. case "error":
  28. level = slog.LevelError
  29. }
  30. return logger.Load(level)
  31. },
  32. RunE: func(cmd *cobra.Command, args []string) error {
  33. token, _ := cmd.Flags().GetString("token")
  34. if token == "" {
  35. var err error
  36. token, err = keyring.Get(consts.Name, "token")
  37. if err != nil {
  38. slog.Info("failed to retrieve token from keyring", "err", err)
  39. }
  40. }
  41. cfg, err := config.Load()
  42. if err != nil {
  43. return err
  44. }
  45. tview.Styles.PrimitiveBackgroundColor = tcell.GetColor(cfg.Theme.BackgroundColor)
  46. tview.Borders.Horizontal = cfg.Theme.Border.Preset.Horizontal
  47. tview.Borders.Vertical = cfg.Theme.Border.Preset.Vertical
  48. tview.Borders.TopLeft = cfg.Theme.Border.Preset.TopLeft
  49. tview.Borders.TopRight = cfg.Theme.Border.Preset.TopRight
  50. tview.Borders.BottomLeft = cfg.Theme.Border.Preset.BottomLeft
  51. tview.Borders.BottomRight = cfg.Theme.Border.Preset.BottomRight
  52. tview.Borders.HorizontalFocus = tview.Borders.Horizontal
  53. tview.Borders.VerticalFocus = tview.Borders.Vertical
  54. tview.Borders.TopLeftFocus = tview.Borders.TopLeft
  55. tview.Borders.TopRightFocus = tview.Borders.TopRight
  56. tview.Borders.BottomLeftFocus = tview.Borders.BottomLeft
  57. tview.Borders.BottomRightFocus = tview.Borders.BottomRight
  58. app = newApp(cfg)
  59. return app.run(token)
  60. },
  61. }
  62. Execute = rootCmd.Execute
  63. )
  64. func init() {
  65. flags := rootCmd.Flags()
  66. flags.StringP("token", "t", "", "the authentication token")
  67. flags.StringP("log-level", "l", "info", "log level")
  68. }