root.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. RunE: func(cmd *cobra.Command, args []string) error {
  19. if err := logger.Load(); err != nil {
  20. return err
  21. }
  22. token, _ := cmd.Flags().GetString("token")
  23. if token == "" {
  24. var err error
  25. token, err = keyring.Get(consts.Name, "token")
  26. if err != nil {
  27. slog.Info("failed to retrieve token from keyring", "err", err)
  28. }
  29. }
  30. cfg, err := config.Load()
  31. if err != nil {
  32. return err
  33. }
  34. tview.Styles.PrimitiveBackgroundColor = tcell.GetColor(cfg.Theme.BackgroundColor)
  35. tview.Styles.TitleColor = tcell.GetColor(cfg.Theme.TitleColor)
  36. tview.Borders.Horizontal = cfg.Theme.Border.Preset.Horizontal
  37. tview.Borders.Vertical = cfg.Theme.Border.Preset.Vertical
  38. tview.Borders.TopLeft = cfg.Theme.Border.Preset.TopLeft
  39. tview.Borders.TopRight = cfg.Theme.Border.Preset.TopRight
  40. tview.Borders.BottomLeft = cfg.Theme.Border.Preset.BottomLeft
  41. tview.Borders.BottomRight = cfg.Theme.Border.Preset.BottomRight
  42. tview.Borders.HorizontalFocus = tview.Borders.Horizontal
  43. tview.Borders.VerticalFocus = tview.Borders.Vertical
  44. tview.Borders.TopLeftFocus = tview.Borders.TopLeft
  45. tview.Borders.TopRightFocus = tview.Borders.TopRight
  46. tview.Borders.BottomLeftFocus = tview.Borders.BottomLeft
  47. tview.Borders.BottomRightFocus = tview.Borders.BottomRight
  48. app = newApp(cfg)
  49. return app.run(token)
  50. },
  51. }
  52. Execute = rootCmd.Execute
  53. )
  54. func init() {
  55. rootCmd.Flags().StringP("token", "t", "", "the authentication token")
  56. }