source: perl/modules/IRC/lib/BarnOwl/Message/IRC.pm @ 9375f8c

debianrelease-1.10release-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since 9375f8c was f79d6a2, checked in by Anders Kaseorg <andersk@mit.edu>, 15 years ago
IRC: Escape interpolated variables in regexes using "\Q\E".
  • Property mode set to 100644
File size: 2.1 KB
RevLine 
[b38b0b2]1use warnings;
2use strict;
3
4=head1 NAME
5
6BarnOwl::Message::IRC
7
8=head1 DESCRIPTION
9
10A subclass of BarnOwl::Message for IRC messages
11
12=cut
13
14package BarnOwl::Message::IRC;
15
16use base qw( BarnOwl::Message );
17
18sub smartfilter {
19    my $self = shift;
20    my $inst = shift;
21
[38a7f22]22    my $filter;
23    my @filter;
[b38b0b2]24
25    if($self->is_private) {
26        my $who;
27        if($self->direction eq 'out') {
28            $who = $self->recipient;
29        } else {
30            $who = $self->sender;
31        }
32        $filter = "irc-user-$who";
[38a7f22]33        @filter  =
34             (qw{( type ^irc$ and filter personal and },
[f79d6a2]35              qw{( ( direction ^in$ and sender}, "^\Q$who\E\$",
36              qw{ ) or ( direction ^out$ and recipient}, "^\Q$who\E\$",
[38a7f22]37              qw{) ) ) });
38        BarnOwl::command("filter", "$filter", @filter);
[b38b0b2]39        return $filter;
40    } else {
[0e52069]41        # To a Channel
42        my $network = $self->network;
43        my $channel = $self->channel;
[8df6cbb]44        my $sender = $self->sender;
45        my ($filter, $ftext);
46        if ($inst && $self->body =~ /^(\S+):/) {
47            $filter = "irc-$network-channel-$channel-$sender-$1";
[38a7f22]48            @filter =
[f79d6a2]49                 (qw{type ^irc$ and network}, "^\Q$network\E\$",
50                  qw{and channel}, "^\Q$channel\E\$",
51                  qw{and ( sender}, "^\Q$sender\E\$",
52                  qw{or sender}, "^\Q$1\E\$",qq{)});
[8df6cbb]53        } else {
54            $filter = "irc-$network-channel-$channel";
[f79d6a2]55            @filter = (qw{type ^irc$ and network}, "^\Q$network\E\$",
56                       qw{and channel}, "^\Q$channel\E\$");
[8df6cbb]57        }
[38a7f22]58        BarnOwl::command("filter", "$filter", @filter);
[0e52069]59        return $filter;
[b38b0b2]60    }
61}
62
63sub server {shift->{server}}
64sub network {shift->{network}}
[0e52069]65sub channel {shift->{channel}}
[4789b17]66sub action {shift->{action}}
67sub reason {shift->{reason}}
[b38b0b2]68
69# display
[2c40dc0]70sub context {shift->{network};}
71sub subcontext {shift->{recipient};}
[b38b0b2]72
73sub long_sender {shift->{from} || ""};
74
[1fd5041b]75sub login_type {
76    my $self = shift;
[4789b17]77    return " (" . uc $self->action . ")";
[1fd5041b]78}
79
[4789b17]80sub login_extra { 
81    my $self = shift;
82    if ($self->action eq "quit") {
83        return $self->reason;
84    } else {
85        return $self->channel;
86    }
87}
[b38b0b2]88
891;
Note: See TracBrowser for help on using the repository browser.