diff --git a/ui.go b/ui.go index 804dbd4..4a26e16 100644 --- a/ui.go +++ b/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() } diff --git a/util.go b/util.go index 9caf8ff..b51f673 100644 --- a/util.go +++ b/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) {