Last active
August 29, 2015 14:05
-
-
Save tsudoko/aa1018440aa8cb264d24 to your computer and use it in GitHub Desktop.
uTox log converter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
from datetime import datetime | |
from os.path import basename | |
import struct | |
import sys | |
format_toxic = False | |
datestamp = "%Y/%m/%d" | |
timestamp = "%X" | |
name_a = "* %s" | |
name_c = "<%s>" | |
event = "-!- %s" | |
datechange = "Day changed to %s" | |
namechange = "%s has changed their name to %s" | |
def process(filename): | |
with open(filename, "rb") as fi: | |
time_last = None | |
names_last = [None, None] | |
while fi: | |
try: | |
msg_header = struct.unpack("QHHBB2B", fi.read(16)) | |
except struct.error: | |
break | |
time = msg_header[0] | |
namelen = msg_header[1] | |
length = msg_header[2] | |
flags = msg_header[3] | |
msg_type = msg_header[4] | |
#zeroes = msg_header[-2:] | |
time = datetime.fromtimestamp(time) | |
name = fi.read(namelen).decode() | |
msg = fi.read(length).decode() | |
if not format_toxic and time_last and time.day != time_last.day: | |
print(event % datechange % time.strftime(datestamp)) | |
time_last = time | |
if names_last[flags] and name != names_last[flags]: | |
print(event % namechange % (names_last[flags], name)) | |
names_last[flags] = name | |
if sys.stdout.isatty(): | |
if flags: | |
name = "\033[35m" + name + "\033[m" | |
for line in msg.split('\n'): | |
if line.startswith('>'): | |
msg = msg.replace(line, "\033[32m" + line + "\033[m") | |
if msg_type: | |
logstr = time.strftime(timestamp) + ' ' + name_a % name + ' ' + msg | |
else: | |
logstr = time.strftime(timestamp) + ' ' + name_c % name + ' ' + msg | |
print(logstr) | |
if format_toxic: | |
timestamp = "%Y/%m/%d [%X]" | |
name_c = "%s:" | |
event = "????/??/?? [??:??:??] * %s" | |
namechange = "%s is now known as %s" | |
if len(sys.argv) < 2: | |
print("usage: %s [logfile]..." % basename(sys.argv[0]), file=sys.stderr) | |
for i in sys.argv[1:]: | |
process(i) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment