run.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package run
  2. import (
  3. "log"
  4. "os"
  5. "path/filepath"
  6. "github.com/ayn2op/discordo/config"
  7. "github.com/ayn2op/discordo/ui"
  8. "github.com/rivo/tview"
  9. )
  10. var (
  11. discordState *State
  12. app = tview.NewApplication()
  13. mainFlex *MainFlex
  14. )
  15. func Run(token string) error {
  16. path := config.DefaultPath()
  17. err := os.MkdirAll(filepath.Dir(path), os.ModePerm)
  18. if err != nil {
  19. return err
  20. }
  21. err = config.Load(path)
  22. if err != nil {
  23. return err
  24. }
  25. path = config.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()
  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(config.Current.Mouse)
  61. return app.Run()
  62. }