Implemented remembering messages in frequencies

This commit is contained in:
2024-12-21 16:54:43 +02:00
parent 4db087dbe4
commit 90c54591cc
3 changed files with 59 additions and 15 deletions

View File

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

View File

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

View File

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