#!/usr/bin/perl
# keitairc
-# $Id: keitairc,v 1.22 2004-07-30 09:39:21 ishikawa Exp $
+# $Id: keitairc,v 1.23 2004-08-18 14:24:53 morimoto Exp $
#
# Copyright (c) 2003 Jun Morimoto <morimoto@xantia.citroen.org>
# This program is covered by the GNU General Public License 2
# Depends: libjcode-pm-perl, libpoe-component-irc-perl,
# liburi-perl, libwww-perl, libappconfig-perl
-my $rcsid = q$Id: keitairc,v 1.22 2004-07-30 09:39:21 ishikawa Exp $;
+my $rcsid = q$Id: keitairc,v 1.23 2004-08-18 14:24:53 morimoto Exp $;
my ($version) = $rcsid =~ m#,v ([0-9.]+)#;
use strict;
# chop off after the gap (bug workaround of madoka)
$channel =~ s/ .*//;
+ my $canon_channel = &canon_name($channel);
- $channel_name{$channel}++;
+ $channel_name{$canon_channel} = $channel;
unless ($who eq $config->irc_nick) {
&add_message($channel, undef, "$who joined");
}
# chop off after the gap (bug workaround of POE::Filter::IRC)
$channel =~ s/ .*//;
+ my $canon_channel = &canon_name($channel);
if ($who eq $config->irc_nick) {
- delete $channel_name{$channel};
+ delete $channel_name{$canon_channel};
} else {
&add_message($channel, undef, "$who leaves");
}
$message = sprintf('%s %s', &now, $msg);
}
- my @tmp = split("\n", $channel_buffer{$channel});
+ my $canon_channel = &canon_name($channel);
+ my @tmp = split("\n", $channel_buffer{$canon_channel});
push @tmp, $message;
- my @tmp2 = split("\n", $channel_recent{$channel});
+ my @tmp2 = split("\n", $channel_recent{$canon_channel});
push @tmp2, $message;
if(@tmp > $config->web_lines){
- $channel_buffer{$channel} =
+ $channel_buffer{$canon_channel} =
join("\n", splice(@tmp, -$config->web_lines));
}else{
- $channel_buffer{$channel} = join("\n", @tmp);
+ $channel_buffer{$canon_channel} = join("\n", @tmp);
}
if(@tmp2 > $config->web_lines){
- $channel_recent{$channel} =
+ $channel_recent{$canon_channel} =
join("\n", splice(@tmp2, -$config->web_lines));
}else{
- $channel_recent{$channel} = join("\n", @tmp2);
+ $channel_recent{$canon_channel} = join("\n", @tmp2);
}
- $mtime{$channel} = time;
+ $mtime{$canon_channel} = time;
# unread lines
- $unread{$channel} = scalar(@tmp2);
+ $unread{$canon_channel} = scalar(@tmp2);
- if ($unread{$channel} > $config->web_lines) {
- $unread{$channel} = $config->web_lines;
+ if ($unread{$canon_channel} > $config->web_lines) {
+ $unread{$canon_channel} = $config->web_lines;
}
}
sub index_page{
my $buf;
my $accesskey = 1;
+ my $channel;
- for my $channel (sort {
+ for my $canon_channel (sort {
$mtime{$b} <=> $mtime{$a};
}(keys(%channel_name))){
+ $channel = $channel_name{$canon_channel};
$buf .= &label($accesskey);
$accesskey++;
# \e$BL$FI9T?t\e(B
- if($unread{$channel} > 0){
+ if($unread{$canon_channel} > 0){
$buf .= sprintf(' <a href="%s%s.update">%d</a>',
$docroot,
uri_escape($channel),
- $unread{$channel});
+ $unread{$canon_channel});
}
$buf .= '<br>';
}
}
################################################################
+sub canon_name{
+ local($_) = shift;
+
+ tr/A-Z[\\]^/a-z{|}~/;
+
+ $_;
+}
+
+################################################################
sub render{
local($_);
my @buf;
# $content .= '<input type="submit" accesskey="1" value="聆">';
$content .= '</form>';
- if(defined($channel_name{$channel})){
- if(defined($channel_buffer{$channel}) &&
- length($channel_buffer{$channel})){
+ my $canon_channel = &canon_name($channel);
+ if(defined($channel_name{$canon_channel})){
+ if(defined($channel_buffer{$canon_channel}) &&
+ length($channel_buffer{$canon_channel})){
$content .= '<a accesskey="9" href="#2"></a>';
if ((($update_chk eq 1)||((defined $config->show_newmsgonly) && ($send_chk eq 1)))) {
- $content .= &render($channel_recent{$channel});
+ $content .= &render($channel_recent{$canon_channel});
$content .= sprintf('<a accesskey="5" href="%s%s">
..more[5]</a>', $docroot, uri_escape($channel));
} else {
- $content .= &render($channel_buffer{$channel});
+ $content .= &render($channel_buffer{$canon_channel});
}
$content .= '<a name="2"></a>';
}else{
$send_chk = 0;
# clear unread counter
- $unread{$channel} = 0;
+ $unread{$canon_channel} = 0;
# clear recent messages buffer
- $channel_recent{$channel} = '';
+ $channel_recent{$canon_channel} = '';
}
$content .= '</body></html>';