main.go 1.4 KB

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