events.go 1.3 KB

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