OSDN Git Service

98f628e2164641744b93b3f65c1a867a97703521
[keitairc/keitairc.git] / lib / plugins / 00unread
1 # -*- mode: perl; coding: utf-8 -*-
2 # keitairc/lib/plugins/00unread
3 # チャネルの未読メッセージ閲覧
4 # $Id: 00unread,v 1.15 2009-01-04 13:49:15 nyan_ Exp $
5 # $Source: /home/ishikawa/work/keitairc/tmp/keitairc/lib/plugins/00unread,v $
6
7 # The line number (1 incremented) and filename below must be
8 # actual. see perlsyn.
9 # line 10 "keitairc/lib/plugins/00unread"
10
11 $plugin = {
12         name => 'unread',
13         action_imprementation => sub {
14                 my ($request, $name, $session_id, $param_string) = @_;
15                 my $cid = $param_string;
16                 my $channel = $::ib->cid2name($cid);
17
18                 ::send_message($request, $channel);
19
20                 my @loop;
21                 if(defined($::ib->cid2name($cid))){
22                         my ($tp, $np, $mp, $rp) = $::ib->buffer_ptr($cid);
23                         if(defined $tp){
24                                 my @range = (0 .. @{$tp}-1);
25                                 @range = reverse @range if $::cf->reverse_unread();
26                                 my ($last_date, $current_date) = ('', undef);
27                                 for my $lp (@range){
28                                         next if @{$rp}[$lp];
29                                         my $p = {};
30                                         $current_date = $::ib->format_date(@{$tp}[$lp]);
31                                         unless($last_date eq $current_date){
32                                                 $last_date = $current_date;
33                                                 my $pp = {};
34                                                 $pp->{date} = $current_date;
35                                                 push @loop, $pp;
36                                         }
37
38                                         $p->{time} = $::ib->format_time(@{$tp}[$lp]);
39                                         $p->{nick} = $::ib->simple_escape(@{$np}[$lp]);
40                                         my $message = $::ib->colorize($::ib->simple_escape(@{$mp}[$lp])) || '';
41                                         for my $name ($::pl->list_replace_plugins()){
42                                                 last if $message =~ s/$::pl->{plugins}->{$name}->{message_replace_regexp}/$::pl->{plugins}->{$name}->{message_replace_imprementation}($session_id, $1, $2, $3, $4, $5, $6, $7, $8, $9)/eg;
43                                         }
44                                         $message =~ s/\s+$//;
45                                         $message =~ s/\s+/ /g;
46                                         $p->{message} = Encode::encode($::cf->web_charset(), $message);
47                                         @{$rp}[$lp] = 1;
48                                         push @loop, $p;
49                                 }
50                         }
51                 }
52
53                 my $ci = new Keitairc::ClientInfo($request);
54                 my $view = new Keitairc::View($::cf, $ci);
55                 my $cname = Encode::encode($::cf->web_charset(), $::ib->simple_escape($::ib->compact_channel_name($cid)));
56                 return $view->render('unread.html', {
57                         loop => \@loop,
58                         channel_compact => $cname,
59                         follow_nick => $::cf->follow_nick(),
60                         cid => $cid,
61                              });
62         }
63 };
64
65 1;