run.go 1.1 KB

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