From 37da903936e4ab85fae254421c356966991d53e4 Mon Sep 17 00:00:00 2001 From: retoor Date: Thu, 13 Feb 2025 20:21:34 +0100 Subject: [PATCH] Added channel list. --- src/snek/service/channel_member.py | 13 +++++++++++++ src/snek/service/channel_message.py | 8 +++++--- src/snek/templates/app.html | 2 +- src/snek/templates/web.html | 9 ++++++--- src/snek/view/web.py | 11 +++++++++-- 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/snek/service/channel_member.py b/src/snek/service/channel_member.py index 075e49e..407d0b7 100644 --- a/src/snek/service/channel_member.py +++ b/src/snek/service/channel_member.py @@ -37,6 +37,19 @@ class ChannelMemberService(BaseService): async for model in self.query("SELECT channel_member.* FROM channel_member INNER JOIN channel ON (channel.uid = channel_member.channel_uid and channel.tag = 'dm') INNER JOIN channel_member AS channel_member2 ON(channel_member2.channel_uid = channel.uid AND channel_member2.user_uid = :to_user) WHERE channel_member.user_uid=:from_user " ,dict(from_user=from_user, to_user=to_user)): return model return None + + async def get_other_dm_user(self, channel_uid, user_uid): + channel_member = await self.get(channel_uid=channel_uid, user_uid=user_uid) + channel = await self.services.channel.get(uid=channel_member['channel_uid']) + if channel["tag"] != "dm": + print("NONT!\n", flush=True) + return None + print("YEAHH",flush=True) + async for model in self.services.channel_member.find(channel_uid=channel_uid): + print("huh!!!",model['uid'],flush=True) + if model["uid"] != channel_member['uid']: + print("GOOOD!!",flush=True) + return await self.services.user.get(uid=model["user_uid"]) async def create_dm(self,channel_uid, from_user_uid, to_user_uid): result = await self.create(channel_uid, from_user_uid) diff --git a/src/snek/service/channel_message.py b/src/snek/service/channel_message.py index 309e959..7607f03 100644 --- a/src/snek/service/channel_message.py +++ b/src/snek/service/channel_message.py @@ -54,8 +54,10 @@ class ChannelMessageService(BaseService): async def offset(self, channel_uid, offset=0): results = [] - - async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT 60 OFFSET :offset",dict(channel_uid=channel_uid, offset=offset)): - results.append(model) + try: + async for model in self.query("SELECT * FROM channel_message WHERE channel_uid=:channel_uid ORDER BY created_at DESC LIMIT 60 OFFSET :offset",dict(channel_uid=channel_uid, offset=offset)): + results.append(model) + except: + pass results.sort(key=lambda x: x['created_at']) return results diff --git a/src/snek/templates/app.html b/src/snek/templates/app.html index c50ff60..8caaef8 100644 --- a/src/snek/templates/app.html +++ b/src/snek/templates/app.html @@ -34,7 +34,7 @@

Chat Rooms

diff --git a/src/snek/templates/web.html b/src/snek/templates/web.html index 51f1117..1430a04 100644 --- a/src/snek/templates/web.html +++ b/src/snek/templates/web.html @@ -48,8 +48,8 @@ function updateLayout() { const messagesContainer = document.querySelector(".chat-messages"); - messagesContainer.scrollTop = messagesContainer.scrollHeight + 1000; - + //messagesContainer.scrollTop = messagesContainer.scrollHeight + 1000; + updateTimes(); let previousUser = null; document.querySelectorAll(".message").forEach((message) => { @@ -60,6 +60,9 @@ message.classList.remove("switch-user"); } }); + const lastMessage = messagesContainer.querySelector(".message:last-child"); + lastMessage.scrollIntoView({ inline: "nearest" }); + } setInterval(updateTimes, 1000); @@ -81,7 +84,7 @@ updateLayout(); setTimeout(()=>{ updateLayout() - },200) + },1000) }); initInputField(document.querySelector("textarea")); diff --git a/src/snek/view/web.py b/src/snek/view/web.py index 412ba7d..dda589f 100644 --- a/src/snek/view/web.py +++ b/src/snek/view/web.py @@ -48,6 +48,13 @@ class WebView(BaseView): )] channels = [] async for subscribed_channel in self.app.services.channel_member.find(user_uid=self.session.get("uid"), deleted_at=None, is_banned=False): - print("CHANNELL!!\n",flush=True) - channels.append(subscribed_channel) + item = {} + other_user = await self.app.services.channel_member.get_other_dm_user(subscribed_channel["channel_uid"], self.session.get("uid")) + if other_user: + item["name"] = other_user["nick"] + item["uid"] = other_user["uid"] + else: + item["name"] = subscribed_channel["label"] + item["uid"] = subscribed_channel["channel_uid"] + channels.append(item) return await self.render_template("web.html", {"channel": channel,"user": user,"messages": messages , "channels": channels}) \ No newline at end of file