Skip to content

Commit

Permalink
Report parts, joins, nick-changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
mtwebster committed Mar 10, 2024
1 parent 0921613 commit 584697d
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 36 deletions.
91 changes: 56 additions & 35 deletions usr/lib/jargonaut/jargonaut.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import locale
import os
import random
import random
import re
import setproctitle
import ssl
Expand All @@ -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):
Expand Down Expand Up @@ -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+
Expand Down Expand Up @@ -276,32 +275,21 @@ 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]:
self.assign_color(nick)
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):
Expand Down Expand Up @@ -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}")
Expand All @@ -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}")
Expand All @@ -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"):
Expand Down Expand Up @@ -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"<i><-- {text}</i>"
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"<i><-- {text}</i>"
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"""
<div class="action">
<div class="action-text">{action_message}</div>
</div>
"""

elif message.nick == last_nick and minutes_since_previous_message < 3:
messages_section += f"""
<div class="line {response}">{text}</div>
"""
Expand All @@ -439,7 +460,9 @@ def render_html(self):
<div class="nick">{nickname}<span class="date">{date}</span></div>
<div class="line {response}">{text}</div>
"""
last_nick = message.nick
# ignore parts/joins with respect to chat continuity
if message.action is None:
last_nick = message.nick

html = f"""
<html>
Expand Down Expand Up @@ -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()

Expand Down
14 changes: 13 additions & 1 deletion usr/share/jargonaut/webview.css
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
}

0 comments on commit 584697d

Please sign in to comment.