main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. configPath string
  15. discordState *State
  16. app = tview.NewApplication()
  17. mainFlex *MainFlex
  18. )
  19. func init() {
  20. t, _ := keyring.Get(config.Name, "token")
  21. flag.StringVar(&token, "token", t, "The authentication token.")
  22. flag.StringVar(&configPath, "config", "none", "Optional alternative configuration file.")
  23. path, err := os.UserCacheDir()
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. path = filepath.Join(path, config.Name)
  28. err = os.MkdirAll(path, os.ModePerm)
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. path = filepath.Join(path, "logs.txt")
  33. f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. log.SetOutput(f)
  38. log.SetFlags(log.LstdFlags | log.Llongfile)
  39. }
  40. func main() {
  41. flag.Parse()
  42. if err := config.Load(configPath); err != nil {
  43. log.Fatal(err)
  44. }
  45. if token == "" {
  46. lf := ui.NewLoginForm()
  47. go func() {
  48. mainFlex = newMainFlex()
  49. if err := openState(<-lf.Token); err != nil {
  50. log.Fatal(err)
  51. }
  52. app.QueueUpdateDraw(func() {
  53. app.SetRoot(mainFlex, true)
  54. })
  55. }()
  56. app.SetRoot(lf, true)
  57. } else {
  58. mainFlex = newMainFlex()
  59. if err := openState(token); err != nil {
  60. log.Fatal(err)
  61. }
  62. app.SetRoot(mainFlex, true)
  63. }
  64. app.EnableMouse(config.Current.Mouse)
  65. if err := app.Run(); err != nil {
  66. log.Fatal(err)
  67. }
  68. }