Fix bug in device list change tracking

This commit is contained in:
Till Faelligen 2023-02-03 12:27:02 +01:00
parent 22bee54c19
commit afd94dce8b
No known key found for this signature in database
GPG key ID: ACCDC9606D472758

View file

@ -144,38 +144,42 @@ func TrackChangedUsers(
// - Loop set of users and decrement by 1 for each user in newly left room. // - Loop set of users and decrement by 1 for each user in newly left room.
// - If count=0 then they share no more rooms so inform BOTH parties of this via 'left'=[...] in /sync. // - If count=0 then they share no more rooms so inform BOTH parties of this via 'left'=[...] in /sync.
var queryRes roomserverAPI.QuerySharedUsersResponse var queryRes roomserverAPI.QuerySharedUsersResponse
err = rsAPI.QuerySharedUsers(ctx, &roomserverAPI.QuerySharedUsersRequest{
UserID: userID,
IncludeRoomIDs: newlyLeftRooms,
}, &queryRes)
if err != nil {
return nil, nil, err
}
var stateRes roomserverAPI.QueryBulkStateContentResponse var stateRes roomserverAPI.QueryBulkStateContentResponse
err = rsAPI.QueryBulkStateContent(ctx, &roomserverAPI.QueryBulkStateContentRequest{ if len(newlyLeftRooms) > 0 {
RoomIDs: newlyLeftRooms, err = rsAPI.QuerySharedUsers(ctx, &roomserverAPI.QuerySharedUsersRequest{
StateTuples: []gomatrixserverlib.StateKeyTuple{ UserID: userID,
{ IncludeRoomIDs: newlyLeftRooms,
EventType: gomatrixserverlib.MRoomMember, }, &queryRes)
StateKey: "*", if err != nil {
}, return nil, nil, err
},
AllowWildcards: true,
}, &stateRes)
if err != nil {
return nil, nil, err
}
for _, state := range stateRes.Rooms {
for tuple, membership := range state {
if membership != gomatrixserverlib.Join {
continue
}
queryRes.UserIDsToCount[tuple.StateKey]--
} }
}
for userID, count := range queryRes.UserIDsToCount { err = rsAPI.QueryBulkStateContent(ctx, &roomserverAPI.QueryBulkStateContentRequest{
if count <= 0 { RoomIDs: newlyLeftRooms,
left = append(left, userID) // left is returned StateTuples: []gomatrixserverlib.StateKeyTuple{
{
EventType: gomatrixserverlib.MRoomMember,
StateKey: "*",
},
},
AllowWildcards: true,
}, &stateRes)
if err != nil {
return nil, nil, err
}
for _, state := range stateRes.Rooms {
for tuple, membership := range state {
if membership != gomatrixserverlib.Join {
continue
}
queryRes.UserIDsToCount[tuple.StateKey]--
}
}
for userID, count := range queryRes.UserIDsToCount {
if count <= 0 {
left = append(left, userID) // left is returned
}
} }
} }