mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
Fix bug in device list change tracking
This commit is contained in:
parent
22bee54c19
commit
afd94dce8b
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue