Browse Source

Add support for clip shares

Tulir Asokan 3 years ago
parent
commit
334ff15002
2 changed files with 17 additions and 7 deletions
  1. 2 3
      mauigpapi/types/thread_item.py
  2. 15 4
      mautrix_instagram/portal.py

+ 2 - 3
mauigpapi/types/thread_item.py

@@ -85,8 +85,8 @@ class ViewMode(SerializableEnum):
 @dataclass(kw_only=True)
 @dataclass(kw_only=True)
 class CreativeConfig(SerializableAttrs):
 class CreativeConfig(SerializableAttrs):
     capture_type: str
     capture_type: str
-    camera_facing: str
-    should_render_try_it_on: bool
+    camera_facing: Optional[str] = None
+    should_render_try_it_on: Optional[bool] = None
 
 
 
 
 @dataclass(kw_only=True)
 @dataclass(kw_only=True)
@@ -133,7 +133,6 @@ class MediaType(SerializableEnum):
         return self.name.lower().replace("_", " ")
         return self.name.lower().replace("_", " ")
 
 
 
 
-
 @dataclass(kw_only=True)
 @dataclass(kw_only=True)
 class ExpiredMediaItem(SerializableAttrs):
 class ExpiredMediaItem(SerializableAttrs):
     media_type: Optional[MediaType] = None
     media_type: Optional[MediaType] = None

+ 15 - 4
mautrix_instagram/portal.py

@@ -641,6 +641,8 @@ class Portal(DBPortal, BasePortal):
             media_data = item.reel_share.media
             media_data = item.reel_share.media
         elif item.story_share:
         elif item.story_share:
             media_data = item.story_share.media
             media_data = item.story_share.media
+        elif item.clip:
+            media_data = item.clip.clip
         elif item.media_share:
         elif item.media_share:
             media_data = item.media_share
             media_data = item.media_share
         else:
         else:
@@ -671,11 +673,20 @@ class Portal(DBPortal, BasePortal):
 
 
     async def _handle_instagram_media_share(self, source: 'u.User', intent: IntentAPI,
     async def _handle_instagram_media_share(self, source: 'u.User', intent: IntentAPI,
                                             item: ThreadItem) -> Optional[EventID]:
                                             item: ThreadItem) -> Optional[EventID]:
-        share_item = item.media_share or item.story_share.media
+        if item.media_share:
+            share_item = item.media_share
+            item_type_name = share_item.media_type.human_name
+        elif item.clip:
+            share_item = item.clip.clip
+            item_type_name = "clip"
+        elif item.story_share:
+            share_item = item.story_share.media
+            item_type_name = "story"
+        else:
+            raise ValueError("no media to share")
         user_text = f"@{share_item.user.username}"
         user_text = f"@{share_item.user.username}"
         user_link = (f'<a href="https://www.instagram.com/{share_item.user.username}/">'
         user_link = (f'<a href="https://www.instagram.com/{share_item.user.username}/">'
                      f'{user_text}</a>')
                      f'{user_text}</a>')
-        item_type_name = item.media_share.media_type.human_name if item.media_share else "story"
         prefix = TextMessageEventContent(msgtype=MessageType.NOTICE, format=Format.HTML,
         prefix = TextMessageEventContent(msgtype=MessageType.NOTICE, format=Format.HTML,
                                          body=f"Sent {user_text}'s {item_type_name}",
                                          body=f"Sent {user_text}'s {item_type_name}",
                                          formatted_body=f"Sent {user_link}'s {item_type_name}")
                                          formatted_body=f"Sent {user_link}'s {item_type_name}")
@@ -750,7 +761,7 @@ class Portal(DBPortal, BasePortal):
 
 
     async def _send_instagram_unhandled(self, intent: IntentAPI, item: ThreadItem) -> EventID:
     async def _send_instagram_unhandled(self, intent: IntentAPI, item: ThreadItem) -> EventID:
         content = TextMessageEventContent(msgtype=MessageType.NOTICE,
         content = TextMessageEventContent(msgtype=MessageType.NOTICE,
-                                          body="Unsupported message type")
+                                          body=f"Unsupported message type {item.item_type.value}")
         await self._add_instagram_reply(content, item.replied_to_message)
         await self._add_instagram_reply(content, item.replied_to_message)
         return await self._send_message(intent, content, timestamp=item.timestamp // 1000)
         return await self._send_message(intent, content, timestamp=item.timestamp // 1000)
 
 
@@ -854,7 +865,7 @@ class Portal(DBPortal, BasePortal):
                 event_id = await self._handle_instagram_location(intent, item)
                 event_id = await self._handle_instagram_location(intent, item)
             elif item.reel_share:
             elif item.reel_share:
                 event_id = await self._handle_instagram_reel_share(source, intent, item)
                 event_id = await self._handle_instagram_reel_share(source, intent, item)
-            elif item.media_share or item.story_share:
+            elif item.media_share or item.story_share or item.clip:
                 event_id = await self._handle_instagram_media_share(source, intent, item)
                 event_id = await self._handle_instagram_media_share(source, intent, item)
             elif item.action_log:
             elif item.action_log:
                 # These probably don't need to be bridged
                 # These probably don't need to be bridged