summaryrefslogtreecommitdiff
path: root/internal/client/ui/core/state
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-01-30 16:44:11 +0200
committerKyren223 <Kyren223@proton.me>2025-01-30 16:44:11 +0200
commite98132bb4aa2a30d1caa68292328f2d0d553de8a (patch)
tree1d7280a37974157b7dce9163f70ffddab9eab136 /internal/client/ui/core/state
parenteac9e1ad0961eabe622037551275c0880bc22e1c (diff)
Added "new" indicator to show which messages are new when opening a
frequency, similar to how discord works
Diffstat (limited to 'internal/client/ui/core/state')
-rw-r--r--internal/client/ui/core/state/state.go35
1 files changed, 31 insertions, 4 deletions
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,
+ })
+}