Browse Source

Stop using ID field from telegram metadata in widget

pull/26/head
Tulir Asokan 4 years ago
parent
commit
4ce90892f0
  1. 37
      import.py
  2. 2
      web/index.js
  3. 6
      web/widget-api.js

37
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:

2
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>

6
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"]

Loading…
Cancel
Save