aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2020-09-06 17:10:07 +0300
committerTulir Asokan <tulir@maunium.net>2020-09-06 17:10:07 +0300
commit4ce90892f0df459361ffceaf59ff5a1624954b87 (patch)
treef3689d839680907a190573941a58a3f5f2e8431b
parent522e45a4ae0766aeeaa7c16f45f7d563026da84e (diff)
Stop using ID field from telegram metadata in widget
-rw-r--r--import.py37
-rw-r--r--web/index.js2
-rw-r--r--web/widget-api.js6
3 files changed, 29 insertions, 16 deletions
diff --git a/import.py b/import.py
index 4291066..5f13565 100644
--- a/import.py
+++ b/import.py
@@ -87,6 +87,7 @@ if TYPE_CHECKING:
body: str
url: str
info: MatrixMediaInfo
+ id: str
def convert_image(data: bytes) -> (bytes, int, int):
@@ -113,12 +114,8 @@ async def reupload_document(client: TelegramClient, document: Document) -> 'Matr
else:
width = int(width / (height / 256))
height = 256
- body = ""
- for attr in document.attributes:
- if isinstance(attr, DocumentAttributeSticker):
- body = attr.alt
return {
- "body": body,
+ "body": "",
"url": mxc,
"info": {
"w": width,
@@ -152,6 +149,21 @@ def add_to_index(name: str) -> None:
print(f"Added {name} to {index_path}")
+def add_meta(document: Document, info: 'MatrixStickerInfo', pack: StickerSetFull) -> None:
+ for attr in document.attributes:
+ if isinstance(attr, DocumentAttributeSticker):
+ info["body"] = attr.alt
+ info["id"] = str(document.id)
+ info["net.maunium.telegram.sticker"] = {
+ "pack": {
+ "id": str(pack.set.id),
+ "short_name": pack.set.short_name,
+ },
+ "id": str(document.id),
+ "emoticons": [],
+ }
+
+
async def reupload_pack(client: TelegramClient, pack: StickerSetFull) -> None:
if pack.set.animated:
print("Animated stickerpacks are currently not supported")
@@ -183,18 +195,17 @@ async def reupload_pack(client: TelegramClient, pack: StickerSetFull) -> None:
print(f"Skipped reuploading {document.id}")
except KeyError:
reuploaded_documents[document.id] = await reupload_document(client, document)
- reuploaded_documents[document.id]["net.maunium.telegram.sticker"] = {
- "pack": {
- "id": str(pack.set.id),
- "short_name": pack.set.short_name,
- },
- "id": str(document.id),
- "emoticons": [],
- }
+ # Always ensure the body and telegram metadata is correct
+ add_meta(document, reuploaded_documents[document.id], pack)
for sticker in pack.packs:
+ if not sticker.emoticon:
+ continue
for document_id in sticker.documents:
doc = reuploaded_documents[document_id]
+ # If there was no sticker metadata, use the first emoji we find
+ if doc["body"] == "":
+ doc["body"] = sticker.emoticon
doc["net.maunium.telegram.sticker"]["emoticons"].append(sticker.emoticon)
with open(pack_path, "w") as pack_file:
diff --git a/web/index.js b/web/index.js
index 1e5c625..ab39761 100644
--- a/web/index.js
+++ b/web/index.js
@@ -143,7 +143,7 @@ const Pack = ({ pack }) => html`
<h1>${pack.title}</h1>
<div class="sticker-list">
${pack.stickers.map(sticker => html`
- <${Sticker} key=${sticker["net.maunium.telegram.sticker"].id} content=${sticker}/>
+ <${Sticker} key=${sticker.id} content=${sticker}/>
`)}
</div>
</section>
diff --git a/web/widget-api.js b/web/widget-api.js
index 6d81107..8787262 100644
--- a/web/widget-api.js
+++ b/web/widget-api.js
@@ -35,17 +35,19 @@ window.onmessage = event => {
export function sendSticker(content) {
const data = {
- content,
+ content: {...content},
// `name` is for Element Web (and also the spec)
// Element Android uses content -> body as the name
name: content.body,
}
+ // Custom field that stores the ID even for non-telegram stickers
+ delete data.content.id
// This is for Element iOS
const widgetData = {
...data,
description: content.body,
- file: `${content["net.maunium.telegram.sticker"].id}.png`,
+ file: `${content.id}.png`,
}
// Element iOS explodes if there are extra fields present
delete widgetData.content["net.maunium.telegram.sticker"]
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage