diff options
| author | Kyren223 <Kyren223@proton.me> | 2024-12-24 17:52:01 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2024-12-24 17:52:01 +0200 |
| commit | d4ca377a72a04c814d7241e8937ce3cfdca7f00c (patch) | |
| tree | 2db4e3b595aa17b0b6ee4e3f5e3b78948b59d7f3 /internal/client/ui/core | |
| parent | 0746f3de04c81e39f5602e6822e2dbb45e1fa89b (diff) | |
Made the message view more stateful by remembering where in the view the
user was
Diffstat (limited to 'internal/client/ui/core')
| -rw-r--r-- | internal/client/ui/core/chat/chat.go | 16 | ||||
| -rw-r--r-- | internal/client/ui/core/state/state.go | 18 |
2 files changed, 24 insertions, 10 deletions
diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go index 90e8d0d..0d8f22c 100644 --- a/internal/client/ui/core/chat/chat.go +++ b/internal/client/ui/core/chat/chat.go @@ -255,26 +255,34 @@ func (m *Model) SetFrequency(networkIndex, frequencyIndex int) tea.Cmd { } func (m *Model) ResetBeforeSwitch() { - m.index = -1 if m.frequencyIndex != -1 && m.networkIndex != -1 { network := state.State.Networks[m.networkIndex] frequencyId := network.Frequencies[m.frequencyIndex].ID log.Println("Saving", frequencyId) - state.State.IncompleteMessages[frequencyId] = m.vi.String() + state.State.FrequencyState[frequencyId] = state.Frequency{ + IncompleteMessage: m.vi.String(), + Offset: m.offset, + MaxHeight: m.maxMessagesHeight, + } m.vi.Reset() + m.offset = SnapToBottom + m.maxMessagesHeight = -1 + m.index = -1 } else if m.receiverIndex != -1 { // TODO: receiver } } func (m *Model) RestoreAfterSwitch() tea.Cmd { - msgs := state.State.IncompleteMessages + msgs := state.State.FrequencyState if m.frequencyIndex != -1 && m.networkIndex != -1 { network := state.State.Networks[m.networkIndex] frequencyId := network.Frequencies[m.frequencyIndex].ID log.Println("Restoring", frequencyId) if val, ok := msgs[frequencyId]; ok { - m.vi.SetString(val) + m.vi.SetString(val.IncompleteMessage) + m.offset = val.Offset + m.maxMessagesHeight = val.MaxHeight } return gateway.Send(&packet.RequestMessages{ ReceiverID: nil, diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go index 762cf2f..3f9cb5a 100644 --- a/internal/client/ui/core/state/state.go +++ b/internal/client/ui/core/state/state.go @@ -7,18 +7,24 @@ import ( "github.com/kyren223/eko/pkg/snowflake" ) +type Frequency struct { + IncompleteMessage string + Offset int + MaxHeight int +} + type state struct { // Key is either a frequency or receiver - IncompleteMessages map[snowflake.ID]string - LastFrequency map[snowflake.ID]snowflake.ID // key is network + FrequencyState map[snowflake.ID]Frequency + LastFrequency map[snowflake.ID]snowflake.ID // key is network Messages map[snowflake.ID]*btree.BTreeG[data.Message] Networks []packet.FullNetwork } var State state = state{ - IncompleteMessages: map[snowflake.ID]string{}, - LastFrequency: map[snowflake.ID]snowflake.ID{}, - Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{}, - Networks: []packet.FullNetwork{}, + FrequencyState: map[snowflake.ID]Frequency{}, + LastFrequency: map[snowflake.ID]snowflake.ID{}, + Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{}, + Networks: []packet.FullNetwork{}, } |
