events.go 746 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package chat
  2. import (
  3. "log/slog"
  4. "github.com/ayn2op/tview"
  5. "github.com/gdamore/tcell/v3"
  6. )
  7. type LogoutEvent struct{ tcell.EventTime }
  8. func NewLogoutEvent() *LogoutEvent {
  9. event := &LogoutEvent{}
  10. event.SetEventNow()
  11. return event
  12. }
  13. type QuitEvent struct{ tcell.EventTime }
  14. func NewQuitEvent() *QuitEvent {
  15. event := &QuitEvent{}
  16. event.SetEventNow()
  17. return event
  18. }
  19. func (v *View) closeState() tcell.Event {
  20. if err := v.CloseState(); err != nil {
  21. slog.Error("failed to close the session", "err", err)
  22. return tcell.NewEventError(err)
  23. }
  24. return nil
  25. }
  26. func (v *View) logout() tview.Command {
  27. return tview.BatchCommand{
  28. tview.EventCommand(v.closeState),
  29. tview.EventCommand(func() tcell.Event { return NewLogoutEvent() }),
  30. }
  31. }