From e98132bb4aa2a30d1caa68292328f2d0d553de8a Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Thu, 30 Jan 2025 16:44:11 +0200 Subject: Added "new" indicator to show which messages are new when opening a frequency, similar to how discord works --- internal/client/ui/core/state/state.go | 35 ++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'internal/client/ui/core/state') diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go index b157771..04d592e 100644 --- a/internal/client/ui/core/state/state.go +++ b/internal/client/ui/core/state/state.go @@ -43,13 +43,15 @@ var State state = state{ } type UserData struct { - Networks []snowflake.ID - Peers []snowflake.ID + LastReadMessage map[snowflake.ID]*snowflake.ID + Networks []snowflake.ID + Peers []snowflake.ID } var Data UserData = UserData{ - Networks: []snowflake.ID{}, - Peers: []snowflake.ID{}, + LastReadMessage: map[snowflake.ID]*snowflake.ID{}, + Networks: []snowflake.ID{}, + Peers: []snowflake.ID{}, } var UserID *snowflake.ID = nil @@ -207,6 +209,9 @@ func FromJsonUserData(s string) { return } Data = data + if Data.LastReadMessage == nil { + Data.LastReadMessage = map[snowflake.ID]*snowflake.ID{} + } } func UpdateTrusteds(info *packet.TrustInfo) { @@ -218,3 +223,25 @@ func UpdateTrusteds(info *packet.TrustInfo) { State.Trusteds[trusted] = info.TrustedPublicKeys[i] } } + +func GetLastReadMessage(id snowflake.ID) *snowflake.ID { + btree := State.Messages[id] + if btree == nil { + return nil + } + msg, ok := btree.Max() + if !ok { + return nil + } + return &msg.ID +} + +func SetLastReadMessage(id snowflake.ID, message snowflake.ID) { + Data.LastReadMessage[id] = &message + + data := JsonUserData() + gateway.SendAsync(&packet.SetUserData{ + Data: &data, + User: nil, + }) +} -- cgit v1.3.1