summaryrefslogtreecommitdiff
path: root/internal/client
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-21 16:54:43 +0200
committerKyren223 <Kyren223@proton.me>2024-12-21 16:54:43 +0200
commit90c54591cc3db27ef90893c8fe166c39279a4805 (patch)
tree9db9e001360a3e709f565da6286940957dff4000 /internal/client
parent4db087dbe44795a895febef14e8c7634f84719b5 (diff)
Implemented remembering messages in frequencies
Diffstat (limited to 'internal/client')
-rw-r--r--internal/client/ui/core/chat/chat.go44
-rw-r--r--internal/client/ui/core/state/state.go10
-rw-r--r--internal/client/ui/viminput/viminput.go20
3 files changed, 59 insertions, 15 deletions
diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go
index 83edc8f..12a39d0 100644
--- a/internal/client/ui/core/chat/chat.go
+++ b/internal/client/ui/core/chat/chat.go
@@ -1,6 +1,7 @@
package chat
import (
+ "log"
"strconv"
"strings"
"time"
@@ -337,20 +338,55 @@ func (m *Model) sendMessage() tea.Cmd {
// }
func (m *Model) SetReceiver(receiverIndex int) {
- if m.receiverIndex == nil || *m.receiverIndex != receiverIndex {
- m.index = -1
+ if m.receiverIndex != nil && *m.receiverIndex == receiverIndex {
+ return
}
+ m.ResetBeforeSwitch()
m.receiverIndex = &receiverIndex
m.frequencyIndex = nil
+ m.RestoreAfterSwitch()
}
func (m *Model) SetFrequency(networkIndex, frequencyIndex int) {
- if m.frequencyIndex == nil || *m.frequencyIndex != frequencyIndex {
- m.index = -1
+ if m.frequencyIndex != nil && *m.frequencyIndex == frequencyIndex {
+ return
}
+ m.ResetBeforeSwitch()
m.receiverIndex = nil
m.frequencyIndex = &frequencyIndex
m.networkIndex = networkIndex
+ m.RestoreAfterSwitch()
+}
+
+func (m *Model) ResetBeforeSwitch() {
+ source := m.frequencyIndex
+ if source == nil {
+ source = m.receiverIndex
+ }
+ if source == nil {
+ return
+ }
+
+ log.Println("Resetting", source)
+ state.State.IncompleteMessages[snowflake.ID(*source)] = m.vi.String()
+ m.vi.Reset()
+ m.index = -1
+}
+
+func (m *Model) RestoreAfterSwitch() {
+ source := m.frequencyIndex
+ if source == nil {
+ source = m.receiverIndex
+ }
+ if source == nil {
+ return
+ }
+
+ log.Println("Restoring", source)
+ msgs := state.State.IncompleteMessages
+ if val, ok := msgs[snowflake.ID(*source)]; ok {
+ m.vi.SetString(val)
+ }
}
func (m *Model) renderMessage(message data.Message, builder *strings.Builder, header bool) int {
diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go
index ed5ca85..285658f 100644
--- a/internal/client/ui/core/state/state.go
+++ b/internal/client/ui/core/state/state.go
@@ -8,11 +8,15 @@ import (
)
type state struct {
+ // Key is either a frequency or receiver
+ IncompleteMessages map[snowflake.ID]string
+
Messages map[snowflake.ID]*btree.BTreeG[data.Message]
- Networks []packet.FullNetwork
+ Networks []packet.FullNetwork
}
var State state = state{
- Networks: []packet.FullNetwork{},
- Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{},
+ Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{},
+ Networks: []packet.FullNetwork{},
+ IncompleteMessages: map[snowflake.ID]string{},
}
diff --git a/internal/client/ui/viminput/viminput.go b/internal/client/ui/viminput/viminput.go
index 4e2a079..5017344 100644
--- a/internal/client/ui/viminput/viminput.go
+++ b/internal/client/ui/viminput/viminput.go
@@ -341,14 +341,6 @@ func (m *Model) Blur() {
m.focus = false
}
-func (m *Model) SetLines(lines ...[]rune) {
- m.lines = lines
-}
-
-func (m *Model) Lines() [][]rune {
- return m.lines
-}
-
func (m *Model) SetCursorColumn(col int) {
if len(m.lines[m.cursorLine]) == 0 {
m.cursorColumn = 0
@@ -2021,6 +2013,18 @@ func (m *Model) String() string {
return message
}
+func (m *Model) SetString(s string) {
+ m.lines = [][]rune{[]rune("")}
+ i := 0
+ for _, c := range s {
+ if c == '\n' {
+ m.lines = append(m.lines, []rune(""))
+ } else {
+ m.lines[i] = append(m.lines[i], c)
+ }
+ }
+}
+
func (m *Model) Reset() {
m.lines = [][]rune{[]rune("")}
m.undoStack = []State{{[][]rune{[]rune("")}, 0, 0}}