events.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package root
  2. import (
  3. "log/slog"
  4. "github.com/ayn2op/discordo/internal/clipboard"
  5. "github.com/ayn2op/discordo/internal/keyring"
  6. "github.com/ayn2op/tview"
  7. "github.com/gdamore/tcell/v3"
  8. )
  9. type tokenEvent struct {
  10. tcell.EventTime
  11. token string
  12. }
  13. func newTokenEvent(token string) *tokenEvent {
  14. event := &tokenEvent{token: token}
  15. event.SetEventNow()
  16. return event
  17. }
  18. func tokenCommand(token string) tview.Command {
  19. return tview.EventCommand(func() tcell.Event {
  20. return newTokenEvent(token)
  21. })
  22. }
  23. type loginEvent struct{ tcell.EventTime }
  24. func newLoginEvent() *loginEvent {
  25. event := &loginEvent{}
  26. event.SetEventNow()
  27. return event
  28. }
  29. func getToken() tview.Command {
  30. return tview.EventCommand(func() tcell.Event {
  31. token, err := keyring.GetToken()
  32. if err != nil {
  33. slog.Info("failed to retrieve token from keyring", "err", err)
  34. return newLoginEvent()
  35. }
  36. return newTokenEvent(token)
  37. })
  38. }
  39. func setToken(token string) tview.Command {
  40. return tview.EventCommand(func() tcell.Event {
  41. if err := keyring.SetToken(token); err != nil {
  42. slog.Error("failed to set token to keyring", "err", err)
  43. return tcell.NewEventError(err)
  44. }
  45. return nil
  46. })
  47. }
  48. func deleteToken() tview.Command {
  49. return tview.EventCommand(func() tcell.Event {
  50. if err := keyring.DeleteToken(); err != nil {
  51. slog.Error("failed to delete token from keyring", "err", err)
  52. return tcell.NewEventError(err)
  53. }
  54. return nil
  55. })
  56. }
  57. func initClipboard() tview.Command {
  58. return tview.EventCommand(func() tcell.Event {
  59. if err := clipboard.Init(); err != nil {
  60. slog.Error("failed to init clipboard", "err", err)
  61. return tcell.NewEventError(err)
  62. }
  63. return nil
  64. })
  65. }