Browse Source

Add nicer error message for carousel media

Tulir Asokan 3 years ago
parent
commit
95fa82e2c3
2 changed files with 25 additions and 11 deletions
  1. 1 0
      mauigpapi/types/thread_item.py
  2. 24 11
      mautrix_instagram/portal.py

+ 1 - 0
mauigpapi/types/thread_item.py

@@ -273,6 +273,7 @@ class MediaShareItem(RegularMediaItem, SerializableAttrs):
     caption: Optional[Caption] = None
     can_viewer_save: bool = True
     location: Optional[Location] = None
+    carousel_media_count: Optional[int] = None
     carousel_media: Optional[List[CarouselMediaItem]] = None
 
 

+ 24 - 11
mautrix_instagram/portal.py

@@ -661,8 +661,15 @@ class Portal(DBPortal, BasePortal):
             url = video.url
             msgtype = MessageType.VIDEO
             info = VideoInfo(height=video.height, width=video.width)
+        elif media.media_type == MediaType.CAROUSEL:
+            raise ValueError(
+                "Carousel media is not currently supported, "
+                "please view the post on Instagram via the link below"
+            )
         else:
-            raise ValueError("Attachment not available: unsupported media type")
+            raise ValueError(
+                f"Attachment not available: unsupported media type {media.media_type.human_name}"
+            )
         return await self._reupload_instagram_file(source, url, msgtype, info, intent)
 
     async def _reupload_instagram_animated(
@@ -855,25 +862,31 @@ class Portal(DBPortal, BasePortal):
 
         await self._send_message(intent, prefix, timestamp=item.timestamp // 1000)
         event_id = await self._handle_instagram_media(source, intent, item)
+
+        external_url = f"https://www.instagram.com/p/{share_item.code}/"
         if share_item.caption:
-            external_url = f"https://www.instagram.com/p/{share_item.code}/"
-            body = (
+            caption_body = (
                 f"> {share_item.caption.user.username}: {share_item.caption.text}\n\n"
                 f"{external_url}"
             )
-            formatted_body = (
+            caption_formatted_body = (
                 f"<blockquote><strong>{share_item.caption.user.username}</strong>"
                 f" {share_item.caption.text}</blockquote>"
                 f'<a href="{external_url}">instagram.com/p/{share_item.code}</a>'
             )
-            caption = TextMessageEventContent(
-                msgtype=MessageType.TEXT,
-                body=body,
-                formatted_body=formatted_body,
-                format=Format.HTML,
-                external_url=external_url,
+        else:
+            caption_body = external_url
+            caption_formatted_body = (
+                f'<a href="{external_url}">instagram.com/p/{share_item.code}</a>'
             )
-            await self._send_message(intent, caption, timestamp=item.timestamp // 1000)
+        caption = TextMessageEventContent(
+            msgtype=MessageType.TEXT,
+            body=caption_body,
+            formatted_body=caption_formatted_body,
+            format=Format.HTML,
+            external_url=external_url,
+        )
+        await self._send_message(intent, caption, timestamp=item.timestamp // 1000)
         return event_id
 
     async def _handle_instagram_reel_share(