refactor(ui/chat): move event handlers to state.go
This commit is contained in:
parent
dc40dc1f14
commit
eebe22e939
2 changed files with 75 additions and 75 deletions
|
|
@ -5,6 +5,8 @@ import (
|
|||
"log/slog"
|
||||
|
||||
"github.com/ayn2op/discordo/internal/http"
|
||||
"github.com/ayn2op/discordo/internal/notifications"
|
||||
"github.com/ayn2op/tview"
|
||||
"github.com/diamondburned/arikawa/v3/gateway"
|
||||
"github.com/diamondburned/arikawa/v3/session"
|
||||
"github.com/diamondburned/arikawa/v3/state"
|
||||
|
|
@ -76,6 +78,79 @@ func (v *View) onRaw(event *ws.RawEvent) {
|
|||
)
|
||||
}
|
||||
|
||||
func (v *View) onReady(r *gateway.ReadyEvent) {
|
||||
dmNode := tview.NewTreeNode("Direct Messages")
|
||||
root := v.guildsTree.
|
||||
GetRoot().
|
||||
ClearChildren().
|
||||
AddChild(dmNode)
|
||||
|
||||
for _, folder := range r.UserSettings.GuildFolders {
|
||||
if folder.ID == 0 && len(folder.GuildIDs) == 1 {
|
||||
guild, err := v.state.Cabinet.Guild(folder.GuildIDs[0])
|
||||
if err != nil {
|
||||
slog.Error(
|
||||
"failed to get guild from state",
|
||||
"guild_id",
|
||||
folder.GuildIDs[0],
|
||||
"err",
|
||||
err,
|
||||
)
|
||||
continue
|
||||
}
|
||||
|
||||
v.guildsTree.createGuildNode(root, *guild)
|
||||
} else {
|
||||
v.guildsTree.createFolderNode(folder)
|
||||
}
|
||||
}
|
||||
|
||||
v.guildsTree.SetCurrentNode(root)
|
||||
v.app.SetFocus(v.guildsTree)
|
||||
v.app.Draw()
|
||||
}
|
||||
|
||||
func (v *View) onMessageCreate(message *gateway.MessageCreateEvent) {
|
||||
selectedChannel := v.SelectedChannel()
|
||||
if selectedChannel != nil && selectedChannel.ID == message.ChannelID {
|
||||
v.removeTyper(message.Author.ID)
|
||||
v.messagesList.drawMessage(v.messagesList, message.Message)
|
||||
v.app.Draw()
|
||||
} else {
|
||||
if err := notifications.Notify(v.state, message, v.cfg); err != nil {
|
||||
slog.Error("failed to notify", "err", err, "channel_id", message.ChannelID, "message_id", message.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (v *View) onMessageUpdate(message *gateway.MessageUpdateEvent) {
|
||||
if selected := v.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
|
||||
v.onMessageDelete(&gateway.MessageDeleteEvent{ID: message.ID, ChannelID: message.ChannelID, GuildID: message.GuildID})
|
||||
}
|
||||
}
|
||||
|
||||
func (v *View) onMessageDelete(message *gateway.MessageDeleteEvent) {
|
||||
if selected := v.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
|
||||
messages, err := v.state.Cabinet.Messages(message.ChannelID)
|
||||
if err != nil {
|
||||
slog.Error("failed to get messages from state", "err", err, "channel_id", message.ChannelID)
|
||||
return
|
||||
}
|
||||
|
||||
v.messagesList.reset()
|
||||
v.messagesList.drawMessages(messages)
|
||||
v.app.Draw()
|
||||
}
|
||||
}
|
||||
|
||||
func (v *View) onGuildMembersChunk(event *gateway.GuildMembersChunkEvent) {
|
||||
v.messagesList.setFetchingChunk(false, uint(len(event.Members)))
|
||||
}
|
||||
|
||||
func (v *View) onGuildMemberRemove(event *gateway.GuildMemberRemoveEvent) {
|
||||
v.messageInput.cache.Invalidate(event.GuildID.String()+" "+event.User.Username, v.state.MemberState.SearchLimit)
|
||||
}
|
||||
|
||||
func (v *View) onTypingStart(event *gateway.TypingStartEvent) {
|
||||
selectedChannel := v.SelectedChannel()
|
||||
if selectedChannel == nil {
|
||||
|
|
|
|||
|
|
@ -8,11 +8,9 @@ import (
|
|||
|
||||
"github.com/ayn2op/discordo/internal/config"
|
||||
"github.com/ayn2op/discordo/internal/keyring"
|
||||
"github.com/ayn2op/discordo/internal/notifications"
|
||||
"github.com/ayn2op/discordo/internal/ui"
|
||||
"github.com/ayn2op/tview"
|
||||
"github.com/diamondburned/arikawa/v3/discord"
|
||||
"github.com/diamondburned/arikawa/v3/gateway"
|
||||
"github.com/diamondburned/ningen/v3"
|
||||
"github.com/diamondburned/ningen/v3/states/read"
|
||||
"github.com/gdamore/tcell/v3"
|
||||
|
|
@ -253,79 +251,6 @@ func (v *View) onReadUpdate(event *read.UpdateEvent) {
|
|||
v.app.Draw()
|
||||
}
|
||||
|
||||
func (v *View) onReady(r *gateway.ReadyEvent) {
|
||||
dmNode := tview.NewTreeNode("Direct Messages")
|
||||
root := v.guildsTree.
|
||||
GetRoot().
|
||||
ClearChildren().
|
||||
AddChild(dmNode)
|
||||
|
||||
for _, folder := range r.UserSettings.GuildFolders {
|
||||
if folder.ID == 0 && len(folder.GuildIDs) == 1 {
|
||||
guild, err := v.state.Cabinet.Guild(folder.GuildIDs[0])
|
||||
if err != nil {
|
||||
slog.Error(
|
||||
"failed to get guild from state",
|
||||
"guild_id",
|
||||
folder.GuildIDs[0],
|
||||
"err",
|
||||
err,
|
||||
)
|
||||
continue
|
||||
}
|
||||
|
||||
v.guildsTree.createGuildNode(root, *guild)
|
||||
} else {
|
||||
v.guildsTree.createFolderNode(folder)
|
||||
}
|
||||
}
|
||||
|
||||
v.guildsTree.SetCurrentNode(root)
|
||||
v.app.SetFocus(v.guildsTree)
|
||||
v.app.Draw()
|
||||
}
|
||||
|
||||
func (v *View) onMessageCreate(message *gateway.MessageCreateEvent) {
|
||||
selectedChannel := v.SelectedChannel()
|
||||
if selectedChannel != nil && selectedChannel.ID == message.ChannelID {
|
||||
v.removeTyper(message.Author.ID)
|
||||
v.messagesList.drawMessage(v.messagesList, message.Message)
|
||||
v.app.Draw()
|
||||
} else {
|
||||
if err := notifications.Notify(v.state, message, v.cfg); err != nil {
|
||||
slog.Error("failed to notify", "err", err, "channel_id", message.ChannelID, "message_id", message.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (v *View) onMessageUpdate(message *gateway.MessageUpdateEvent) {
|
||||
if selected := v.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
|
||||
v.onMessageDelete(&gateway.MessageDeleteEvent{ID: message.ID, ChannelID: message.ChannelID, GuildID: message.GuildID})
|
||||
}
|
||||
}
|
||||
|
||||
func (v *View) onMessageDelete(message *gateway.MessageDeleteEvent) {
|
||||
if selected := v.SelectedChannel(); selected != nil && selected.ID == message.ChannelID {
|
||||
messages, err := v.state.Cabinet.Messages(message.ChannelID)
|
||||
if err != nil {
|
||||
slog.Error("failed to get messages from state", "err", err, "channel_id", message.ChannelID)
|
||||
return
|
||||
}
|
||||
|
||||
v.messagesList.reset()
|
||||
v.messagesList.drawMessages(messages)
|
||||
v.app.Draw()
|
||||
}
|
||||
}
|
||||
|
||||
func (v *View) onGuildMembersChunk(event *gateway.GuildMembersChunkEvent) {
|
||||
v.messagesList.setFetchingChunk(false, uint(len(event.Members)))
|
||||
}
|
||||
|
||||
func (v *View) onGuildMemberRemove(event *gateway.GuildMemberRemoveEvent) {
|
||||
v.messageInput.cache.Invalidate(event.GuildID.String()+" "+event.User.Username, v.state.MemberState.SearchLimit)
|
||||
}
|
||||
|
||||
func (v *View) clearTypers() {
|
||||
v.typersMu.Lock()
|
||||
for _, timer := range v.typers {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue