From 5a72c8cd83d1374ff709556cbf4b4ddbf7a9ab7a Mon Sep 17 00:00:00 2001 From: retoor Date: Sat, 8 Mar 2025 08:25:49 +0100 Subject: [PATCH] Update. --- src/snek/model/channel_member.py | 8 ++++---- src/snek/service/channel_member.py | 6 +++++- src/snek/templates/threads.html | 8 ++++---- src/snek/templates/web.html | 2 +- src/snek/view/threads.py | 25 +++++++++++++------------ src/snek/view/web.py | 9 ++++++++- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/snek/model/channel_member.py b/src/snek/model/channel_member.py index 5a8332e..9689fa5 100644 --- a/src/snek/model/channel_member.py +++ b/src/snek/model/channel_member.py @@ -22,11 +22,11 @@ class ChannelMemberModel(BaseModel): return await self.app.services.channel.get(uid=self['channel_uid']) async def get_name(self): - if self["channel_uid"] == "dm": + channel = await self.get_channel() + if channel["tag"] == "dm": user = await self.get_other_dm_user() return user['nick'] - channel = await self.get_channel() - return channel['name'] + return channel['name'] or self['label'] async def get_other_dm_user(self): channel = await self.get_channel() @@ -37,4 +37,4 @@ class ChannelMemberModel(BaseModel): if model["uid"] != self['uid']: return await self.app.services.user.get(uid=model["user_uid"]) return await self.get_user() - \ No newline at end of file + diff --git a/src/snek/service/channel_member.py b/src/snek/service/channel_member.py index 191a063..42415d1 100644 --- a/src/snek/service/channel_member.py +++ b/src/snek/service/channel_member.py @@ -36,7 +36,11 @@ class ChannelMemberService(BaseService): async def get_dm(self,from_user, to_user): 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 + if not from_user == to_user: + return None + 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') LEFT JOIN channel_member AS channel_member2 ON(channel_member2.channel_uid = NULL AND channel_member2.user_uid = NULL) WHERE channel_member.user_uid=:from_user " ,dict(from_user=from_user, to_user=to_user)): + + return model async def get_other_dm_user(self, channel_uid, user_uid): channel_member = await self.get(channel_uid=channel_uid, user_uid=user_uid) diff --git a/src/snek/templates/threads.html b/src/snek/templates/threads.html index b982914..73c256a 100644 --- a/src/snek/templates/threads.html +++ b/src/snek/templates/threads.html @@ -5,18 +5,18 @@
{% for thread in threads %} {% autoescape false %} -
-
{{thread.last_message_user_nick}}
+
{{thread.name}}
{% autoescape false %}{% emoji %}{% linkify %}{% markdown %}{% autoescape false %}{{ thread.last_message_text }}{%raw %} {% endraw%}{%endautoescape%}{% endmarkdown %}{% endlinkify %}{% endemoji %}{% endautoescape %}
-
+ {% endautoescape %} {% endfor %} diff --git a/src/snek/templates/web.html b/src/snek/templates/web.html index bdcddae..2c48cb4 100644 --- a/src/snek/templates/web.html +++ b/src/snek/templates/web.html @@ -3,7 +3,7 @@ {% block main %}
-

{{ channel.label.value }}

+

{{ name }}

{% for message in messages %} diff --git a/src/snek/view/threads.py b/src/snek/view/threads.py index d8f4359..772685f 100644 --- a/src/snek/view/threads.py +++ b/src/snek/view/threads.py @@ -8,23 +8,24 @@ class ThreadsView(BaseView): async for channel_member in user.get_channel_members(): thread = {} channel = await self.services.channel.get(uid=channel_member["channel_uid"]) + last_message = await channel.get_last_message() + if not last_message: + continue + thread["uid"] = channel['uid'] thread["name"] = await channel_member.get_name() thread["new_count"] = channel_member["new_count"] thread["last_message_on"] = channel["last_message_on"] thread['created_at'] = thread['last_message_on'] - last_message = await channel.get_last_message() - if last_message: - thread["last_message_text"] = last_message["message"] - thread['last_message_user_uid'] = last_message["user_uid"] - user_last_message = await self.app.services.user.get(uid=last_message["user_uid"]) - thread['last_message_user_nick'] = user_last_message["nick"] - thread['last_message_user_color'] = user_last_message['color'] - else: - thread["last_message_text"] = None - thread['last_message_user_uid'] = None - thread['last_message_user_nick'] = None - thread['last_message_user_color'] = None + + + thread['name_color'] = "#f05a28" + thread["last_message_text"] = last_message["message"] + thread['last_message_user_uid'] = last_message["user_uid"] + user_last_message = await self.app.services.user.get(uid=last_message["user_uid"]) + if channel['tag'] == "dm": + thread['name_color'] = user_last_message['color'] + thread['last_message_user_color'] = user_last_message['color'] threads.append(thread) diff --git a/src/snek/view/web.py b/src/snek/view/web.py index 8fd5ddc..3ae7902 100644 --- a/src/snek/view/web.py +++ b/src/snek/view/web.py @@ -42,6 +42,11 @@ class WebView(BaseView): return web.HTTPFound("/channel/{}.html".format(channel["uid"])) if not channel: return web.HTTPNotFound() + + channel_member = await self.app.services.channel_member.get(user_uid=self.session.get("uid"), channel_uid=channel["uid"]) + if not channel_member: + return web.HTTPNotFound() + user = await self.services.user.get(uid=self.session.get("uid")) messages = [await self.app.services.channel_message.to_extended_dict(message) for message in await self.app.services.channel_message.offset( channel["uid"] @@ -60,4 +65,6 @@ class WebView(BaseView): 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 + + name = await channel_member.get_name() + return await self.render_template("web.html", {"name": name, "channel": channel,"user": user,"messages": messages , "channels": channels})