/[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 19 by dpavlin, Fri May 7 20:52:34 2004 UTC revision 26 by dpavlin, Sat May 8 16:24:46 2004 UTC
# Line 12  use POSIX qw(strftime); Line 12  use POSIX qw(strftime);
12  use Text::Autoformat;  use Text::Autoformat;
13  use Text::Iconv;  use Text::Iconv;
14  use Text::Unaccent;  use Text::Unaccent;
15    use Date::Parse;
16    use POSIX qw(strftime);
17    use MIME::Base64;
18    
19  #use MWS_plucene;  #use MWS_plucene;
20  use MWS_swish;  use MWS_swish;
# Line 63  sub normalize_string { Line 66  sub normalize_string {
66          $v = join('',sort split(/\s+/,$v));          $v = join('',sort split(/\s+/,$v));
67          $v =~ s/\W+//g;          $v =~ s/\W+//g;
68    
69          return $v;          return lc($v);
70  }  }
71    
72  # reset tables for search results  # reset tables for search results
# Line 88  sub add_counter($$) { Line 91  sub add_counter($$) {
91          return $self->{counter}->{$c}->{$k}->{usage}++;          return $self->{counter}->{$c}->{$k}->{usage}++;
92  }  }
93    
94    sub yyyymmdd {
95            my $self = shift;
96    
97            my $t = shift || time;
98    
99            my (undef,undef,undef,$dd,$mm,$yyyy) = localtime($t);
100            $mm++;
101            $yyyy+=1900;
102            return ($yyyy,$mm,$dd);
103    }
104    
105    sub fmtdate {
106            my $self = shift;
107    
108            my @out;
109            my @formats = qw(%04d %02d %02d);
110            while (my $v = shift) {
111                    my $f = shift @formats;
112                    push @out, sprintf($f, $v);
113            }
114    
115    print STDERR "fmtdate: ",join('|',@out),"\n";
116    
117            return (wantarray ? @out : join("-",@out));
118    }
119    
120    sub add_counter_calendar($) {
121            my $self = shift;
122    
123            my $t = shift || croak "add_counter_calendar without argument!";
124            
125            my ($yyyy,$mm,$dd) = $self->fmtdate($self->yyyymmdd($t));
126    
127            return $self->{counter}->{calendar}->{"$yyyy-$mm"}->{$dd}++;
128    }
129    
130    
131  sub counter {  sub counter {
132          my $self = shift;          my $self = shift;
133    
# Line 166  sub fetch_message { Line 206  sub fetch_message {
206  sub search {  sub search {
207          my $self = shift;          my $self = shift;
208    
209          my $s = shift || carp "search called without argument!";          carp "search called without argument!" if (! @_);
210    
211          $self->reset_counters;          $self->reset_counters;
212    
213          print STDERR "search_index($s)\n" if ($debug == 2);          print STDERR "search(",join(" ",@_),")\n" if ($debug == 2);
214          my @index_ids = $self->search_index($s);          my @index_ids = $self->search_index(@_);
215    
216          $self->{'index_ids'} = \@index_ids;          $self->{'index_ids'} = \@index_ids;
217    
# Line 182  sub search { Line 222  sub search {
222    
223          $self->{'curr_result'} = 0;          $self->{'curr_result'} = 0;
224    
225            $self->reset_counters;
226    
227          print STDERR "$results results\n" if ($debug == 2);          print STDERR "$results results\n" if ($debug == 2);
228    
229          return $results || 'error';          return $results || 'error';
# Line 192  sub decode_qp($) { Line 234  sub decode_qp($) {
234    
235          my $tmp = shift || return;          my $tmp = shift || return;
236    
237          sub decode($$) {          sub decode($$$) {
238                  my ($cp,$qp) = @_;                  my ($cp,$enc,$qp) = @_;
239    
240                    print STDERR "decode($cp,$qp) -> " if ($debug == 2);
241    
242                    if (uc($enc) eq "Q") {
243                            $qp =~ s/=([a-f0-9][a-f0-9])/chr(hex($1))/ieg;
244                            $qp =~ s/_/ /g;
245                    } elsif (uc($enc) eq "B") {
246                            $qp = decode_base64($qp);
247                    } else {
248                            croak "unsupported encoding '$enc' in decode_qp\n";
249                            return $qp;
250                    }
251    
252                    print STDERR "$qp\n" if ($debug == 2);
253    
254                  my $iconv = Text::Iconv->new($cp,'ISO-8859-2');                  my $iconv = Text::Iconv->new($cp,'ISO-8859-2');
255          print STDERR "decode($cp,$qp) -> " if ($debug == 2);                  return $iconv->convert($qp) || '';
                 $qp =~ s/=([a-f0-9][a-f0-9])/chr(hex($1))/ieg;  
                 $qp =~ s/_/ /g;  
         print STDERR "$qp\n" if ($debug == 2);  
                 return $iconv->convert($qp) || $qp;  
256          }          }
257    
258          $tmp =~ s/=\?([^\?]+)\?Q\?(.+?)\?=/decode($1,$2)/ex;          $tmp =~ s/=\?([^\?]+)\?([QB])\?(.+?)\?=/decode($1,$2,$3)/ige;
259          $tmp =~ s/^\s*["']+(.*?)["']+\s*$/$1/g;          $tmp =~ s/^\s*["']+(.*?)["']+\s*$/$1/g;
260            #print STDERR "$tmp\n" if ($debug == 2);
261          return $tmp;          return $tmp;
262  }  }
263    
# Line 276  sub plain_text_body { Line 330  sub plain_text_body {
330                  }                  }
331          }          }
332    
333            if (! $body) {
334                    $body = "[plain/text body not found]" if ($debug == 2);
335                    print STDERR "plain/text body not found\n" if ($debug);
336                    return;
337            }
338    
339          # reformat with Text::Autoformat          # reformat with Text::Autoformat
340          my $wrap = $self->{wrap_margin};          my $wrap = $self->{wrap_margin};
341          if ($wrap && $body && $body =~ m/^.{$wrap}..*$/m) {          if ($wrap && $body && $body =~ m/^.{$wrap}..*$/m) {
342                  $body =~ s/[\r\n]/\n/gs;                  $body = autoformat($body, {right=>$wrap, all=>1});
                 $body = autoformat($body, {right=>$wrap});  
343                  $body .="\n[reformated using autoformat, margin at $wrap]" if ($debug == 2);                  $body .="\n[reformated using autoformat, margin at $wrap]" if ($debug == 2);
344          }          }
345    
# Line 304  sub fetch_result_by_id { Line 363  sub fetch_result_by_id {
363                  $row->{'id'} = $id;                  $row->{'id'} = $id;
364    
365                  foreach my $p (qw(from to cc bcc)) {                  foreach my $p (qw(from to cc bcc)) {
366                          foreach my $v ($self->unroll($message,'from','phrase')) {                          foreach my $v ($self->unroll($message,$p,'phrase')) {
367                                  push @{$row->{$p}},$v;                                  push @{$row->{$p}},$v;
368                                  $self->add_counter($p,$v);                                  $self->add_counter($p,$v);
369                          }                          }
370                  }                  }
371                  $row->{'subject'} = $self->decode_qp($message->subject);                  $row->{'subject'} = $self->decode_qp($message->subject);
372                  $row->{'body'} = $self->plain_text_body($message);                  $row->{'body'} = $self->plain_text_body($message);
373                  $row->{'date'} = $message->date;                  my $utime = str2time($message->date);
374    
375                    $row->{'date_utime'} = $utime;
376    
377                    $row->{'date'} = strftime("%Y-%m-%d %H:%M:%S", localtime($utime));
378                    $self->add_counter_calendar($utime);
379    
380                  # XXX store in cache?                  # XXX store in cache?
381                  $self->{cache}->{$id} = $row;                  $self->{cache}->{$id} = $row;
382                  print STDERR "$id stored in cache\n" if ($debug == 2);                  print STDERR "$id stored in cache\n" if ($debug == 2);
383          } else {          } else {
384                  print STDERR "fetch_result_by_id($id) in cache\n" if ($debug == 2);                  print STDERR "fetch_result_by_id($id) in cache\n" if ($debug == 2);
385                    foreach my $p (qw(from to cc bcc)) {
386                            foreach my $v (@{$row->{$p}}) {
387                                    $self->add_counter($p,$v);
388                            }
389                    }
390    
391                    $self->add_counter_calendar($row->{date_utime});
392          }          }
393    
394          return $row;          return $row;

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

  ViewVC Help
Powered by ViewVC 1.1.26