Skip to content

Commit 8eca64e

Browse files
authored
Support MSC2530 fields in media event types (#170)
Add `filename`, `format` and `formatted_body` to media event content types. Signed-off-by: Joe Groocock <[email protected]>
1 parent 47e2157 commit 8eca64e

File tree

1 file changed

+28
-27
lines changed

1 file changed

+28
-27
lines changed

mautrix/types/event/message.py

+28-27
Original file line numberDiff line numberDiff line change
@@ -271,33 +271,6 @@ class LocationInfo(SerializableAttrs):
271271
# region Event content
272272

273273

274-
@dataclass
275-
class MediaMessageEventContent(BaseMessageEventContent, SerializableAttrs):
276-
"""The content of a media message event (m.image, m.audio, m.video, m.file)"""
277-
278-
url: Optional[ContentURI] = None
279-
info: Optional[MediaInfo] = None
280-
file: Optional[EncryptedFile] = None
281-
282-
@staticmethod
283-
@deserializer(MediaInfo)
284-
@deserializer(Optional[MediaInfo])
285-
def deserialize_info(data: JSON) -> MediaInfo:
286-
if not isinstance(data, dict):
287-
return Obj()
288-
msgtype = data.pop("__mautrix_msgtype", None)
289-
if msgtype == "m.image" or msgtype == "m.sticker":
290-
return ImageInfo.deserialize(data)
291-
elif msgtype == "m.video":
292-
return VideoInfo.deserialize(data)
293-
elif msgtype == "m.audio":
294-
return AudioInfo.deserialize(data)
295-
elif msgtype == "m.file":
296-
return FileInfo.deserialize(data)
297-
else:
298-
return Obj(**data)
299-
300-
301274
@dataclass
302275
class LocationMessageEventContent(BaseMessageEventContent, SerializableAttrs):
303276
geo_uri: str = None
@@ -364,6 +337,34 @@ def _trim_reply_fallback_html(self) -> None:
364337
self.formatted_body = html_reply_fallback_regex.sub("", self.formatted_body)
365338

366339

340+
@dataclass
341+
class MediaMessageEventContent(TextMessageEventContent, SerializableAttrs):
342+
"""The content of a media message event (m.image, m.audio, m.video, m.file)"""
343+
344+
url: Optional[ContentURI] = None
345+
info: Optional[MediaInfo] = None
346+
file: Optional[EncryptedFile] = None
347+
filename: Optional[str] = None
348+
349+
@staticmethod
350+
@deserializer(MediaInfo)
351+
@deserializer(Optional[MediaInfo])
352+
def deserialize_info(data: JSON) -> MediaInfo:
353+
if not isinstance(data, dict):
354+
return Obj()
355+
msgtype = data.pop("__mautrix_msgtype", None)
356+
if msgtype == "m.image" or msgtype == "m.sticker":
357+
return ImageInfo.deserialize(data)
358+
elif msgtype == "m.video":
359+
return VideoInfo.deserialize(data)
360+
elif msgtype == "m.audio":
361+
return AudioInfo.deserialize(data)
362+
elif msgtype == "m.file":
363+
return FileInfo.deserialize(data)
364+
else:
365+
return Obj(**data)
366+
367+
367368
MessageEventContent = Union[
368369
TextMessageEventContent, MediaMessageEventContent, LocationMessageEventContent, Obj
369370
]

0 commit comments

Comments
 (0)