Don't refresh notifier, use the memberships from the join response instead so that it doesn't load presence for members we are ommitting due to LL

This commit is contained in:
Neil Alexander 2022-04-26 14:38:45 +01:00
parent 9d34f9738c
commit 7143ef20a1
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -87,22 +87,27 @@ func (p *PresenceStreamProvider) populatePresence(
ignoreCache bool, ignoreCache bool,
) error { ) error {
// add newly joined rooms user presences // add newly joined rooms user presences
newlyJoined := joinedRooms(req.Response, req.Device.UserID) if newlyJoined := joinedRooms(req.Response, req.Device.UserID); len(newlyJoined) > 0 {
if len(newlyJoined) > 0 {
// TODO: This refreshes all lists and is quite expensive
// The notifier should update the lists itself
if err := p.notifier.Load(ctx, p.DB); err != nil {
return err
}
for _, roomID := range newlyJoined { for _, roomID := range newlyJoined {
roomUsers := p.notifier.JoinedUsers(roomID) room, ok := req.Response.Rooms.Join[roomID]
for i := range roomUsers { if !ok {
// we already got a presence from this user continue
if _, ok := presences[roomUsers[i]]; ok { }
for _, stateEvent := range room.State.Events {
switch {
case stateEvent.Type != gomatrixserverlib.MRoomMember:
fallthrough
case stateEvent.StateKey == nil:
fallthrough
case *stateEvent.StateKey == "":
continue
}
userID := *stateEvent.StateKey
if _, ok := presences[userID]; ok {
continue continue
} }
var err error var err error
presences[roomUsers[i]], err = p.DB.GetPresence(ctx, roomUsers[i]) presences[userID], err = p.DB.GetPresence(ctx, userID)
if err != nil { if err != nil {
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
continue continue