run.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package cmd
  2. import (
  3. "log"
  4. "os"
  5. "path/filepath"
  6. "github.com/ayn2op/discordo/internal/config"
  7. "github.com/ayn2op/discordo/internal/constants"
  8. "github.com/ayn2op/discordo/ui"
  9. "github.com/rivo/tview"
  10. )
  11. var (
  12. discordState *State
  13. cfg *config.Config
  14. app = tview.NewApplication()
  15. mainFlex *MainFlex
  16. )
  17. func Run(token string) error {
  18. var err error
  19. cfg, err = config.Load()
  20. if err != nil {
  21. return err
  22. }
  23. logPath, err := os.UserCacheDir()
  24. if err != nil {
  25. return err
  26. }
  27. logPath = filepath.Join(logPath, constants.Name)
  28. err = os.MkdirAll(logPath, os.ModePerm)
  29. if err != nil {
  30. return err
  31. }
  32. logPath = filepath.Join(logPath, "logs.txt")
  33. f, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY, os.ModePerm)
  34. if err != nil {
  35. return err
  36. }
  37. log.SetOutput(f)
  38. log.SetFlags(log.LstdFlags | log.Llongfile)
  39. if token == "" {
  40. lf := ui.NewLoginForm(cfg)
  41. go func() {
  42. mainFlex = newMainFlex()
  43. if err := <-lf.Error; err != nil {
  44. app.Stop()
  45. log.Fatal(err)
  46. }
  47. if err := openState(<-lf.Token); err != nil {
  48. app.Stop()
  49. log.Fatal(err)
  50. }
  51. app.QueueUpdateDraw(func() {
  52. app.SetRoot(mainFlex, true)
  53. })
  54. }()
  55. app.SetRoot(lf, true)
  56. } else {
  57. mainFlex = newMainFlex()
  58. if err := openState(token); err != nil {
  59. app.Stop()
  60. }
  61. app.SetRoot(mainFlex, true)
  62. }
  63. app.EnableMouse(cfg.Mouse)
  64. return app.Run()
  65. }