Define a new event stream data source for typing notifications (currently null)

paul/schema_breaking_changes
Paul "LeoNerd" Evans 2014-08-29 17:39:33 +01:00
parent f85a3757cf
commit 6dd50da54e
4 changed files with 33 additions and 11 deletions

View File

@ -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)

View File

@ -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)

View File

@ -97,7 +97,7 @@ class RoomID(DomainSpecificString):
class StreamToken(
namedtuple(
"Token",
("events_key", "presence_key")
("events_key", "presence_key", "typing_key")
)
):
_SEPARATOR = "_"

View File

@ -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",