Kaynağa Gözat

refactor(ui/chat): move event handlers to state.go

ayn2op 3 ay önce
ebeveyn
işleme
eebe22e939
2 değiştirilmiş dosya ile 75 ekleme ve 75 silme
  1. 75 0
      internal/ui/chat/state.go
  2. 0 75
      internal/ui/chat/view.go

+ 75 - 0
internal/ui/chat/state.go

@@ -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 {

+ 0 - 75
internal/ui/chat/view.go

@@ -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 {