run.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. type Cmd struct {
  16. Token string `default:"${token}" help:"The authentication token." short:"t"`
  17. }
  18. func (r *Cmd) Run() error {
  19. path := config.DefaultPath()
  20. err := os.MkdirAll(filepath.Dir(path), os.ModePerm)
  21. if err != nil {
  22. return err
  23. }
  24. err = config.Load(path)
  25. if err != nil {
  26. return err
  27. }
  28. path = config.DefaultLogPath()
  29. err = os.MkdirAll(filepath.Dir(path), os.ModePerm)
  30. if err != nil {
  31. return err
  32. }
  33. f, err := os.OpenFile(path, 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 r.Token == "" {
  40. lf := ui.NewLoginForm()
  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(r.Token); err != nil {
  59. app.Stop()
  60. }
  61. app.SetRoot(mainFlex, true)
  62. }
  63. app.EnableMouse(config.Current.Mouse)
  64. return app.Run()
  65. }