From 6e6aad0430686189f155193e74db5bedad1bcca0 Mon Sep 17 00:00:00 2001
From: Tulir Asokan <tulir@maunium.net>
Date: Sat, 5 Sep 2020 17:19:25 +0300
Subject: [PATCH] Add more Element iOS compatibility (ref #8)

---
 import.py         |  5 ++++-
 web/widget-api.js | 22 ++++++++++++++++++----
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/import.py b/import.py
index 27fd4ac..424c47a 100644
--- a/import.py
+++ b/import.py
@@ -3,7 +3,7 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-from typing import Dict, TypedDict
+from typing import Dict, TypedDict, Optional
 from io import BytesIO
 import argparse
 import os.path
@@ -75,6 +75,8 @@ class MatrixMediaInfo(TypedDict):
     h: int
     size: int
     mimetype: str
+    thumbnail_url: Optional[str]
+    thumbnail_info: Optional['MatrixMediaInfo']
 
 
 class MatrixStickerInfo(TypedDict, total=False):
@@ -122,6 +124,7 @@ async def reupload_document(client: TelegramClient, document: Document) -> Matri
                 "w": width,
                 "h": height,
                 "size": len(data),
+                "mimetype": "image/png",
             },
         },
     }
diff --git a/web/widget-api.js b/web/widget-api.js
index 556537f..6d81107 100644
--- a/web/widget-api.js
+++ b/web/widget-api.js
@@ -34,14 +34,28 @@ window.onmessage = event => {
 }
 
 export function sendSticker(content) {
+	const data = {
+		content,
+		// `name` is for Element Web (and also the spec)
+		// Element Android uses content -> body as the name
+		name: content.body,
+	}
+
+	// This is for Element iOS
+	const widgetData = {
+		...data,
+		description: content.body,
+		file: `${content["net.maunium.telegram.sticker"].id}.png`,
+	}
+	// Element iOS explodes if there are extra fields present
+	delete widgetData.content["net.maunium.telegram.sticker"]
+
 	window.parent.postMessage({
 		api: "fromWidget",
 		action: "m.sticker",
 		requestId: `sticker-${Date.now()}`,
 		widgetId,
-		data: {
-			name: content.body,
-			content,
-		},
+		data,
+		widgetData,
 	}, "*")
 }
-- 
GitLab