From 91cd6757213e2ce18ea1f44365ed8c8392dc436e Mon Sep 17 00:00:00 2001 From: LoaD Accumulator Date: Mon, 12 Jun 2023 17:07:04 +0200 Subject: [PATCH] [ABSTRACT] Abstract the PNG sending code. --- main.py | 58 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/main.py b/main.py index 13417c0..aefc61a 100644 --- a/main.py +++ b/main.py @@ -4,35 +4,47 @@ import asyncio import yaml import os + +async def send_png(room: MatrixRoom, filename: str) -> None: + import imagesize + basename = os.path.basename(filename) + w, h = imagesize.get(filename) + + file = open(filename, "r+b") + size = os.path.getsize(filename) + + filename = os.path.basename(filename) + resp, keys = await client.upload(file, content_type="image/png", filename=basename) + + if not isinstance(resp, UploadResponse): + raise OSError("Couldn't upload file.") + + content = { + "body": basename, + "info": { + "size": size, + "mimetype": "image/png", + "w": w, "h": h + }, + "msgtype": "m.image", + "url": resp.content_uri, + } + file.close() + + await client.room_send(room.room_id, message_type="m.room.message", content=content) + + # Our message callback. It should be passed through a router. async def msg_cb(room: MatrixRoom, event: RoomMessageText) -> None: if event.body.startswith("$"): - import imagesize import latex - try: + try: filename = latex.render("", event.body) - w, h = imagesize.get(filename) - - file = open(filename, "r+b") - size = os.path.getsize(filename) - - filename = os.path.basename(filename) - resp, keys = await client.upload(file, content_type="image/png", filename=filename) + await send_png(room, filename) + except (FileNotFoundError, OSError): content = { - "body": filename, - "info": { - "size": size, - "w": w, "h": h, - "mimetype": "image/png" - }, - "msgtype": "m.image", - "url": resp.content_uri, - } - await client.room_send(room.room_id, message_type="m.room.message", content=content) - except FileNotFoundError: - content = { - "msgtype": "m.text", + "msgtype": "m.text", "body": "Couldn't parse LaTeX correctly." } await client.room_send(room.room_id, message_type="m.room.message", content=content) @@ -41,7 +53,7 @@ async def msg_cb(room: MatrixRoom, event: RoomMessageText) -> None: async def file_cb(room: MatrixRoom, event: RoomMessageFile) -> None: url = event.url filename = event.body - + async def main() -> None: # Load our config file.