mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
Convert the typing handler to async/await. (#7679)
This commit is contained in:
parent
96bc110a68
commit
3630825612
1
changelog.d/7679.misc
Normal file
1
changelog.d/7679.misc
Normal file
@ -0,0 +1 @@
|
||||
Convert typing handler to async/await.
|
@ -17,8 +17,6 @@ import logging
|
||||
from collections import namedtuple
|
||||
from typing import List, Tuple
|
||||
|
||||
from twisted.internet import defer
|
||||
|
||||
from synapse.api.errors import AuthError, SynapseError
|
||||
from synapse.logging.context import run_in_background
|
||||
from synapse.types import UserID, get_domain_from_id
|
||||
@ -115,8 +113,7 @@ class TypingHandler(object):
|
||||
def is_typing(self, member):
|
||||
return member.user_id in self._room_typing.get(member.room_id, [])
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def started_typing(self, target_user, auth_user, room_id, timeout):
|
||||
async def started_typing(self, target_user, auth_user, room_id, timeout):
|
||||
target_user_id = target_user.to_string()
|
||||
auth_user_id = auth_user.to_string()
|
||||
|
||||
@ -126,7 +123,7 @@ class TypingHandler(object):
|
||||
if target_user_id != auth_user_id:
|
||||
raise AuthError(400, "Cannot set another user's typing state")
|
||||
|
||||
yield self.auth.check_user_in_room(room_id, target_user_id)
|
||||
await self.auth.check_user_in_room(room_id, target_user_id)
|
||||
|
||||
logger.debug("%s has started typing in %s", target_user_id, room_id)
|
||||
|
||||
@ -145,8 +142,7 @@ class TypingHandler(object):
|
||||
|
||||
self._push_update(member=member, typing=True)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def stopped_typing(self, target_user, auth_user, room_id):
|
||||
async def stopped_typing(self, target_user, auth_user, room_id):
|
||||
target_user_id = target_user.to_string()
|
||||
auth_user_id = auth_user.to_string()
|
||||
|
||||
@ -156,7 +152,7 @@ class TypingHandler(object):
|
||||
if target_user_id != auth_user_id:
|
||||
raise AuthError(400, "Cannot set another user's typing state")
|
||||
|
||||
yield self.auth.check_user_in_room(room_id, target_user_id)
|
||||
await self.auth.check_user_in_room(room_id, target_user_id)
|
||||
|
||||
logger.debug("%s has stopped typing in %s", target_user_id, room_id)
|
||||
|
||||
@ -164,12 +160,11 @@ class TypingHandler(object):
|
||||
|
||||
self._stopped_typing(member)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def user_left_room(self, user, room_id):
|
||||
user_id = user.to_string()
|
||||
if self.is_mine_id(user_id):
|
||||
member = RoomMember(room_id=room_id, user_id=user_id)
|
||||
yield self._stopped_typing(member)
|
||||
self._stopped_typing(member)
|
||||
|
||||
def _stopped_typing(self, member):
|
||||
if member.user_id not in self._room_typing.get(member.room_id, set()):
|
||||
@ -188,10 +183,9 @@ class TypingHandler(object):
|
||||
|
||||
self._push_update_local(member=member, typing=typing)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _push_remote(self, member, typing):
|
||||
async def _push_remote(self, member, typing):
|
||||
try:
|
||||
users = yield self.state.get_current_users_in_room(member.room_id)
|
||||
users = await self.state.get_current_users_in_room(member.room_id)
|
||||
self._member_last_federation_poke[member] = self.clock.time_msec()
|
||||
|
||||
now = self.clock.time_msec()
|
||||
@ -215,8 +209,7 @@ class TypingHandler(object):
|
||||
except Exception:
|
||||
logger.exception("Error pushing typing notif to remotes")
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _recv_edu(self, origin, content):
|
||||
async def _recv_edu(self, origin, content):
|
||||
room_id = content["room_id"]
|
||||
user_id = content["user_id"]
|
||||
|
||||
@ -231,7 +224,7 @@ class TypingHandler(object):
|
||||
)
|
||||
return
|
||||
|
||||
users = yield self.state.get_current_users_in_room(room_id)
|
||||
users = await self.state.get_current_users_in_room(room_id)
|
||||
domains = {get_domain_from_id(u) for u in users}
|
||||
|
||||
if self.server_name in domains:
|
||||
@ -330,7 +323,7 @@ class TypingNotificationEventSource(object):
|
||||
"content": {"user_ids": list(typing)},
|
||||
}
|
||||
|
||||
def get_new_events(self, from_key, room_ids, **kwargs):
|
||||
async def get_new_events(self, from_key, room_ids, **kwargs):
|
||||
with Measure(self.clock, "typing.get_new_events"):
|
||||
from_key = int(from_key)
|
||||
handler = self.get_typing_handler()
|
||||
@ -344,7 +337,7 @@ class TypingNotificationEventSource(object):
|
||||
|
||||
events.append(self._make_event_for(room_id))
|
||||
|
||||
return defer.succeed((events, handler._latest_room_serial))
|
||||
return (events, handler._latest_room_serial)
|
||||
|
||||
def get_current_key(self):
|
||||
return self.get_typing_handler()._latest_room_serial
|
||||
|
@ -129,6 +129,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
def check_user_in_room(room_id, user_id):
|
||||
if user_id not in [u.to_string() for u in self.room_members]:
|
||||
raise AuthError(401, "User is not in the room")
|
||||
return defer.succeed(None)
|
||||
|
||||
hs.get_auth().check_user_in_room = check_user_in_room
|
||||
|
||||
@ -138,7 +139,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
self.datastore.get_joined_hosts_for_room = get_joined_hosts_for_room
|
||||
|
||||
def get_current_users_in_room(room_id):
|
||||
return {str(u) for u in self.room_members}
|
||||
return defer.succeed({str(u) for u in self.room_members})
|
||||
|
||||
hs.get_state_handler().get_current_users_in_room = get_current_users_in_room
|
||||
|
||||
@ -163,7 +164,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
|
||||
self.assertEquals(self.event_source.get_current_key(), 0)
|
||||
|
||||
self.successResultOf(
|
||||
self.get_success(
|
||||
self.handler.started_typing(
|
||||
target_user=U_APPLE, auth_user=U_APPLE, room_id=ROOM_ID, timeout=20000
|
||||
)
|
||||
@ -190,7 +191,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
def test_started_typing_remote_send(self):
|
||||
self.room_members = [U_APPLE, U_ONION]
|
||||
|
||||
self.successResultOf(
|
||||
self.get_success(
|
||||
self.handler.started_typing(
|
||||
target_user=U_APPLE, auth_user=U_APPLE, room_id=ROOM_ID, timeout=20000
|
||||
)
|
||||
@ -265,7 +266,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
|
||||
self.assertEquals(self.event_source.get_current_key(), 0)
|
||||
|
||||
self.successResultOf(
|
||||
self.get_success(
|
||||
self.handler.stopped_typing(
|
||||
target_user=U_APPLE, auth_user=U_APPLE, room_id=ROOM_ID
|
||||
)
|
||||
@ -305,7 +306,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
|
||||
self.assertEquals(self.event_source.get_current_key(), 0)
|
||||
|
||||
self.successResultOf(
|
||||
self.get_success(
|
||||
self.handler.started_typing(
|
||||
target_user=U_APPLE, auth_user=U_APPLE, room_id=ROOM_ID, timeout=10000
|
||||
)
|
||||
@ -344,7 +345,7 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
|
||||
|
||||
# SYN-230 - see if we can still set after timeout
|
||||
|
||||
self.successResultOf(
|
||||
self.get_success(
|
||||
self.handler.started_typing(
|
||||
target_user=U_APPLE, auth_user=U_APPLE, room_id=ROOM_ID, timeout=10000
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user