/[mws]/trunk/MWS.pm
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/MWS.pm

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

revision 14 by dpavlin, Thu May 6 19:46:58 2004 UTC revision 17 by dpavlin, Fri May 7 11:25:01 2004 UTC
# Line 10  use Mail::Box::Manager; Line 10  use Mail::Box::Manager;
10  use Config::IniFiles;  use Config::IniFiles;
11  use POSIX qw(strftime);  use POSIX qw(strftime);
12  use Text::Autoformat;  use Text::Autoformat;
13    use Text::Iconv;
14    
15  #use MWS_plucene;  #use MWS_plucene;
16  use MWS_swish;  use MWS_swish;
# Line 46  sub new { Line 47  sub new {
47          $self->{folder} = {};          $self->{folder} = {};
48    
49          $self->{wrap_margin} = $self->{config}->val('global', 'wrap_margin');          $self->{wrap_margin} = $self->{config}->val('global', 'wrap_margin');
50            $self->{max_results} = $self->{config}->val('global', 'max_results') || 100;
51    
52          return $self;          return $self;
53  }  }
# Line 73  sub open_folder { Line 75  sub open_folder {
75                  print STDERR "open_folder($mbox) ok\n" if ($debug);                  print STDERR "open_folder($mbox) ok\n" if ($debug);
76          }          }
77    
78            $self->{fetch_count} = 0;
79    
80          return $self->{folder}->{$mbox};          return $self->{folder}->{$mbox};
81    
82  }  }
# Line 82  sub close_folder { Line 86  sub close_folder {
86    
87          my $mbox = shift || croak "open_folder needs mbox name";          my $mbox = shift || croak "open_folder needs mbox name";
88    
89          return $self->{folder}->{$mbox}->close(write => 'NEVER');          $self->{folder}->{$mbox}->close(write => 'NEVER') || croak "can't close folder $mbox";
90    
91            # XXX this is rather agressive!!!
92            $self->{folder} = {};
93            return
94  }  }
95    
96  sub fetch_message {  sub fetch_message {
# Line 93  sub fetch_message { Line 101  sub fetch_message {
101    
102          # return message with ID          # return message with ID
103          print STDERR "fetch $id from $mbox\n" if ($debug);          print STDERR "fetch $id from $mbox\n" if ($debug);
104          return $self->open_folder($mbox)->find($id) ||  
105            if ($self->{fetch_count}++ > 100) {
106                    $self->close_folder($mbox);
107                    print STDERR "close_folder($mbox) forced on ",$self->{fetch_count},"iteration\n";
108            }
109            
110            my $msg = $self->open_folder($mbox)->find($id);
111            if ($msg) {
112                    return $msg;
113            } else {
114                  print STDERR "can't find message $id in $mbox. Time to re-index?\n";                  print STDERR "can't find message $id in $mbox. Time to re-index?\n";
115                    return;
116            }
117  }  }
118    
119    
# Line 108  sub search { Line 127  sub search {
127    
128          $self->{'index_ids'} = \@index_ids;          $self->{'index_ids'} = \@index_ids;
129    
130          my $results = $#index_ids + 1;          #my $results = $#index_ids + 1;
131          $self->{'results'} = $results;          #$self->{'results'} = $results;
132            
133            my $results = $self->{'total_hits'} || ($#index_ids + 1);
134    
135          $self->{'curr_result'} = 0;          $self->{'curr_result'} = 0;
136    
# Line 118  sub search { Line 139  sub search {
139          return $results || 'error';          return $results || 'error';
140  }  }
141    
142    sub decode_qp($) {
143            my $self = shift;
144    
145            my $tmp = shift || return;
146    
147            sub decode($$) {
148                    my ($cp,$qp) = @_;
149                    my $iconv = Text::Iconv->new($cp,'ISO-8859-2');
150            print STDERR "decode($cp,$qp) -> " if ($debug == 2);
151                    $qp =~ s/=([a-f0-9][a-f0-9])/chr(hex($1))/ieg;
152                    $qp =~ s/_/ /g;
153            print STDERR "$qp\n" if ($debug == 2);
154                    return $iconv->convert($qp) || $qp;
155            }
156    
157            $tmp =~ s/=\?([^\?]+)\?Q\?(.+?)\?=/decode($1,$2)/ex;
158            $tmp =~ s/^\s*["']+(.*?)["']+\s*$/$1/g;
159            return $tmp;
160    }
161    
162  sub unroll($$$) {  sub unroll($$$) {
163          my $self = shift;          my $self = shift;
164    
# Line 125  sub unroll($$$) { Line 166  sub unroll($$$) {
166    
167          my @arr;          my @arr;
168    
169            return if (! $message->$part);
170    
171          foreach my $from ($message->$part) {          foreach my $from ($message->$part) {
172                  my $tmp = $from->$sub;                  my $tmp = $from->$sub || next;
173                  if ($tmp) {  
174                          $tmp =~ s/^\s*["'](.*)["']\s*$/$1/;                  $tmp = $self->decode_qp($tmp);
175                          push @arr, $tmp;                  push @arr, $tmp;
                 }  
176          }          }
177    
178          return @arr;          return @arr;
# Line 188  sub plain_text_body { Line 230  sub plain_text_body {
230          # reformat with Text::Autoformat          # reformat with Text::Autoformat
231          my $wrap = $self->{wrap_margin};          my $wrap = $self->{wrap_margin};
232          if ($wrap && $body && $body =~ m/^.{$wrap}..*$/m) {          if ($wrap && $body && $body =~ m/^.{$wrap}..*$/m) {
233                  $body = autoformat $body;                  $body =~ s/[\r\n]/\n/gs;
234                    $body = autoformat($body, {right=>$wrap});
235                  $body .="\n[reformated using autoformat, margin at $wrap]" if ($debug == 2);                  $body .="\n[reformated using autoformat, margin at $wrap]" if ($debug == 2);
236          }          }
237    
# Line 207  sub fetch_result_by_id { Line 250  sub fetch_result_by_id {
250    
251                  print STDERR "fetch_result_by_id($id) not in cache, hitting disk\n" if ($debug == 2);                  print STDERR "fetch_result_by_id($id) not in cache, hitting disk\n" if ($debug == 2);
252    
253                  my $message = $self->fetch_message($id) || print STDERR "can't fetch message '$id'";                  my $message = $self->fetch_message($id) || return;
254    
255                  $row->{'id'} = $id;                  $row->{'id'} = $id;
256                  @{$row->{'from'}} = $self->unroll($message,'from','phrase');                  @{$row->{'from'}} = $self->unroll($message,'from','phrase');
257                  @{$row->{'to'}} = $self->unroll($message,'to','phrase');                  @{$row->{'to'}} = $self->unroll($message,'to','phrase');
258                  @{$row->{'cc'}} = $self->unroll($message,'cc','phrase');                  @{$row->{'cc'}} = $self->unroll($message,'cc','phrase');
259                  $row->{'subject'} = $message->subject;                  $row->{'subject'} = $self->decode_qp($message->subject);
260                  $row->{'body'} = $self->plain_text_body($message);                  $row->{'body'} = $self->plain_text_body($message);
261                  $row->{'date'} = $message->date;                  $row->{'date'} = $message->date;
262    

Legend:
Removed from v.14  
changed lines
  Added in v.17

  ViewVC Help
Powered by ViewVC 1.1.26