Просмотр исходного кода

refactor(ui/chat): make yank actions command-based

ayn2op 1 месяц назад
Родитель
Сommit
1acf10994f
2 измененных файлов с 25 добавлено и 24 удалено
  1. 7 6
      internal/ui/chat/guilds_tree.go
  2. 18 18
      internal/ui/chat/messages_list.go

+ 7 - 6
internal/ui/chat/guilds_tree.go

@@ -418,8 +418,7 @@ func (gt *guildsTree) HandleEvent(event tcell.Event) tview.Command {
 		case keybind.Matches(event, gt.cfg.Keybinds.GuildsTree.SelectCurrent.Keybind):
 			return handler(tcell.NewEventKey(tcell.KeyEnter, "", tcell.ModNone))
 		case keybind.Matches(event, gt.cfg.Keybinds.GuildsTree.YankID.Keybind):
-			gt.yankID()
-			return nil
+			return gt.yankID()
 		}
 		// Do not fall through to TreeView defaults for unmatched keys.
 		return nil
@@ -427,21 +426,23 @@ func (gt *guildsTree) HandleEvent(event tcell.Event) tview.Command {
 	return gt.TreeView.HandleEvent(event)
 }
 
-func (gt *guildsTree) yankID() {
+func (gt *guildsTree) yankID() tview.Command {
 	node := gt.GetCurrentNode()
 	if node == nil {
-		return
+		return nil
 	}
 
 	// Reference of a tree node in the guilds tree is its ID.
 	// discord.Snowflake (discord.GuildID and discord.ChannelID) have the String method.
 	if id, ok := node.GetReference().(fmt.Stringer); ok {
-		go func() {
+		return func() tcell.Event {
 			if err := clipboard.Write(clipboard.FmtText, []byte(id.String())); err != nil {
 				slog.Error("failed to copy node id", "err", err)
 			}
-		}()
+			return nil
+		}
 	}
+	return nil
 }
 
 func (gt *guildsTree) findNodeByReference(reference any) *tview.TreeNode {

+ 18 - 18
internal/ui/chat/messages_list.go

@@ -872,14 +872,11 @@ func (ml *messagesList) HandleEvent(event tcell.Event) tview.Command {
 			ml.selectReply()
 			return nil
 		case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.YankID.Keybind):
-			ml.yankID()
-			return nil
+			return ml.yankMessageID()
 		case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.YankContent.Keybind):
-			ml.yankContent()
-			return nil
+			return ml.yankContent()
 		case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.YankURL.Keybind):
-			ml.yankURL()
-			return nil
+			return ml.yankURL()
 		case keybind.Matches(event, ml.cfg.Keybinds.MessagesList.Open.Keybind):
 			ml.open()
 			return nil
@@ -1014,46 +1011,49 @@ func (ml *messagesList) prependOlderMessages() int {
 	return len(messages)
 }
 
-func (ml *messagesList) yankID() {
+func (ml *messagesList) yankMessageID() tview.Command {
 	msg, err := ml.selectedMessage()
 	if err != nil {
 		slog.Error("failed to get selected message", "err", err)
-		return
+		return nil
 	}
 
-	go func() {
+	return func() tcell.Event {
 		if err := clipboard.Write(clipboard.FmtText, []byte(msg.ID.String())); err != nil {
 			slog.Error("failed to copy message id", "err", err)
 		}
-	}()
+		return nil
+	}
 }
 
-func (ml *messagesList) yankContent() {
+func (ml *messagesList) yankContent() tview.Command {
 	msg, err := ml.selectedMessage()
 	if err != nil {
 		slog.Error("failed to get selected message", "err", err)
-		return
+		return nil
 	}
 
-	go func() {
+	return func() tcell.Event {
 		if err := clipboard.Write(clipboard.FmtText, []byte(msg.Content)); err != nil {
 			slog.Error("failed to copy message content", "err", err)
 		}
-	}()
+		return nil
+	}
 }
 
-func (ml *messagesList) yankURL() {
+func (ml *messagesList) yankURL() tview.Command {
 	msg, err := ml.selectedMessage()
 	if err != nil {
 		slog.Error("failed to get selected message", "err", err)
-		return
+		return nil
 	}
 
-	go func() {
+	return func() tcell.Event {
 		if err := clipboard.Write(clipboard.FmtText, []byte(msg.URL())); err != nil {
 			slog.Error("failed to copy message url", "err", err)
 		}
-	}()
+		return nil
+	}
 }
 
 func (ml *messagesList) open() {