From 6d91f3f9af3efc6e77ec89979fee18366c7b8847 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Thu, 19 Dec 2024 18:42:53 +0200 Subject: Implemented processing data --- internal/client/ui/core/core.go | 24 ++++++++++++++++++++++++ internal/client/ui/core/state/state.go | 11 +++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) (limited to 'internal/client') 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]{}, +} -- cgit v1.3.1