events.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 tokenCommand(token string) tview.Command {
  14. return func() tcell.Event {
  15. event := &tokenEvent{token: token}
  16. event.SetEventNow()
  17. return event
  18. }
  19. }
  20. type loginEvent struct{ tcell.EventTime }
  21. func getToken() tview.Command {
  22. return func() tcell.Event {
  23. token, err := keyring.GetToken()
  24. if err != nil {
  25. slog.Info("failed to retrieve token from keyring", "err", err)
  26. event := &loginEvent{}
  27. event.SetEventNow()
  28. return event
  29. }
  30. event := &tokenEvent{token: token}
  31. event.SetEventNow()
  32. return event
  33. }
  34. }
  35. func setToken(token string) tview.Command {
  36. return func() tcell.Event {
  37. if err := keyring.SetToken(token); err != nil {
  38. slog.Error("failed to set token to keyring", "err", err)
  39. return tcell.NewEventError(err)
  40. }
  41. return nil
  42. }
  43. }
  44. func deleteToken() tview.Command {
  45. return func() tcell.Event {
  46. if err := keyring.DeleteToken(); err != nil {
  47. slog.Error("failed to delete token from keyring", "err", err)
  48. return tcell.NewEventError(err)
  49. }
  50. return nil
  51. }
  52. }
  53. func initClipboard() tview.Command {
  54. return func() tcell.Event {
  55. if err := clipboard.Init(); err != nil {
  56. slog.Error("failed to init clipboard", "err", err)
  57. return tcell.NewEventError(err)
  58. }
  59. return nil
  60. }
  61. }