run.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package cmd
  2. import (
  3. "log/slog"
  4. "github.com/ayn2op/discordo/internal/config"
  5. "github.com/ayn2op/discordo/internal/logger"
  6. "github.com/rivo/tview"
  7. )
  8. var (
  9. discordState *State
  10. cfg *config.Config
  11. app = tview.NewApplication()
  12. mainFlex *MainFlex
  13. )
  14. func Run(token string) error {
  15. if err := logger.Load(); err != nil {
  16. return err
  17. }
  18. var err error
  19. cfg, err = config.Load()
  20. if err != nil {
  21. return err
  22. }
  23. // mainFlex must be initialized before opening a new state.
  24. mainFlex = newMainFlex()
  25. if token == "" {
  26. lf := NewLoginForm(func(token string, err error) {
  27. if err != nil {
  28. app.Stop()
  29. slog.Error("failed to login", "err", err)
  30. return
  31. }
  32. if err := openState(token); err != nil {
  33. app.Stop()
  34. slog.Error("failed to open state", "err", err)
  35. return
  36. }
  37. app.SetRoot(mainFlex, true)
  38. })
  39. app.SetRoot(lf, true)
  40. } else {
  41. if err := openState(token); err != nil {
  42. return err
  43. }
  44. app.SetRoot(mainFlex, true)
  45. }
  46. app.EnableMouse(cfg.Mouse)
  47. return app.Run()
  48. }