diff --git a/synapse/handlers/events.py b/synapse/handlers/events.py
index c9ade253dd..54ab27004f 100644
--- a/synapse/handlers/events.py
+++ b/synapse/handlers/events.py
@@ -47,11 +47,11 @@ class EventStreamHandler(BaseHandler):
@defer.inlineCallbacks
@log_function
def get_stream(self, auth_user_id, pagin_config, timeout=0,
- as_client_event=True):
+ as_client_event=True, affect_presence=True):
auth_user = self.hs.parse_userid(auth_user_id)
try:
- if auth_user not in self._streams_per_user:
+ if affect_presence and auth_user not in self._streams_per_user:
self._streams_per_user[auth_user] = 0
if auth_user in self._stop_timer_per_user:
try:
@@ -64,7 +64,7 @@ class EventStreamHandler(BaseHandler):
yield self.distributor.fire(
"started_user_eventstream", auth_user
)
- self._streams_per_user[auth_user] += 1
+ self._streams_per_user[auth_user] += 1
if pagin_config.from_token is None:
pagin_config.from_token = None
@@ -92,27 +92,28 @@ class EventStreamHandler(BaseHandler):
defer.returnValue(chunk)
finally:
- self._streams_per_user[auth_user] -= 1
- if not self._streams_per_user[auth_user]:
- del self._streams_per_user[auth_user]
-
- # 10 seconds of grace to allow the client to reconnect again
- # before we think they're gone
- def _later():
- logger.debug(
- "_later stopped_user_eventstream %s", auth_user
- )
+ if affect_presence:
+ self._streams_per_user[auth_user] -= 1
+ if not self._streams_per_user[auth_user]:
+ del self._streams_per_user[auth_user]
+
+ # 10 seconds of grace to allow the client to reconnect again
+ # before we think they're gone
+ def _later():
+ logger.debug(
+ "_later stopped_user_eventstream %s", auth_user
+ )
- self._stop_timer_per_user.pop(auth_user, None)
+ self._stop_timer_per_user.pop(auth_user, None)
- yield self.distributor.fire(
- "stopped_user_eventstream", auth_user
- )
+ yield self.distributor.fire(
+ "stopped_user_eventstream", auth_user
+ )
- logger.debug("Scheduling _later: for %s", auth_user)
- self._stop_timer_per_user[auth_user] = (
- self.clock.call_later(30, _later)
- )
+ logger.debug("Scheduling _later: for %s", auth_user)
+ self._stop_timer_per_user[auth_user] = (
+ self.clock.call_later(30, _later)
+ )
class EventHandler(BaseHandler):
diff --git a/synapse/push/__init__.py b/synapse/push/__init__.py
index 839f666390..9cf996fb80 100644
--- a/synapse/push/__init__.py
+++ b/synapse/push/__init__.py
@@ -81,7 +81,9 @@ class Pusher(object):
from_tok = StreamToken.from_string(self.last_token)
config = PaginationConfig(from_token=from_tok, limit='1')
chunk = yield self.evStreamHandler.get_stream(
- self.user_name, config, timeout=100*365*24*60*60*1000)
+ self.user_name, config,
+ timeout=100*365*24*60*60*1000, affect_presence=False
+ )
# limiting to 1 may get 1 event plus 1 presence event, so
# pick out the actual event
|