main.go 1.3 KB

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