summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/client/ui/core/chat/chat.go32
-rw-r--r--internal/client/ui/core/core.go3
-rw-r--r--internal/client/ui/core/state/state.go14
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{}{}
+ }
+}