From 03c72e85f72207a7b2480f881f7b0cb7055c5feb Mon Sep 17 00:00:00 2001 From: retoor Date: Wed, 29 Jan 2025 16:30:54 +0100 Subject: [PATCH] Markdown. --- src/snek/model/channel_message.py | 1 + src/snek/service/channel_message.py | 26 +++++++++++++++++++++++++- src/snek/service/chat.py | 3 ++- src/snek/static/message-list.js | 5 ++++- src/snek/static/models.js | 4 +++- src/snek/view/rpc.py | 3 ++- 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/snek/model/channel_message.py b/src/snek/model/channel_message.py index 0fab568..0bda0bc 100644 --- a/src/snek/model/channel_message.py +++ b/src/snek/model/channel_message.py @@ -5,3 +5,4 @@ class ChannelMessageModel(BaseModel): channel_uid = ModelField(name="channel_uid", required=True, kind=str) user_uid = ModelField(name="user_uid", required=True, kind=str) message = ModelField(name="message", required=True, kind=str) + html = ModelField(name="html", required=False, kind=str) diff --git a/src/snek/service/channel_message.py b/src/snek/service/channel_message.py index 4b1a6f8..8765d53 100644 --- a/src/snek/service/channel_message.py +++ b/src/snek/service/channel_message.py @@ -1,14 +1,38 @@ from snek.system.service import BaseService - +import jinja2 class ChannelMessageService(BaseService): mapper_name = "channel_message" async def create(self, channel_uid, user_uid, message): model = await self.new() + model["channel_uid"] = channel_uid model["user_uid"] = user_uid model["message"] = message + + context = { + + } + + + record = model.record + context.update(record) + user = await self.app.services.user.get(uid=user_uid) + context.update(dict( + user_uid=user['uid'], + username=user['username'], + user_nick=user['nick'] + )) + try: + template = self.app.jinja2_env.get_template("message.html") + model["html"] = template.render(**context) + except Exception as ex: + print(ex,flush=True) + print("RENDER",flush=True) + print("RECORD",context,flush=True) + + print("AFTER RENDER",flush=True) if await self.save(model): return model raise Exception(f"Failed to create channel message: {model.errors}.") diff --git a/src/snek/service/chat.py b/src/snek/service/chat.py index fcbf0bc..b31f747 100644 --- a/src/snek/service/chat.py +++ b/src/snek/service/chat.py @@ -17,7 +17,8 @@ class ChatService(BaseService): user = await self.services.user.get(uid=user_uid) await self.services.notification.create_channel_message(channel_message_uid) sent_to_count = await self.services.socket.broadcast(channel_uid, dict( - message=message, + message=channel_message["message"], + html=channel_message["html"], user_uid=user_uid, color=user['color'], channel_uid=channel_uid, diff --git a/src/snek/static/message-list.js b/src/snek/static/message-list.js index 8c8cf7f..01fe8fb 100644 --- a/src/snek/static/message-list.js +++ b/src/snek/static/message-list.js @@ -34,6 +34,7 @@ class MessageListElement extends HTMLElement { element.dataset.created_at = message.created_at element.dataset.user_uid = message.user_uid element.dataset.message = message.message + element.classList.add("message") if(!this.messages.length){ element.classList.add("switch-user") @@ -53,7 +54,8 @@ class MessageListElement extends HTMLElement { author.textContent = message.user_nick const text = document.createElement("div") text.classList.add("text") - text.innerHTML = this.linkifyText(message.message) + if(message.html) + text.innerHTML = this.linkifyText(message.html) const time = document.createElement("div") time.classList.add("time") time.textContent = message.created_at @@ -79,6 +81,7 @@ class MessageListElement extends HTMLElement { message.user_nick, message.color, message.message, + message.html, message.created_at, message.updated_at ) diff --git a/src/snek/static/models.js b/src/snek/static/models.js index a28262a..1c05b42 100644 --- a/src/snek/static/models.js +++ b/src/snek/static/models.js @@ -1,14 +1,16 @@ class MessageModel { message = null + html = null user_uid = null channel_uid = null created_at = null updated_at = null element = null color = null - constructor(uid, channel_uid,user_uid,user_nick, color,message,created_at, updated_at){ + constructor(uid, channel_uid,user_uid,user_nick, color,message,html,created_at, updated_at){ this.uid = uid this.message = message + this.html = html this.user_uid = user_uid this.user_nick = user_nick this.color = color diff --git a/src/snek/view/rpc.py b/src/snek/view/rpc.py index af04516..6bbfa20 100644 --- a/src/snek/view/rpc.py +++ b/src/snek/view/rpc.py @@ -73,7 +73,8 @@ class RPCView(BaseView): channel_uid=message["channel_uid"], user_nick=user['nick'], message=message["message"], - created_at=message["created_at"] + created_at=message["created_at"], + html=message['html'] )) return messages