From ccea2247c053962647b79f232d7e5ac834b9f81e Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Mon, 10 Feb 2025 19:36:07 +0200 Subject: Added a way to block/unblock users client-side --- internal/client/ui/core/chat/chat.go | 32 ++++++++++++++++++++++++++++++-- internal/client/ui/core/core.go | 3 +++ internal/client/ui/core/state/state.go | 14 +++++++++++++- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/internal/client/ui/core/chat/chat.go b/internal/client/ui/core/chat/chat.go index 09b3872..bc3df81 100644 --- a/internal/client/ui/core/chat/chat.go +++ b/internal/client/ui/core/chat/chat.go @@ -519,7 +519,21 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { } if m.receiverIndex != -1 { - // TODO: unlock user + userId := state.Data.Signals[m.receiverIndex] + + if userId == *state.UserID { + return m, nil + } + + if _, ok := state.State.BlockedUsers[userId]; !ok { + return m, nil + } + + return m, gateway.Send(&packet.BlockUser{ + User: userId, + Block: false, + }) + } else { networkId := state.NetworkId(m.networkIndex) network := state.State.Networks[*networkId] @@ -558,7 +572,21 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { return m, nil } if m.receiverIndex != -1 { - // TODO: block user + userId := state.Data.Signals[m.receiverIndex] + + if userId == *state.UserID { + return m, nil + } + + if _, ok := state.State.BlockedUsers[userId]; ok { + return m, nil + } + + return m, gateway.Send(&packet.BlockUser{ + User: userId, + Block: true, + }) + } else { networkId := state.NetworkId(m.networkIndex) network := state.State.Networks[*networkId] diff --git a/internal/client/ui/core/core.go b/internal/client/ui/core/core.go index ec40a23..96d6394 100644 --- a/internal/client/ui/core/core.go +++ b/internal/client/ui/core/core.go @@ -329,6 +329,9 @@ func (m *Model) updateConnected(message tea.Msg) tea.Cmd { case *packet.TrustInfo: state.UpdateTrustedUsers(msg) + case *packet.BlockInfo: + state.UpdateBlockedUsers(msg) + case *packet.NotificationsInfo: signals := state.UpdateNotifications(msg) if m.networkList.Index() == networklist.SignalsIndex { diff --git a/internal/client/ui/core/state/state.go b/internal/client/ui/core/state/state.go index 58ae0f2..607345f 100644 --- a/internal/client/ui/core/state/state.go +++ b/internal/client/ui/core/state/state.go @@ -32,6 +32,7 @@ type state struct { Members map[snowflake.ID]map[snowflake.ID]data.Member // key is network id then user id Users map[snowflake.ID]data.User // key is user id TrustedUsers map[snowflake.ID]ed25519.PublicKey // key is user id + BlockedUsers map[snowflake.ID]struct{} // key is user id LastReadMessages map[snowflake.ID]*snowflake.ID // key is frequency id or receiver id Notifications map[snowflake.ID]int // key is frequency id or receiver id @@ -46,8 +47,9 @@ var State state = state{ Members: map[snowflake.ID]map[snowflake.ID]data.Member{}, Users: map[snowflake.ID]data.User{}, TrustedUsers: map[snowflake.ID]ed25519.PublicKey{}, - Notifications: map[snowflake.ID]int{}, + BlockedUsers: map[snowflake.ID]struct{}{}, LastReadMessages: map[snowflake.ID]*snowflake.ID{}, + Notifications: map[snowflake.ID]int{}, } type UserData struct { @@ -337,3 +339,13 @@ func SendFinalData() { case <-ch2: } } + +func UpdateBlockedUsers(info *packet.BlockInfo) { + for _, removed := range info.RemovedBlockedUsers { + delete(State.BlockedUsers, removed) + } + + for _, trusted := range info.BlockedUsers { + State.BlockedUsers[trusted] = struct{}{} + } +} -- cgit v1.3.1