diff --git a/synapse/handlers/events.py b/synapse/handlers/events.py
index 5e748687e3..71a89f09c7 100644
--- a/synapse/handlers/events.py
+++ b/synapse/handlers/events.py
@@ -16,11 +16,10 @@
import logging
import random
-from twisted.internet import defer
-
from synapse.api.constants import EventTypes, Membership
from synapse.api.errors import AuthError, SynapseError
from synapse.events import EventBase
+from synapse.handlers.presence import format_user_presence_state
from synapse.logging.utils import log_function
from synapse.types import UserID
from synapse.visibility import filter_events_for_client
@@ -50,9 +49,8 @@ class EventStreamHandler(BaseHandler):
self._server_notices_sender = hs.get_server_notices_sender()
self._event_serializer = hs.get_event_client_serializer()
- @defer.inlineCallbacks
@log_function
- def get_stream(
+ async def get_stream(
self,
auth_user_id,
pagin_config,
@@ -69,17 +67,17 @@ class EventStreamHandler(BaseHandler):
"""
if room_id:
- blocked = yield self.store.is_room_blocked(room_id)
+ blocked = await self.store.is_room_blocked(room_id)
if blocked:
raise SynapseError(403, "This room has been blocked on this server")
# send any outstanding server notices to the user.
- yield self._server_notices_sender.on_user_syncing(auth_user_id)
+ await self._server_notices_sender.on_user_syncing(auth_user_id)
auth_user = UserID.from_string(auth_user_id)
presence_handler = self.hs.get_presence_handler()
- context = yield presence_handler.user_syncing(
+ context = await presence_handler.user_syncing(
auth_user_id, affect_presence=affect_presence
)
with context:
@@ -91,7 +89,7 @@ class EventStreamHandler(BaseHandler):
# thundering herds on restart.
timeout = random.randint(int(timeout * 0.9), int(timeout * 1.1))
- events, tokens = yield self.notifier.get_events_for(
+ events, tokens = await self.notifier.get_events_for(
auth_user,
pagin_config,
timeout,
@@ -100,6 +98,8 @@ class EventStreamHandler(BaseHandler):
explicit_room_id=room_id,
)
+ time_now = self.clock.time_msec()
+
# When the user joins a new room, or another user joins a currently
# joined room, we need to send down presence for those users.
to_add = []
@@ -112,23 +112,24 @@ class EventStreamHandler(BaseHandler):
# Send down presence.
if event.state_key == auth_user_id:
# Send down presence for everyone in the room.
- users = yield self.state.get_current_users_in_room(
+ users = await self.state.get_current_users_in_room(
event.room_id
)
- states = yield presence_handler.get_states(users, as_event=True)
- to_add.extend(states)
else:
+ users = [event.state_key]
- ev = yield presence_handler.get_state(
- UserID.from_string(event.state_key), as_event=True
- )
- to_add.append(ev)
+ states = await presence_handler.get_states(users)
+ to_add.extend(
+ {
+ "type": EventTypes.Presence,
+ "content": format_user_presence_state(state, time_now),
+ }
+ for state in states
+ )
events.extend(to_add)
- time_now = self.clock.time_msec()
-
- chunks = yield self._event_serializer.serialize_events(
+ chunks = await self._event_serializer.serialize_events(
events,
time_now,
as_client_event=as_client_event,
@@ -147,8 +148,11 @@ class EventStreamHandler(BaseHandler):
class EventHandler(BaseHandler):
- @defer.inlineCallbacks
- def get_event(self, user, room_id, event_id):
+ def __init__(self, hs):
+ super(EventHandler, self).__init__(hs)
+ self.storage = hs.get_storage()
+
+ async def get_event(self, user, room_id, event_id):
"""Retrieve a single specified event.
Args:
@@ -163,16 +167,16 @@ class EventHandler(BaseHandler):
AuthError if the user does not have the rights to inspect this
event.
"""
- event = yield self.store.get_event(event_id, check_room_id=room_id)
+ event = await self.store.get_event(event_id, check_room_id=room_id)
if not event:
return None
- users = yield self.store.get_users_in_room(event.room_id)
+ users = await self.store.get_users_in_room(event.room_id)
is_peeking = user.to_string() not in users
- filtered = yield filter_events_for_client(
- self.store, user.to_string(), [event], is_peeking=is_peeking
+ filtered = await filter_events_for_client(
+ self.storage, user.to_string(), [event], is_peeking=is_peeking
)
if not filtered:
|