OSDN Git Service

treat channel name in lower case
authormorimoto <morimoto@180c8125-5b33-4295-ad04-72a68a15b4cc>
Wed, 18 Aug 2004 14:24:53 +0000 (14:24 +0000)
committermorimoto <morimoto@180c8125-5b33-4295-ad04-72a68a15b4cc>
Wed, 18 Aug 2004 14:24:53 +0000 (14:24 +0000)
keitairc

index b278f82..8b55a68 100755 (executable)
--- a/keitairc
+++ b/keitairc
@@ -1,6 +1,6 @@
 #!/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
@@ -8,7 +8,7 @@
 # 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;
@@ -102,8 +102,9 @@ sub on_irc_join{
 
     # 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");
     }
@@ -116,9 +117,10 @@ sub on_irc_part{
 
     # 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");
     }
@@ -164,33 +166,34 @@ sub add_message{
       $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;
     }
 }
 
@@ -224,10 +227,12 @@ sub label{
 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);
 
@@ -247,11 +252,11 @@ sub index_page{
        $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>';
     }
@@ -278,6 +283,15 @@ sub compact_channel_name{
 }
 
 ################################################################
+sub canon_name{
+    local($_) = shift;
+
+    tr/A-Z[\\]^/a-z{|}~/;
+
+    $_;
+}
+
+################################################################
 sub render{
     local($_);
     my @buf;
@@ -392,16 +406,17 @@ sub on_web_request{
        # $content .= '<input type="submit" accesskey="1" value="&#63920;">';
        $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{
@@ -415,10 +430,10 @@ sub on_web_request{
        $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>';