main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "log"
  6. "github.com/rivo/tview"
  7. "github.com/zalando/go-keyring"
  8. )
  9. var (
  10. token string
  11. cfg *Config
  12. discordState *State
  13. app = tview.NewApplication()
  14. flex = tview.NewFlex()
  15. guildsTree *GuildsTree
  16. messagesText *MessagesText
  17. messageInput *MessageInput
  18. )
  19. func init() {
  20. flag.StringVar(&token, "token", "", "The authentication token.")
  21. }
  22. func main() {
  23. flag.Parse()
  24. if token != "" {
  25. go keyring.Set(name, "token", token)
  26. }
  27. var err error
  28. cfg, err = newConfig()
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. // Initialize UI
  33. guildsTree = newGuildsTree()
  34. messagesText = newMessagesText()
  35. messageInput = newMessageInput()
  36. discordState = newState(token)
  37. if err = discordState.Open(context.Background()); err != nil {
  38. log.Fatal(err)
  39. }
  40. right := tview.NewFlex()
  41. right.SetDirection(tview.FlexRow)
  42. right.AddItem(messagesText, 0, 1, false)
  43. right.AddItem(messageInput, 3, 1, false)
  44. // The guilds tree is always focused first at start-up.
  45. flex.AddItem(guildsTree, 0, 1, true)
  46. flex.AddItem(right, 0, 4, false)
  47. app.EnableMouse(cfg.Mouse)
  48. app.SetRoot(flex, true)
  49. if err = app.Run(); err != nil {
  50. log.Fatal(err)
  51. }
  52. }