mirror of
https://github.com/Kyren223/eko.git
synced 2026-08-30 19:31:30 +00:00
Implemented remembering messages in frequencies
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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{},
|
||||
}
|
||||
|
||||
@@ -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}}
|
||||
|
||||
Reference in New Issue
Block a user