Define a new event stream data source for typing notifications (currently null)
parent
f85a3757cf
commit
6dd50da54e
|
@ -145,3 +145,17 @@ class TypingNotificationHandler(BaseHandler):
|
|||
typing):
|
||||
# TODO(paul) steal this from presence.py
|
||||
pass
|
||||
|
||||
|
||||
class TypingNotificationEventSource(object):
|
||||
def __init__(self, hs):
|
||||
self.hs = hs
|
||||
|
||||
def get_new_events_for_user(self, user, from_token, limit):
|
||||
return ([], 0)
|
||||
|
||||
def get_current_token_part(self):
|
||||
return 0
|
||||
|
||||
def get_pagination_rows(self, user, pagination_config, key):
|
||||
return ([], 0)
|
||||
|
|
|
@ -19,6 +19,7 @@ from synapse.types import StreamToken
|
|||
|
||||
from synapse.handlers.presence import PresenceEventSource
|
||||
from synapse.handlers.room import RoomEventSource
|
||||
from synapse.handlers.typing import TypingNotificationEventSource
|
||||
|
||||
|
||||
class NullSource(object):
|
||||
|
@ -41,6 +42,7 @@ class EventSources(object):
|
|||
SOURCE_TYPES = {
|
||||
"room": RoomEventSource,
|
||||
"presence": PresenceEventSource,
|
||||
"typing": TypingNotificationEventSource,
|
||||
}
|
||||
|
||||
def __init__(self, hs):
|
||||
|
@ -49,15 +51,19 @@ class EventSources(object):
|
|||
for name, cls in EventSources.SOURCE_TYPES.items()
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def create_token(events_key, presence_key):
|
||||
return StreamToken(events_key=events_key, presence_key=presence_key)
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def get_current_token(self):
|
||||
events_key = yield self.sources["room"].get_current_token_part()
|
||||
presence_key = yield self.sources["presence"].get_current_token_part()
|
||||
token = EventSources.create_token(events_key, presence_key)
|
||||
token = StreamToken(
|
||||
events_key=(
|
||||
yield self.sources["room"].get_current_token_part()
|
||||
),
|
||||
presence_key=(
|
||||
yield self.sources["presence"].get_current_token_part()
|
||||
),
|
||||
typing_key=(
|
||||
yield self.sources["typing"].get_current_token_part()
|
||||
)
|
||||
)
|
||||
defer.returnValue(token)
|
||||
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ class RoomID(DomainSpecificString):
|
|||
class StreamToken(
|
||||
namedtuple(
|
||||
"Token",
|
||||
("events_key", "presence_key")
|
||||
("events_key", "presence_key", "typing_key")
|
||||
)
|
||||
):
|
||||
_SEPARATOR = "_"
|
||||
|
|
|
@ -295,7 +295,9 @@ class PresenceEventStreamTestCase(unittest.TestCase):
|
|||
# all be ours
|
||||
|
||||
# I'll already get my own presence state change
|
||||
self.assertEquals({"start": "0_1", "end": "0_1", "chunk": []}, response)
|
||||
self.assertEquals({"start": "0_1_0", "end": "0_1_0", "chunk": []},
|
||||
response
|
||||
)
|
||||
|
||||
self.mock_datastore.set_presence_state.return_value = defer.succeed(
|
||||
{"state": ONLINE})
|
||||
|
@ -306,10 +308,10 @@ class PresenceEventStreamTestCase(unittest.TestCase):
|
|||
state={"state": ONLINE})
|
||||
|
||||
(code, response) = yield self.mock_resource.trigger("GET",
|
||||
"/events?from=0_1&timeout=0", None)
|
||||
"/events?from=0_1_0&timeout=0", None)
|
||||
|
||||
self.assertEquals(200, code)
|
||||
self.assertEquals({"start": "0_1", "end": "0_2", "chunk": [
|
||||
self.assertEquals({"start": "0_1_0", "end": "0_2_0", "chunk": [
|
||||
{"type": "m.presence",
|
||||
"content": {
|
||||
"user_id": "@banana:test",
|
||||
|
|
Loading…
Reference in New Issue