run.go 1.3 KB

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