diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/client/ui/core/core.go | 24 | ||||
| -rw-r--r-- | internal/client/ui/core/state/state.go | 11 | ||||
| -rw-r--r-- | internal/packet/types.go | 3 |
3 files changed, 35 insertions, 3 deletions
diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index 5115274..57bac20 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -11,6 +11,7 @@ import ( "github.com/charmbracelet/bubbles/timer" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" + "github.com/google/btree" "github.com/kyren223/eko/internal/client/gateway" "github.com/kyren223/eko/internal/client/ui" "github.com/kyren223/eko/internal/client/ui/core/chat" @@ -213,6 +214,29 @@ func (m *Model) updateConnected(msg tea.Msg) tea.Cmd { network.Frequencies = frequencies } + case *packet.MessagesInfo: + for _, id := range msg.RemoveMessages { + for _, btree := range state.State.Messages { + btree.Delete(data.Message{ID: id}) + } + } + + for _, message := range msg.Messages { + msgSource := message.FrequencyID + if msgSource == nil { + msgSource = message.ReceiverID + } + bt := state.State.Messages[*msgSource] + if bt == nil { + bt = btree.NewG(2, func(a, b data.Message) bool { + return a.ID < b.ID + }) + state.State.Messages[*msgSource] = bt + } + bt.ReplaceOrInsert(message) + + } + case tea.KeyMsg: key := msg.Type switch key { diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go index e40cdc9..ed5ca85 100644 --- a/internal/client/ui/core/state/state.go +++ b/internal/client/ui/core/state/state.go @@ -1,11 +1,18 @@ package state import ( + "github.com/google/btree" + "github.com/kyren223/eko/internal/data" "github.com/kyren223/eko/internal/packet" + "github.com/kyren223/eko/pkg/snowflake" ) type state struct { - Networks []packet.FullNetwork + Messages map[snowflake.ID]*btree.BTreeG[data.Message] + Networks []packet.FullNetwork } -var State state = state{} +var State state = state{ + Networks: []packet.FullNetwork{}, + Messages: map[snowflake.ID]*btree.BTreeG[data.Message]{}, +} diff --git a/internal/packet/types.go b/internal/packet/types.go index 6df3d65..a336624 100644 --- a/internal/packet/types.go +++ b/internal/packet/types.go @@ -180,7 +180,8 @@ func (m *RequestMessages) Type() PacketType { } type MessagesInfo struct { - Messages []data.Message + Messages []data.Message + RemoveMessages []snowflake.ID } func (m *MessagesInfo) Type() PacketType { |
