Merge pull request #5211 from matrix-org/erikj/fixup_reaction_constants

Rename relation types to match MSC
pull/5217/head
Erik Johnston 2019-05-20 14:52:29 +01:00 committed by GitHub
commit edef6d29ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 20 deletions

1
changelog.d/5211.feature Normal file
View File

@ -0,0 +1 @@
Add experimental support for relations (aka reactions and edits).

View File

@ -125,5 +125,5 @@ class RelationTypes(object):
"""The types of relations known to this server. """The types of relations known to this server.
""" """
ANNOTATION = "m.annotation" ANNOTATION = "m.annotation"
REPLACES = "m.replaces" REPLACE = "m.replace"
REFERENCES = "m.references" REFERENCE = "m.reference"

View File

@ -355,7 +355,7 @@ class EventClientSerializer(object):
event_id, event_id,
) )
references = yield self.store.get_relations_for_event( references = yield self.store.get_relations_for_event(
event_id, RelationTypes.REFERENCES, direction="f", event_id, RelationTypes.REFERENCE, direction="f",
) )
if annotations.chunk: if annotations.chunk:
@ -364,7 +364,7 @@ class EventClientSerializer(object):
if references.chunk: if references.chunk:
r = serialized_event["unsigned"].setdefault("m.relations", {}) r = serialized_event["unsigned"].setdefault("m.relations", {})
r[RelationTypes.REFERENCES] = references.to_dict() r[RelationTypes.REFERENCE] = references.to_dict()
edit = None edit = None
if event.type == EventTypes.Message: if event.type == EventTypes.Message:
@ -382,7 +382,7 @@ class EventClientSerializer(object):
serialized_event["content"].pop("m.relates_to", None) serialized_event["content"].pop("m.relates_to", None)
r = serialized_event["unsigned"].setdefault("m.relations", {}) r = serialized_event["unsigned"].setdefault("m.relations", {})
r[RelationTypes.REPLACES] = { r[RelationTypes.REPLACE] = {
"event_id": edit.event_id, "event_id": edit.event_id,
} }

View File

@ -351,7 +351,7 @@ class RelationsWorkerStore(SQLBaseStore):
def _get_applicable_edit_txn(txn): def _get_applicable_edit_txn(txn):
txn.execute( txn.execute(
sql, (event_id, RelationTypes.REPLACES,) sql, (event_id, RelationTypes.REPLACE,)
) )
row = txn.fetchone() row = txn.fetchone()
if row: if row:
@ -384,8 +384,8 @@ class RelationsStore(RelationsWorkerStore):
rel_type = relation.get("rel_type") rel_type = relation.get("rel_type")
if rel_type not in ( if rel_type not in (
RelationTypes.ANNOTATION, RelationTypes.ANNOTATION,
RelationTypes.REFERENCES, RelationTypes.REFERENCE,
RelationTypes.REPLACES, RelationTypes.REPLACE,
): ):
# Unknown relation type # Unknown relation type
return return
@ -413,7 +413,7 @@ class RelationsStore(RelationsWorkerStore):
self.get_aggregation_groups_for_event.invalidate_many, (parent_id,) self.get_aggregation_groups_for_event.invalidate_many, (parent_id,)
) )
if rel_type == RelationTypes.REPLACES: if rel_type == RelationTypes.REPLACE:
txn.call_after(self.get_applicable_edit.invalidate, (parent_id,)) txn.call_after(self.get_applicable_edit.invalidate, (parent_id,))
def _handle_redaction(self, txn, redacted_event_id): def _handle_redaction(self, txn, redacted_event_id):

View File

@ -363,8 +363,8 @@ class RelationsTestCase(unittest.HomeserverTestCase):
request, channel = self.make_request( request, channel = self.make_request(
"GET", "GET",
"/_matrix/client/unstable/rooms/%s/aggregations/%s/m.replace?limit=1" "/_matrix/client/unstable/rooms/%s/aggregations/%s/%s?limit=1"
% (self.room, self.parent_id), % (self.room, self.parent_id, RelationTypes.REPLACE),
access_token=self.user_token, access_token=self.user_token,
) )
self.render(request) self.render(request)
@ -386,11 +386,11 @@ class RelationsTestCase(unittest.HomeserverTestCase):
channel = self._send_relation(RelationTypes.ANNOTATION, "m.reaction", "b") channel = self._send_relation(RelationTypes.ANNOTATION, "m.reaction", "b")
self.assertEquals(200, channel.code, channel.json_body) self.assertEquals(200, channel.code, channel.json_body)
channel = self._send_relation(RelationTypes.REFERENCES, "m.room.test") channel = self._send_relation(RelationTypes.REFERENCE, "m.room.test")
self.assertEquals(200, channel.code, channel.json_body) self.assertEquals(200, channel.code, channel.json_body)
reply_1 = channel.json_body["event_id"] reply_1 = channel.json_body["event_id"]
channel = self._send_relation(RelationTypes.REFERENCES, "m.room.test") channel = self._send_relation(RelationTypes.REFERENCE, "m.room.test")
self.assertEquals(200, channel.code, channel.json_body) self.assertEquals(200, channel.code, channel.json_body)
reply_2 = channel.json_body["event_id"] reply_2 = channel.json_body["event_id"]
@ -411,7 +411,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
{"type": "m.reaction", "key": "b", "count": 1}, {"type": "m.reaction", "key": "b", "count": 1},
] ]
}, },
RelationTypes.REFERENCES: { RelationTypes.REFERENCE: {
"chunk": [{"event_id": reply_1}, {"event_id": reply_2}] "chunk": [{"event_id": reply_1}, {"event_id": reply_2}]
}, },
}, },
@ -423,7 +423,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
new_body = {"msgtype": "m.text", "body": "I've been edited!"} new_body = {"msgtype": "m.text", "body": "I've been edited!"}
channel = self._send_relation( channel = self._send_relation(
RelationTypes.REPLACES, RelationTypes.REPLACE,
"m.room.message", "m.room.message",
content={"msgtype": "m.text", "body": "foo", "m.new_content": new_body}, content={"msgtype": "m.text", "body": "foo", "m.new_content": new_body},
) )
@ -443,7 +443,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
self.assertEquals( self.assertEquals(
channel.json_body["unsigned"].get("m.relations"), channel.json_body["unsigned"].get("m.relations"),
{RelationTypes.REPLACES: {"event_id": edit_event_id}}, {RelationTypes.REPLACE: {"event_id": edit_event_id}},
) )
def test_multi_edit(self): def test_multi_edit(self):
@ -452,7 +452,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
""" """
channel = self._send_relation( channel = self._send_relation(
RelationTypes.REPLACES, RelationTypes.REPLACE,
"m.room.message", "m.room.message",
content={ content={
"msgtype": "m.text", "msgtype": "m.text",
@ -464,7 +464,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
new_body = {"msgtype": "m.text", "body": "I've been edited!"} new_body = {"msgtype": "m.text", "body": "I've been edited!"}
channel = self._send_relation( channel = self._send_relation(
RelationTypes.REPLACES, RelationTypes.REPLACE,
"m.room.message", "m.room.message",
content={"msgtype": "m.text", "body": "foo", "m.new_content": new_body}, content={"msgtype": "m.text", "body": "foo", "m.new_content": new_body},
) )
@ -473,7 +473,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
edit_event_id = channel.json_body["event_id"] edit_event_id = channel.json_body["event_id"]
channel = self._send_relation( channel = self._send_relation(
RelationTypes.REPLACES, RelationTypes.REPLACE,
"m.room.message.WRONG_TYPE", "m.room.message.WRONG_TYPE",
content={ content={
"msgtype": "m.text", "msgtype": "m.text",
@ -495,7 +495,7 @@ class RelationsTestCase(unittest.HomeserverTestCase):
self.assertEquals( self.assertEquals(
channel.json_body["unsigned"].get("m.relations"), channel.json_body["unsigned"].get("m.relations"),
{RelationTypes.REPLACES: {"event_id": edit_event_id}}, {RelationTypes.REPLACE: {"event_id": edit_event_id}},
) )
def _send_relation( def _send_relation(