summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2021-08-26 21:18:22 +1000
committerYuchen Pei <hi@ypei.me>2021-08-26 21:18:22 +1000
commitcbb6f77fa2a1d46ff6052baeefd26a44d878f2a3 (patch)
tree57329740635b53977f10025e26155153419c8852
parent79b22ca49affbd5a56c399c26bce3e19833dbd2c (diff)
started working on erc type logs.
-rw-r--r--gentree.py58
1 files changed, 51 insertions, 7 deletions
diff --git a/gentree.py b/gentree.py
index 220edf3..0a472bc 100644
--- a/gentree.py
+++ b/gentree.py
@@ -1,6 +1,7 @@
from enum import Enum
import sys
import pprint
+import textwrap
class LogType(Enum):
QUASSEL = 1
@@ -44,7 +45,7 @@ def parse_log_quassel(log):
[hh:mm:ss] <sender-nick> blahblah.
or
[hh:mm:ss] -*- sender-nick does something.
- [06:05:28] *** Mode #fsf +o zoe by ChanServ
+ [hh:mm:ss] *** Mode #abc +o def by ChanServ
args:
log: a string of quassel log.
return:
@@ -55,13 +56,12 @@ def parse_log_quassel(log):
messages = []
for line in log.splitlines():
message = Message()
- is_me = False
+ line = line.lstrip()
[_, nick, payload] = line.split(' ', maxsplit=2)
if nick == '***':
continue
if nick == '-*-':
[_, _, nick, payload] = line.split(' ', maxsplit=3)
- is_me = True
else:
nick = nick[1:-1] # removes <>
message.message = line
@@ -85,13 +85,51 @@ def parse_log_erc(log):
An erc message is in the form of
<nick> blahblah
blahblah blah [hh:mm]
+ ** nick does something
+ **** old-nick is now known as new-nick
And the timestamp is optional
args:
log: a string of quassel log.
return:
a list of Messages
"""
- return []
+ last_messages = dict()
+ index = 0
+ messages = []
+ log_lines = log.splitlines()
+ log_lines.append('')
+ nick = ''
+ for line, next_line in zip(log_lines, log_lines[1:]):
+ line = line.lstrip()
+ if line[0] == '<':
+ [nick, payload] = line.split(' ', maxsplit=1)
+ elif line[:3] = '** ':
+ [_, nick, payload] = line.split(' ', maxsplit=2)
+ elif line[:5] = '**** ':
+ continue
+ else:
+ payload += f'\n{line}'
+ if nick == '***':
+ continue
+ if nick == '-*-':
+ [_, _, nick, payload] = line.split(' ', maxsplit=3)
+ else:
+ nick = nick[1:-1] # removes <>
+ message.message = line
+ message.id = index
+ # Remove special symbol for op
+ if nick[0] in ['@', '%']:
+ nick = nick[1:]
+ message.sender = nick
+ if nick in last_messages:
+ message.previous_msg = last_messages[nick]
+ last_messages[nick] = index
+ for participant, msg_id in last_messages.items():
+ if payload.find(participant) != -1:
+ message.reply_to_msgs.append(msg_id)
+ messages.append(message)
+ index += 1
+ return messages
def parse_log(log):
"""parse log.
@@ -111,18 +149,24 @@ def parse_log(log):
def gen_graph(meeting):
dot = """
digraph meeting {
+ graph [
+ width = 20
+ ];
+
node [
shape = box,
- width = 40
+ margin = 0,
+ pad = 0
];
"""
for msg in meeting:
- quoted_message = msg.message.replace('"', '\\"')
+ quoted_message = textwrap.fill(msg.message.replace('"', '\\"'))
dot += f'\nm{str(msg.id)} [label="{quoted_message}"];'
if msg.id > 0:
dot += f'\nm{str(msg.id - 1)} -> m{str(msg.id)} [style="invis"];'
+ for msg in meeting:
if msg.previous_msg > -1:
- dot += f'\nm{str(msg.previous_msg)} -> m{str(msg.id)};'
+ dot += f'\nm{str(msg.previous_msg)} -> m{str(msg.id)} [style="dashed"];'
for id in msg.reply_to_msgs:
dot += f'\nm{str(id)} -> m{str(msg.id)};'
dot += '\n}'