aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2023-09-28 07:36:34 +0200
committerGitHub <noreply@github.com>2023-09-28 07:36:34 +0200
commit10b4fbc66d4dca20faa6cc56a272d5303871094b (patch)
treedab5f0c09dd9892cff41791b79bd08760e192faa
parent05a8f1ede3ca0ccd0f9a7d327ef3cb30b6fd2798 (diff)
Fix m.direct only being partially upgraded (#3209)
Previously we would update `m.direct` once we found the old room ID. If the roomID is found somewhere in the middle, we would never add the rest of the users, resulting in only partially upgraded `m.direct` and chats loosing their 1:1 flag.
-rw-r--r--userapi/consumers/roomserver.go27
1 files changed, 13 insertions, 14 deletions
diff --git a/userapi/consumers/roomserver.go b/userapi/consumers/roomserver.go
index d5baa074..6da41f8a 100644
--- a/userapi/consumers/roomserver.go
+++ b/userapi/consumers/roomserver.go
@@ -266,8 +266,8 @@ func (s *OutputRoomEventConsumer) updateMDirect(ctx context.Context, oldRoomID,
directChats := gjson.ParseBytes(directChatsRaw)
newDirectChats := make(map[string][]string)
// iterate over all userID -> roomIDs
+ var found bool
directChats.ForEach(func(userID, roomIDs gjson.Result) bool {
- var found bool
for _, roomID := range roomIDs.Array() {
newDirectChats[userID.Str] = append(newDirectChats[userID.Str], roomID.Str)
// add the new roomID to m.direct
@@ -276,22 +276,21 @@ func (s *OutputRoomEventConsumer) updateMDirect(ctx context.Context, oldRoomID,
newDirectChats[userID.Str] = append(newDirectChats[userID.Str], newRoomID)
}
}
- // Only hit the database if we found the old room as a DM for this user
- if found {
- var data []byte
- data, err = json.Marshal(newDirectChats)
- if err != nil {
- return true
- }
- if err = s.db.SaveAccountData(ctx, localpart, serverName, "", "m.direct", data); err != nil {
- return true
- }
- }
return true
})
- if err != nil {
- return fmt.Errorf("failed to update m.direct state")
+
+ // Only hit the database if we found the old room as a DM for this user
+ if found {
+ var data []byte
+ data, err = json.Marshal(newDirectChats)
+ if err != nil {
+ return err
+ }
+ if err = s.db.SaveAccountData(ctx, localpart, serverName, "", "m.direct", data); err != nil {
+ return fmt.Errorf("failed to update m.direct state: %w", err)
+ }
}
+
return nil
}