forked from mirrors/stickerpicker
Stop using ID field from telegram metadata in widget
This commit is contained in:
parent
522e45a4ae
commit
4ce90892f0
3 changed files with 29 additions and 16 deletions
37
import.py
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:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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…
Reference in a new issue