# HG changeset patch # User Mikael Berthe # Date 1178531957 -7200 # Node ID 8daaa0b29b71d06dad45eda057a944a2a042ac30 # Parent 535d03a56f9d458cc235c6e1829ed20a73d3268e Enable log_plugin diff -r 535d03a56f9d -r 8daaa0b29b71 plugins/disabled/log_plugin.py --- a/plugins/disabled/log_plugin.py Thu May 03 22:41:58 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -#$ neutron_plugin 01 - -import re - -LOG_CACHE_FILE = 'dynamic/logcache.txt' - -initialize_file(LOG_CACHE_FILE, '{}') -LOG_FILENAME_CACHE = eval(read_file(LOG_CACHE_FILE)) - -def log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)): - fp.write(""" - - - - - -
neutron log
-

""" + source + """

-

""" + time.strftime('%A, %B %d, %Y', (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + """

-
- - -""") - -def log_write_footer(fp): - fp.write('\n\n\n') - -def log_get_fp(type, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)): - if type == 'public': - logdir = PUBLIC_LOG_DIR - else: - logdir = PRIVATE_LOG_DIR - if logdir[-1] == '/': - logdir = LOGDIR[:-1] - str_year = str(year) - str_month = str(month) - str_day = str(day) - filename = logdir + '/' + source + '/' + str_year + '/' + str_month + '/' + str_day + '.html' - alt_filename = logdir + '/' + source + '/' + str_year + '/' + str_month + '/' + str_day + '_alt.html' - if not os.path.exists(logdir): - os.mkdir(logdir) - if not os.path.exists(logdir + '/' + source): - os.mkdir(logdir + '/' + source) - if not os.path.exists(logdir + '/' + source + '/' + str_year): - os.mkdir(logdir + '/' + source + '/' + str_year) - if not os.path.exists(logdir + '/' + source + '/' + str_year + '/' + str_month): - os.mkdir(logdir + '/' + source + '/' + str_year + '/' + str_month) - if LOG_FILENAME_CACHE.has_key(source): - if LOG_FILENAME_CACHE[source] != filename: - fp_old = file(LOG_FILENAME_CACHE[source], 'a') - log_write_footer(fp_old) - fp_old.close() - if os.path.exists(filename): - fp = file(filename, 'a') - return fp - else: - LOG_FILENAME_CACHE[source] = filename - write_file(LOG_CACHE_FILE, str(LOG_FILENAME_CACHE)) - fp = file(filename, 'w') - log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) - return fp - else: - if os.path.exists(filename): - LOG_FILENAME_CACHE[source] = filename - write_file(LOG_CACHE_FILE, str(LOG_FILENAME_CACHE)) - fp = file(alt_filename, 'a') - # log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) - return fp - else: - LOG_FILENAME_CACHE[source] = filename - write_file(LOG_CACHE_FILE, str(LOG_FILENAME_CACHE)) - fp = file(filename, 'w') - log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) - return fp - -def log_get_timestamp(hour, minute): - timestamp = '[' - if hour < 10: - timestamp += '0' - timestamp += str(hour) - timestamp += ':' - if minute < 10: - timestamp += '0' - timestamp += str(minute) - timestamp += ']' - return timestamp - -def log_regex_url(matchobj): - # 06.03.05(Sun) slipstream@yandex.ru urls parser - return '' + matchobj.group(0) + '' - -def log_handler_message(type, source, body): - if not body: - return - (year, month, day, hour, minute, second, weekday, yearday, daylightsavings) = time.gmtime() - if type == 'public' and PUBLIC_LOG_DIR: - groupchat = source[1] - nick = source[2] - # 06.03.05(Sun) slipstream@yandex.ru urls parser & line ends - body = body.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') - body = re.sub('(http|ftp)(\:\/\/[^\s<]+)', log_regex_url, body) - body = body.replace('\n', '
') - body = body.encode('utf-8'); - nick = nick.encode('utf-8'); - timestamp = log_get_timestamp(hour, minute) - fp = log_get_fp('public', groupchat, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) - fp.write('' + timestamp + ' ') - if not nick: - fp.write('' + body + '
\n') - elif body[:3].lower() == '/me': - fp.write('* ' + nick + body[3:] + '
\n') - else: - # 08.03.05(Tue) slipstream@yandex.ru encoding - if nick == get_nick(groupchat).encode('utf-8'): - fp.write('<' + nick + '> ') - else: - fp.write('<' + nick + '> ') - fp.write(body + '
\n') - fp.close() - elif type == 'private' and PRIVATE_LOG_DIR: - jid = get_true_jid(source) - nick = string.split(jid, '@')[0] - # 06.03.05(Sun) slipstream@yandex.ru urls parser, line ends & encoding - body = body.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') - body = re.sub('(http|ftp)(\:\/\/[^\s<]+)', log_regex_url, body) - body = body.replace('\n', '
') - body = body.encode('utf-8'); - nick = nick.encode('utf-8'); - timestamp = log_get_timestamp(hour, minute) - fp = log_get_fp('private', jid, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) - fp.write('' + timestamp + ' ') - if body[:3].lower() == '/me': - fp.write('* ' + nick + body[3:] + '
\n') - else: - fp.write('<' + nick + '> ' + body + '
\n') - fp.close() - -def log_handler_outgoing_message(target, body): - if GROUPCHATS.has_key(target) or not body: - return - (year, month, day, hour, minute, second, weekday, yearday, daylightsavings) = time.gmtime() - jid = get_true_jid(target) - nick = 'neutron' - # 06.03.05(Sun) slipstream@yandex.ru urls parser, line ends & encoding - body = body.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') - body = re.sub('(http|ftp)(\:\/\/[^\s<]+)', log_regex_url, body) - body = body.replace('\n', '
') - body = body.encode('utf-8'); - nick = nick.encode('utf-8'); - timestamp = log_get_timestamp(hour, minute) - fp = log_get_fp('private', jid, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) - fp.write('' + timestamp + ' ') - if body[:3].lower() == '/me': - fp.write('* ' + nick + body[3:] + '
\n') - else: - fp.write('<' + nick + '> ' + body + '
\n') - fp.close() - -if PUBLIC_LOG_DIR or PRIVATE_LOG_DIR: - register_message_handler(log_handler_message) -if PRIVATE_LOG_DIR: - register_outgoing_message_handler(log_handler_outgoing_message) diff -r 535d03a56f9d -r 8daaa0b29b71 plugins/log_plugin.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/log_plugin.py Mon May 07 11:59:17 2007 +0200 @@ -0,0 +1,172 @@ +#$ neutron_plugin 01 + +import re + +LOG_CACHE_FILE = 'dynamic/logcache.txt' + +initialize_file(LOG_CACHE_FILE, '{}') +LOG_FILENAME_CACHE = eval(read_file(LOG_CACHE_FILE)) + +def log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)): + fp.write(""" + + + + + +
neutron log
+

""" + source + """

+

""" + time.strftime('%A, %B %d, %Y', (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + """

+
+ + +""") + +def log_write_footer(fp): + fp.write('\n\n\n') + +def log_get_fp(type, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)): + if type == 'public': + logdir = PUBLIC_LOG_DIR + else: + logdir = PRIVATE_LOG_DIR + if logdir[-1] == '/': + logdir = LOGDIR[:-1] + str_year = str(year) + str_month = str(month) + str_day = str(day) + filename = logdir + '/' + source + '/' + str_year + '/' + str_month + '/' + str_day + '.html' + alt_filename = logdir + '/' + source + '/' + str_year + '/' + str_month + '/' + str_day + '_alt.html' + if not os.path.exists(logdir): + os.mkdir(logdir) + if not os.path.exists(logdir + '/' + source): + os.mkdir(logdir + '/' + source) + if not os.path.exists(logdir + '/' + source + '/' + str_year): + os.mkdir(logdir + '/' + source + '/' + str_year) + if not os.path.exists(logdir + '/' + source + '/' + str_year + '/' + str_month): + os.mkdir(logdir + '/' + source + '/' + str_year + '/' + str_month) + if LOG_FILENAME_CACHE.has_key(source): + if LOG_FILENAME_CACHE[source] != filename: + fp_old = file(LOG_FILENAME_CACHE[source], 'a') + log_write_footer(fp_old) + fp_old.close() + if os.path.exists(filename): + fp = file(filename, 'a') + return fp + else: + LOG_FILENAME_CACHE[source] = filename + write_file(LOG_CACHE_FILE, str(LOG_FILENAME_CACHE)) + fp = file(filename, 'w') + log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + return fp + else: + if os.path.exists(filename): + LOG_FILENAME_CACHE[source] = filename + write_file(LOG_CACHE_FILE, str(LOG_FILENAME_CACHE)) + fp = file(alt_filename, 'a') + # log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + return fp + else: + LOG_FILENAME_CACHE[source] = filename + write_file(LOG_CACHE_FILE, str(LOG_FILENAME_CACHE)) + fp = file(filename, 'w') + log_write_header(fp, source, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + return fp + +def log_get_timestamp(hour, minute): + timestamp = '[' + if hour < 10: + timestamp += '0' + timestamp += str(hour) + timestamp += ':' + if minute < 10: + timestamp += '0' + timestamp += str(minute) + timestamp += ']' + return timestamp + +def log_regex_url(matchobj): + # 06.03.05(Sun) slipstream@yandex.ru urls parser + return '' + matchobj.group(0) + '' + +def log_handler_message(type, source, body): + if not body: + return + (year, month, day, hour, minute, second, weekday, yearday, daylightsavings) = time.gmtime() + if type == 'public' and PUBLIC_LOG_DIR: + groupchat = source[1] + nick = source[2] + # 06.03.05(Sun) slipstream@yandex.ru urls parser & line ends + body = body.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') + body = re.sub('(http|ftp)(\:\/\/[^\s<]+)', log_regex_url, body) + body = body.replace('\n', '
') + body = body.encode('utf-8'); + nick = nick.encode('utf-8'); + timestamp = log_get_timestamp(hour, minute) + fp = log_get_fp('public', groupchat, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + fp.write('' + timestamp + ' ') + if not nick: + fp.write('' + body + '
\n') + elif body[:3].lower() == '/me': + fp.write('* ' + nick + body[3:] + '
\n') + else: + # 08.03.05(Tue) slipstream@yandex.ru encoding + if nick == get_nick(groupchat).encode('utf-8'): + fp.write('<' + nick + '> ') + else: + fp.write('<' + nick + '> ') + fp.write(body + '
\n') + fp.close() + elif type == 'private' and PRIVATE_LOG_DIR: + jid = get_true_jid(source) + nick = string.split(jid, '@')[0] + # 06.03.05(Sun) slipstream@yandex.ru urls parser, line ends & encoding + body = body.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') + body = re.sub('(http|ftp)(\:\/\/[^\s<]+)', log_regex_url, body) + body = body.replace('\n', '
') + body = body.encode('utf-8'); + nick = nick.encode('utf-8'); + timestamp = log_get_timestamp(hour, minute) + fp = log_get_fp('private', jid, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + fp.write('' + timestamp + ' ') + if body[:3].lower() == '/me': + fp.write('* ' + nick + body[3:] + '
\n') + else: + fp.write('<' + nick + '> ' + body + '
\n') + fp.close() + +def log_handler_outgoing_message(target, body): + if GROUPCHATS.has_key(target) or not body: + return + (year, month, day, hour, minute, second, weekday, yearday, daylightsavings) = time.gmtime() + jid = get_true_jid(target) + nick = 'neutron' + # 06.03.05(Sun) slipstream@yandex.ru urls parser, line ends & encoding + body = body.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') + body = re.sub('(http|ftp)(\:\/\/[^\s<]+)', log_regex_url, body) + body = body.replace('\n', '
') + body = body.encode('utf-8'); + nick = nick.encode('utf-8'); + timestamp = log_get_timestamp(hour, minute) + fp = log_get_fp('private', jid, (year, month, day, hour, minute, second, weekday, yearday, daylightsavings)) + fp.write('' + timestamp + ' ') + if body[:3].lower() == '/me': + fp.write('* ' + nick + body[3:] + '
\n') + else: + fp.write('<' + nick + '> ' + body + '
\n') + fp.close() + +if PUBLIC_LOG_DIR or PRIVATE_LOG_DIR: + register_message_handler(log_handler_message) +if PRIVATE_LOG_DIR: + register_outgoing_message_handler(log_handler_outgoing_message)