From 584697d252cfbb1cfadc90d01b08c97e3092ea8a Mon Sep 17 00:00:00 2001 From: Michael Webster Date: Sun, 10 Mar 2024 13:14:25 -0400 Subject: [PATCH] Report parts, joins, nick-changes. --- usr/lib/jargonaut/jargonaut.py | 91 ++++++++++++++++++++------------- usr/share/jargonaut/webview.css | 14 ++++- 2 files changed, 69 insertions(+), 36 deletions(-) diff --git a/usr/lib/jargonaut/jargonaut.py b/usr/lib/jargonaut/jargonaut.py index 67d2cdb..bbaf8bb 100755 --- a/usr/lib/jargonaut/jargonaut.py +++ b/usr/lib/jargonaut/jargonaut.py @@ -17,7 +17,6 @@ import locale import os import random -import random import re import setproctitle import ssl @@ -38,10 +37,12 @@ Notify.init(_("Chat Room")) class Message(): - def __init__(self, nick, text): + def __init__(self, nick, text, action=None, old_nick=None): self.nick = nick self.text = text self.time = GLib.DateTime.new_now_local() + self.action = action + self.old_nick = old_nick class App(Gtk.Application): def __init__(self): @@ -69,8 +70,6 @@ def do_activate(self): self.channel_users[self.channel] = [] self.messages = [] - self.refresh_id = 0 - prefer_dark_mode = self.settings.get_boolean("prefer-dark-mode") try: # DarkModeManager is available in XApp 2.6+ @@ -276,9 +275,6 @@ def on_welcome(self, connection, event): @idle def on_join(self, connection, event): self.print_info(f"Joined channel: target={event.target} source={event.source}") - self.builder.get_object("main_stack").set_visible_child_name("page_chat") - self.size_user_list() - self.entry.grab_focus() nick = event.source.nick channel = event.target if nick not in self.channel_users[channel]: @@ -286,22 +282,14 @@ def on_join(self, connection, event): self.channel_users[channel].append(nick) self.update_users() if nick == self.nickname: + self.builder.get_object("main_stack").set_visible_child_name("page_chat") + self.size_user_list() + self.entry.grab_focus() self.identify(connection) - - self.run_refresh_timer() - - def run_refresh_timer(self): - self.stop_refresh_timer() - self.refresh_id = GLib.timeout_add_seconds(30, self.refresh_timer_up) - - def refresh_timer_up(self): - self.render_html() - return GLib.SOURCE_CONTINUE - - def stop_refresh_timer(self): - if self.refresh_id > 0: - GLib.source_remove(self.refresh_id) - self.refresh_id = 0 + else: + message = Message(nick, None, "join") + self.messages.append(message) + self.render_html() @idle def on_namreply(self, connection, event): @@ -337,6 +325,11 @@ def on_nick(self, connection, event): self.builder.get_object("label_username").set_markup(new_nick) self.update_users() + if new_nick != self.nickname: + message = Message(new_nick, None, "nick", event.source.nick) + self.messages.append(message) + self.render_html() + @idle def on_quit(self, connection, event): self.print_info(f"Quit: target={event.target} source={event.source}") @@ -346,6 +339,11 @@ def on_quit(self, connection, event): self.channel_users[self.channel].remove(nick) self.update_users() + if nick != self.nickname: + message = Message(nick, None, "quit") + self.messages.append(message) + self.render_html() + @idle def on_part(self, connection, event): self.print_info(f"Part: target={event.target} source={event.source}") @@ -355,6 +353,11 @@ def on_part(self, connection, event): self.channel_users[channel].remove(nick) self.update_users() + if nick != self.nickname: + message = Message(nick, None, "quit") + self.messages.append(message) + self.render_html() + @idle def on_all_raw_messages(self, connection, event): if self.settings.get_boolean("debug"): @@ -418,16 +421,34 @@ def render_html(self): nickname = message.nick letter = nickname[0].upper() color = self.user_colors[nickname] - text = message.text - words = text.lower().split(" ") - if text.startswith("\x01ACTION") and text.endswith("\x01"): - text = text.replace("\x01ACTION", "").replace("\x01", "") - text = f"<-- {text}" - if message.nick == self.nickname: - mine = "mine" - elif self.nickname.lower() in words or (self.nickname+":").lower() in words or ("@"+self.nickname).lower() in words: - response = "response" - if message.nick == last_nick and minutes_since_previous_message < 3: + + if message.text is not None: + text = message.text + words = text.lower().split(" ") + if text.startswith("\x01ACTION") and text.endswith("\x01"): + text = text.replace("\x01ACTION", "").replace("\x01", "") + text = f"<-- {text}" + if message.nick == self.nickname: + mine = "mine" + elif self.nickname.lower() in words or (self.nickname+":").lower() in words or ("@"+self.nickname).lower() in words: + response = "response" + print(minutes_since_previous_message, text) + + if message.action is not None: + if message.action == "join": + action_message = _(f"{nickname} joined the channel") + elif message.action == "quit": + action_message = _(f"{nickname} left the channel") + elif message.action == "nick": + action_message = _(f"{message.old_nick} is now {nickname}") + + messages_section += f""" +
+
{action_message}
+
+ """ + + elif message.nick == last_nick and minutes_since_previous_message < 3: messages_section += f"""
{text}
""" @@ -439,7 +460,9 @@ def render_html(self):
{nickname}{date}
{text}
""" - last_nick = message.nick + # ignore parts/joins with respect to chat continuity + if message.action is None: + last_nick = message.nick html = f""" @@ -657,8 +680,6 @@ def do_startup(self): Gtk.Application.do_startup(self) def do_shutdown(self): - self.stop_refresh_timer() - if self.is_connected: self.disconnect() diff --git a/usr/share/jargonaut/webview.css b/usr/share/jargonaut/webview.css index 4f87400..6eab339 100644 --- a/usr/share/jargonaut/webview.css +++ b/usr/share/jargonaut/webview.css @@ -39,7 +39,7 @@ body { font: normal 15px Source Sans Pro,sans-serif; overflow-x: hidden; /* Hide horizontal scrollbar */ - padding-right: 20px; + padding-right: 10px; } img { @@ -114,3 +114,15 @@ img { color: #ec5f66; font-weight: 600; } + +.action { + font-size: 0.6em; + padding-top: .1em; + padding-bottom: .1em; +} + +.action-text { + padding-top: .1em; + padding-bottom: .1em; + text-align: right; +} \ No newline at end of file