From 6e6aad0430686189f155193e74db5bedad1bcca0 Mon Sep 17 00:00:00 2001 From: Tulir Asokan 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, }, "*") }