mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2025-01-16 15:37:06 -05:00
Define a new event stream data source for typing notifications (currently null)
This commit is contained in:
parent
f85a3757cf
commit
6dd50da54e
@ -145,3 +145,17 @@ class TypingNotificationHandler(BaseHandler):
|
|||||||
typing):
|
typing):
|
||||||
# TODO(paul) steal this from presence.py
|
# TODO(paul) steal this from presence.py
|
||||||
pass
|
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.presence import PresenceEventSource
|
||||||
from synapse.handlers.room import RoomEventSource
|
from synapse.handlers.room import RoomEventSource
|
||||||
|
from synapse.handlers.typing import TypingNotificationEventSource
|
||||||
|
|
||||||
|
|
||||||
class NullSource(object):
|
class NullSource(object):
|
||||||
@ -41,6 +42,7 @@ class EventSources(object):
|
|||||||
SOURCE_TYPES = {
|
SOURCE_TYPES = {
|
||||||
"room": RoomEventSource,
|
"room": RoomEventSource,
|
||||||
"presence": PresenceEventSource,
|
"presence": PresenceEventSource,
|
||||||
|
"typing": TypingNotificationEventSource,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, hs):
|
def __init__(self, hs):
|
||||||
@ -49,15 +51,19 @@ class EventSources(object):
|
|||||||
for name, cls in EventSources.SOURCE_TYPES.items()
|
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
|
@defer.inlineCallbacks
|
||||||
def get_current_token(self):
|
def get_current_token(self):
|
||||||
events_key = yield self.sources["room"].get_current_token_part()
|
token = StreamToken(
|
||||||
presence_key = yield self.sources["presence"].get_current_token_part()
|
events_key=(
|
||||||
token = EventSources.create_token(events_key, presence_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)
|
defer.returnValue(token)
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ class RoomID(DomainSpecificString):
|
|||||||
class StreamToken(
|
class StreamToken(
|
||||||
namedtuple(
|
namedtuple(
|
||||||
"Token",
|
"Token",
|
||||||
("events_key", "presence_key")
|
("events_key", "presence_key", "typing_key")
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
_SEPARATOR = "_"
|
_SEPARATOR = "_"
|
||||||
|
@ -295,7 +295,9 @@ class PresenceEventStreamTestCase(unittest.TestCase):
|
|||||||
# all be ours
|
# all be ours
|
||||||
|
|
||||||
# I'll already get my own presence state change
|
# 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(
|
self.mock_datastore.set_presence_state.return_value = defer.succeed(
|
||||||
{"state": ONLINE})
|
{"state": ONLINE})
|
||||||
@ -306,10 +308,10 @@ class PresenceEventStreamTestCase(unittest.TestCase):
|
|||||||
state={"state": ONLINE})
|
state={"state": ONLINE})
|
||||||
|
|
||||||
(code, response) = yield self.mock_resource.trigger("GET",
|
(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(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",
|
{"type": "m.presence",
|
||||||
"content": {
|
"content": {
|
||||||
"user_id": "@banana:test",
|
"user_id": "@banana:test",
|
||||||
|
Loading…
Reference in New Issue
Block a user