/[irc-logger]/trunk/irc-logger.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/irc-logger.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 19 by dpavlin, Mon Mar 13 21:02:16 2006 UTC revision 20 by dpavlin, Tue Mar 14 17:17:53 2006 UTC
# Line 18  log all conversation on irc channel Line 18  log all conversation on irc channel
18    
19  ## CONFIG  ## CONFIG
20    
21  my $NICK = 'irc-logger-dev';  my $NICK = 'irc-logger';
22  my $CONNECT =  my $CONNECT =
23    {Server => 'irc.freenode.net',    {Server => 'irc.freenode.net',
24     Nick => $NICK,     Nick => $NICK,
# Line 91  values (?,?,?,?) Line 91  values (?,?,?,?)
91                  time => '{%s} ',                  time => '{%s} ',
92                  time_channel => '{%s %s} ',                  time_channel => '{%s %s} ',
93                  nick => '%s: ',                  nick => '%s: ',
94                    me_nick => '***%s ',
95                  message => '%s',                  message => '%s',
96          },          },
97          message_filter => sub {          filter => {
98                  # modify message content                  message => sub {
99                  return shift;                          # modify message content
100                            return shift;
101                    }
102          }          }
103   );   );
104    
105    Order is important. Fields are first passed through C<filter> (if available) and
106    then throgh C<< sprintf($fmt->{message}, $message >> if available.
107    
108  =cut  =cut
109    
110  sub get_from_log {  sub get_from_log {
# Line 110  sub get_from_log { Line 116  sub get_from_log {
116                  time => '{%s} ',                  time => '{%s} ',
117                  time_channel => '{%s %s} ',                  time_channel => '{%s %s} ',
118                  nick => '%s: ',                  nick => '%s: ',
119                    me_nick => '***%s ',
120                  message => '%s',                  message => '%s',
121          };          };
122    
# Line 118  sub get_from_log { Line 125  sub get_from_log {
125                          time::date as date,                          time::date as date,
126                          time::time as time,                          time::time as time,
127                          channel,                          channel,
128                            me,
129                          nick,                          nick,
130                          message                          message
131                  from log                  from log
# Line 169  sub get_from_log { Line 177  sub get_from_log {
177                  my $append = 1;                  my $append = 1;
178    
179                  if ($last_row->{nick} ne $row->{nick}) {                  if ($last_row->{nick} ne $row->{nick}) {
180                          $msg .= sprintf($args->{fmt}->{nick}, $row->{nick});                          # obfu way to find format for me_nick if needed or fallback to default
181                            my $fmt = $row->{me} ? ( $args->{fmt}->{me_nick} || $args->{fmt}->{nick} ) : $args->{fmt}->{nick};
182                            $fmt ||= '%s';
183    
184                            my $nick = $row->{nick};
185                            $nick = $args->{filter}->{nick}->($nick) if (ref($args->{filter}->{nick}) eq 'CODE');
186    
187                            $msg .= sprintf( $fmt, $nick );
188                          $append = 0;                          $append = 0;
189                  }                  }
190    
191                  if (ref($args->{message_filter}) eq 'CODE') {                  $args->{fmt}->{message} ||= '%s';
192                    if (ref($args->{filter}->{message}) eq 'CODE') {
193                          $msg .= sprintf($args->{fmt}->{message},                          $msg .= sprintf($args->{fmt}->{message},
194                                  $args->{message_filter}->(                                  $args->{filter}->{message}->(
195                                          $row->{message}                                          $row->{message}
196                                  )                                  )
197                          );                          );
# Line 424  my $escape_re  = join '|' => keys %escap Line 440  my $escape_re  = join '|' => keys %escap
440  my $style = <<'_END_OF_STYLE_';  my $style = <<'_END_OF_STYLE_';
441  p { margin: 0; padding: 0.1em; }  p { margin: 0; padding: 0.1em; }
442  .time, .channel { color: #808080; font-size: 60%; }  .time, .channel { color: #808080; font-size: 60%; }
443  .nick { color: #0000ff; font-size: 80%; }  .nick { color: #000000; font-size: 80%; padding: 2px; font-family: courier, courier new, monospace ; }
444  .message { color: #000000; font-size: 100%; }  .message { color: #000000; font-size: 100%; }
445  .search { float: right; }  .search { float: right; }
446    .col-0 { background: #ffff66 }
447    .col-1 { background: #a0ffff }
448    .col-2 { background: #99ff99 }
449    .col-3 { background: #ff9999 }
450    .col-4 { background: #ff66ff }
451  _END_OF_STYLE_  _END_OF_STYLE_
452    
453    my $max_color = 4;
454    
455    my %nick_enumerator;
456    
457  sub root_handler {  sub root_handler {
458          my ($request, $response) = @_;          my ($request, $response) = @_;
459          $response->code(RC_OK);          $response->code(RC_OK);
# Line 461  sub root_handler { Line 486  sub root_handler {
486                                  fmt => {                                  fmt => {
487                                          time => '<span class="time">%s</span> ',                                          time => '<span class="time">%s</span> ',
488                                          time_channel => '<span class="channel">%s %s</span> ',                                          time_channel => '<span class="channel">%s %s</span> ',
489                                          nick => '<span class="nick">%s:</span> ',                                          nick => '%s:&nbsp;',
490                                            me_nick => '***%s&nbsp;',
491                                          message => '<span class="message">%s</span>',                                          message => '<span class="message">%s</span>',
492                                  },                                  },
493                                  message_filter => sub {                                  filter => {
494                                          my $m = shift || return;                                          message => sub {
495                                          $m =~ s/($escape_re)/$escape{$1}/gs;                                                  my $m = shift || return;
496                                          $m =~ s#($RE{URI}{HTTP})#<a href="$1">$1</a>#gs;                                                  $m =~ s/($escape_re)/$escape{$1}/gs;
497                                          return $m;                                                  $m =~ s#($RE{URI}{HTTP})#<a href="$1">$1</a>#gs;
498                                                    return $m;
499                                            },
500                                            nick => sub {
501                                                    my $n = shift || return;
502                                                    if (! $nick_enumerator{$n})  {
503                                                            my $max = scalar keys %nick_enumerator;
504                                                            $nick_enumerator{$n} = $max + 1;
505                                                    }
506                                                    return '<span class="nick col-' .
507                                                            ( $nick_enumerator{$n} % $max_color ) .
508                                                            '">' . $n . '</span>';
509                                            },
510                                  },                                  },
511                          )                          )
512                  ) .                  ) .

Legend:
Removed from v.19  
changed lines
  Added in v.20

  ViewVC Help
Powered by ViewVC 1.1.26