Browse Source

Merge pull request #46 from mautrix/sumner/bri-2581

async media: add ability to upload media asynchronously
Sumner Evans 3 năm trước cách đây
mục cha
commit
b7e89b3fba

+ 3 - 0
mautrix_instagram/example-config.yaml

@@ -16,6 +16,9 @@ homeserver:
     status_endpoint: null
     # Endpoint for reporting per-message status.
     message_send_checkpoint_endpoint: null
+    # Whether asynchronous uploads via MSC2246 should be enabled for media.
+    # Requires a media repo that supports MSC2246.
+    async_media: false
 
 # Application service host/registration related details
 # Changing these values requires regeneration of the registration.

+ 9 - 1
mautrix_instagram/portal.py

@@ -796,7 +796,10 @@ class Portal(DBPortal, BasePortal):
             upload_file_name = None
 
         mxc = await intent.upload_media(
-            data, mime_type=upload_mime_type, filename=upload_file_name
+            data,
+            mime_type=upload_mime_type,
+            filename=upload_file_name,
+            async_upload=self.config["homeserver.async_media"],
         )
 
         if decryption_info:
@@ -1388,6 +1391,11 @@ class Portal(DBPortal, BasePortal):
                     exc_info=True,
                 )
 
+    async def get_dm_puppet(self) -> pu.Puppet | None:
+        if not self.is_direct:
+            return None
+        return await pu.Puppet.get_by_pk(self.other_user_pk)
+
     # endregion
     # region Backfilling
 

+ 4 - 1
mautrix_instagram/puppet.py

@@ -164,7 +164,10 @@ class Puppet(DBPuppet, BasePuppet):
                     content_type = resp.headers["Content-Type"]
                     resp_data = await resp.read()
                 mxc = await self.default_mxid_intent.upload_media(
-                    data=resp_data, mime_type=content_type, filename=pic_id
+                    data=resp_data,
+                    mime_type=content_type,
+                    filename=pic_id,
+                    async_upload=self.config["homeserver.async_media"],
                 )
             try:
                 await self.default_mxid_intent.set_avatar_url(mxc)

+ 5 - 0
mautrix_instagram/user.py

@@ -134,6 +134,11 @@ class User(DBUser, BaseUser):
             return None
         return await pu.Puppet.get_by_pk(self.igpk)
 
+    async def get_portal_with(self, puppet: pu.Puppet, create: bool = True) -> po.Portal | None:
+        # We should probably make this work eventually, but for now, creating chats will just not
+        # work.
+        return None
+
     async def try_connect(self) -> None:
         try:
             await self.connect()

+ 1 - 1
requirements.txt

@@ -4,7 +4,7 @@ commonmark>=0.8,<0.10
 aiohttp>=3,<4
 yarl>=1,<2
 attrs>=20.1
-mautrix>=0.14.6,<0.15
+mautrix>=0.15.4,<0.16
 asyncpg>=0.20,<0.26
 pycryptodome>=3,<4
 paho-mqtt>=1.5,<2