瀏覽代碼

Add status field to message status events

Tulir Asokan 3 年之前
父節點
當前提交
00848b7f65
共有 2 個文件被更改,包括 17 次插入8 次删除
  1. 16 7
      mautrix_instagram/portal.py
  2. 1 1
      requirements.txt

+ 16 - 7
mautrix_instagram/portal.py

@@ -61,6 +61,7 @@ from mautrix.types import (
     LocationMessageEventContent,
     MediaMessageEventContent,
     MessageEventContent,
+    MessageStatus,
     MessageStatusReason,
     MessageType,
     RelatesTo,
@@ -111,6 +112,10 @@ SIMPLE_URL_REGEX = re.compile(
 )
 
 
+class UnsupportedAttachmentError(NotImplementedError):
+    pass
+
+
 class Portal(DBPortal, BasePortal):
     by_mxid: dict[RoomID, Portal] = {}
     by_thread_id: dict[tuple[str, int], Portal] = {}
@@ -262,16 +267,20 @@ class Portal(DBPortal, BasePortal):
                 rel_type=RelationType.REFERENCE,
                 event_id=event_id,
             ),
-            success=err is None,
         )
         if err:
-            status.reason = MessageStatusReason.GENERIC_ERROR
             status.error = str(err)
-            status.is_certain = True
-            status.can_retry = True
             if isinstance(err, NotImplementedError):
-                status.can_retry = False
+                if isinstance(err, UnsupportedAttachmentError):
+                    status.message = str(err)
                 status.reason = MessageStatusReason.UNSUPPORTED
+                status.status = MessageStatus.FAIL
+            else:
+                status.reason = MessageStatusReason.GENERIC_ERROR
+                status.status = MessageStatus.RETRIABLE
+        else:
+            status.status = MessageStatus.SUCCESS
+        status.fill_legacy_booleans()
 
         await intent.send_message_event(
             room_id=self.mxid,
@@ -366,7 +375,7 @@ class Portal(DBPortal, BasePortal):
     ) -> CommandResponse:
         if mime_type != "image/jpeg":
             if Image is None:
-                raise NotImplementedError(
+                raise UnsupportedAttachmentError(
                     "Instagram does not allow non-JPEG images, and Pillow is not installed, "
                     "so the bridge couldn't convert the image automatically"
                 )
@@ -532,7 +541,7 @@ class Portal(DBPortal, BasePortal):
                     height=message.info.height,
                 )
             else:
-                raise NotImplementedError(
+                raise UnsupportedAttachmentError(
                     "Non-image/video/audio files are currently not supported"
                 )
         else:

+ 1 - 1
requirements.txt

@@ -4,7 +4,7 @@ commonmark>=0.8,<0.10
 aiohttp>=3,<4
 yarl>=1,<2
 attrs>=20.1
-mautrix>=0.17.2,<0.18
+mautrix>=0.17.3,<0.18
 asyncpg>=0.20,<0.26
 pycryptodome>=3,<4
 paho-mqtt>=1.5,<2