Added a way to block/unblock users client-side

This commit is contained in:
2025-02-10 19:36:07 +02:00
parent a496d59fd6
commit ccea2247c0
3 changed files with 46 additions and 3 deletions

View File

@@ -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]

View File

@@ -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 {

View File

@@ -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{}{}
}
}