浏览代码

refactor: reduce onMessagesViewInputCapture() cyclomatic complexity

ayntgl 4 年之前
父节点
当前提交
8001a530aa
共有 2 个文件被更改,包括 29 次插入54 次删除
  1. 25 50
      ui.go
  2. 4 4
      util.go

+ 25 - 50
ui.go

@@ -11,7 +11,7 @@ import (
 
 var (
 	selectedChannel *discordgo.Channel
-	selectedMessage int
+	selectedMessage int = -1
 )
 
 func newApp() *tview.Application {
@@ -127,94 +127,69 @@ func onMessagesViewInputCapture(e *tcell.EventKey) *tcell.EventKey {
 		return nil
 	}
 
+	ms := selectedChannel.Messages
+	if len(ms) == 0 {
+		return nil
+	}
+
 	switch e.Name() {
 	case conf.Keybindings.MessagesView.SelectPrevious:
-		ms := selectedChannel.Messages
-		if len(ms) == 0 {
-			return nil
-		}
-
 		if len(messagesView.GetHighlights()) == 0 {
-			selectedMessage = len(ms)
+			selectedMessage = len(ms) - 1
 		} else {
 			selectedMessage--
-			if selectedMessage < 1 {
-				selectedMessage = 1
+			if selectedMessage < 0 {
+				selectedMessage = 0
 			}
 		}
 
 		messagesView.
-			Highlight(ms[selectedMessage-1].ID).
+			Highlight(ms[selectedMessage].ID).
 			ScrollToHighlight()
 
 		return nil
 	case conf.Keybindings.MessagesView.SelectNext:
-		ms := selectedChannel.Messages
-		if len(ms) == 0 {
-			return nil
-		}
-
 		if len(messagesView.GetHighlights()) == 0 {
-			selectedMessage = len(ms)
+			selectedMessage = len(ms) - 1
 		} else {
 			selectedMessage++
-			if selectedMessage > len(ms) {
-				selectedMessage = len(ms)
+			if selectedMessage >= len(ms) {
+				selectedMessage = len(ms) - 1
 			}
 		}
 
 		messagesView.
-			Highlight(ms[selectedMessage-1].ID).
+			Highlight(ms[selectedMessage].ID).
 			ScrollToHighlight()
 
 		return nil
 	case conf.Keybindings.MessagesView.SelectFirst:
-		ms := selectedChannel.Messages
-		if len(ms) == 0 {
-			return nil
-		}
-
-		selectedMessage = 1
+		selectedMessage = 0
 		messagesView.
-			Highlight(ms[selectedMessage-1].ID).
+			Highlight(ms[selectedMessage].ID).
 			ScrollToHighlight()
 	case conf.Keybindings.MessagesView.SelectLast:
-		ms := selectedChannel.Messages
-		if len(ms) == 0 {
-			return nil
-		}
-
-		selectedMessage = len(ms)
+		selectedMessage = len(ms) - 1
 		messagesView.
-			Highlight(ms[selectedMessage-1].ID).
+			Highlight(ms[selectedMessage].ID).
 			ScrollToHighlight()
 	case conf.Keybindings.MessagesView.Reply:
-		ms := selectedChannel.Messages
-		if len(ms) == 0 {
-			return nil
-		}
-
 		hs := messagesView.GetHighlights()
 		if len(hs) == 0 {
 			return nil
 		}
 
-		selectedMessage = findIndexByMessageID(hs[0]) + 1
-		messageInputField.SetTitle("Replying to " + ms[selectedMessage-1].Author.Username)
+		m := findByMessageID(hs[0])
+		messageInputField.SetTitle("Replying to " + m.Author.Username)
 		app.SetFocus(messageInputField)
 	case conf.Keybindings.MessagesView.ReplyMention:
-		ms := selectedChannel.Messages
-		if len(ms) == 0 {
-			return nil
-		}
-
 		hs := messagesView.GetHighlights()
 		if len(hs) == 0 {
 			return nil
 		}
 
-		selectedMessage = findIndexByMessageID(hs[0]) + 1
-		messageInputField.SetTitle("[@] Replying to " + ms[selectedMessage-1].Author.Username)
+		m := findByMessageID(hs[0])
+		messageInputField.SetTitle("[@] Replying to " + m.Author.Username)
 		app.SetFocus(messageInputField)
 	}
 
@@ -252,8 +227,8 @@ func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
 			return nil
 		}
 
-		if selectedMessage != 0 {
-			m := selectedChannel.Messages[selectedMessage-1]
+		if len(messagesView.GetHighlights()) != 0 {
+			m := selectedChannel.Messages[selectedMessage]
 			d := &discordgo.MessageSend{
 				Content:         t,
 				Reference:       m.Reference(),
@@ -280,7 +255,7 @@ func onMessageInputFieldInputCapture(e *tcell.EventKey) *tcell.EventKey {
 		messageInputField.SetText("")
 		messageInputField.SetTitle("")
 
-		selectedMessage = 0
+		selectedMessage = -1
 		messagesView.Highlight()
 	}
 

+ 4 - 4
util.go

@@ -27,14 +27,14 @@ func generateChannelRepr(c *discordgo.Channel) string {
 	return repr
 }
 
-func findIndexByMessageID(mID string) int {
-	for i, m := range selectedChannel.Messages {
+func findByMessageID(mID string) *discordgo.Message {
+	for _, m := range selectedChannel.Messages {
 		if m.ID == mID {
-			return i
+			return m
 		}
 	}
 
-	return -1
+	return nil
 }
 
 func createPrivateChannels(cs []*discordgo.Channel, dmNode *tview.TreeNode) {