From 0efe9f05f27853e32394e30ed16d2d767946878c Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Thu, 20 Jun 2019 22:41:33 +0300 Subject: [PATCH] Add option for maximum document size that gets bridged. Fixes #335 --- example-config.yaml | 2 ++ mautrix_telegram/config.py | 1 + mautrix_telegram/portal.py | 11 ++++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/example-config.yaml b/example-config.yaml index e091af9e..55597876 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -147,6 +147,8 @@ bridge: inline_images: false # Maximum size of image in megabytes before sending to Telegram as a document. image_as_file_size: 10 + # Maximum size of Telegram documents in megabytes to bridge. + max_document_size: 100 # Whether to bridge Telegram bot messages as m.notices or m.texts. bot_messages_as_notices: true diff --git a/mautrix_telegram/config.py b/mautrix_telegram/config.py index b5f82ada..2f3f6c26 100644 --- a/mautrix_telegram/config.py +++ b/mautrix_telegram/config.py @@ -216,6 +216,7 @@ class Config(DictWithRecursion): copy("bridge.telegram_link_preview") copy("bridge.inline_images") copy("bridge.image_as_file_size") + copy("bridge.max_document_size") copy("bridge.bot_messages_as_notices") if isinstance(self["bridge.bridge_notices"], bool): diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index 8429131e..396dedea 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -619,6 +619,8 @@ class Portal: Optional[TypePhotoSize]]: if not photo: return None, None + if isinstance(photo, Document) and not photo.thumbs: + return None, None largest = max(photo.sizes if isinstance(photo, Photo) else photo.thumbs, key=(lambda photo2: (len(photo2.bytes) if not isinstance(photo2, PhotoSize) @@ -1491,12 +1493,19 @@ class Portal: async def handle_telegram_document(self, source: 'AbstractUser', intent: IntentAPI, evt: Message, relates_to: dict = None) -> Optional[Dict]: document = evt.media.document + attrs = self._parse_telegram_document_attributes(document.attributes) + if document.size > config["bridge.max_document_size"] * 1000 ** 2: + name = attrs["name"] or "" + caption = f"\n{evt.message}" if evt.message else "" + return await intent.send_notice(self.mxid, f"Too large file {name}{caption}") + thumb_loc, thumb_size = self._get_largest_photo_size(document) if thumb_size and not isinstance(thumb_size, (PhotoSize, PhotoCachedSize)): self.log.debug(f"Unsupported thumbnail type {type(thumb_size)}") - thumb = None + thumb_loc = None + thumb_size = None file = await util.transfer_file_to_matrix(source.client, intent, document, thumb_loc, is_sticker=attrs["is_sticker"]) if not file: