Handle users leaving rooms
This commit is contained in:
parent
fbfad76c03
commit
76d40f4904
|
@ -42,6 +42,8 @@ class DeviceHandler(BaseHandler):
|
||||||
"user_devices", self.on_federation_query_user_devices,
|
"user_devices", self.on_federation_query_user_devices,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
hs.get_distributor().observe("user_left_room", self.user_left_room)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def check_device_registered(self, user_id, device_id,
|
def check_device_registered(self, user_id, device_id,
|
||||||
initial_device_display_name=None):
|
initial_device_display_name=None):
|
||||||
|
@ -246,7 +248,11 @@ class DeviceHandler(BaseHandler):
|
||||||
logger.warning("Got device list update edu for %r from %r", user_id, origin)
|
logger.warning("Got device list update edu for %r from %r", user_id, origin)
|
||||||
return
|
return
|
||||||
|
|
||||||
logger.info("Got edu: %r", edu_content)
|
rooms = yield self.store.get_rooms_for_user(user_id)
|
||||||
|
if not rooms:
|
||||||
|
# We don't share any rooms with this user. Ignore update, as we
|
||||||
|
# probably won't get any further updates.
|
||||||
|
return
|
||||||
|
|
||||||
with (yield self._remote_edue_linearizer.queue(user_id)):
|
with (yield self._remote_edue_linearizer.queue(user_id)):
|
||||||
# If the prev id matches whats in our cache table, then we don't need
|
# If the prev id matches whats in our cache table, then we don't need
|
||||||
|
@ -288,6 +294,15 @@ class DeviceHandler(BaseHandler):
|
||||||
"devices": devices,
|
"devices": devices,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
|
def user_left_room(self, user, room_id):
|
||||||
|
user_id = user.to_string()
|
||||||
|
rooms = yield self.store.get_rooms_for_user(user_id)
|
||||||
|
if not rooms:
|
||||||
|
# We no longer share rooms with this user, so we'll no longer
|
||||||
|
# receive device updates. Mark this in DB.
|
||||||
|
yield self.store.mark_remote_user_device_list_as_unsubscribed(user_id)
|
||||||
|
|
||||||
|
|
||||||
def _update_device_from_client_ips(device, client_ips):
|
def _update_device_from_client_ips(device, client_ips):
|
||||||
ip = client_ips.get((device["user_id"], device["device_id"]), {})
|
ip = client_ips.get((device["user_id"], device["device_id"]), {})
|
||||||
|
|
|
@ -150,6 +150,14 @@ class DeviceStore(SQLBaseStore):
|
||||||
allow_none=True,
|
allow_none=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def mark_remote_user_device_list_as_unsubscribed(self, user_id):
|
||||||
|
return self._simple_delete(
|
||||||
|
table="device_lists_remote_extremeties",
|
||||||
|
keyvalues={
|
||||||
|
"user_id": user_id,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
def update_remote_device_list_cache_entry(self, user_id, device_id, content,
|
def update_remote_device_list_cache_entry(self, user_id, device_id, content,
|
||||||
stream_id):
|
stream_id):
|
||||||
"""Updates a single user's device in the cache.
|
"""Updates a single user's device in the cache.
|
||||||
|
|
Loading…
Reference in New Issue