/[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 3 by dpavlin, Tue May 4 14:00:03 2004 UTC revision 7 by dpavlin, Wed May 5 15:38:35 2004 UTC
# Line 8  use Carp; Line 8  use Carp;
8    
9  use Plucene::Simple;  use Plucene::Simple;
10  use Mail::Box::Manager;  use Mail::Box::Manager;
11    use Config::IniFiles;
12    
13  require Exporter;  require Exporter;
14    
# Line 29  sub new { Line 30  sub new {
30          my $self = {};          my $self = {};
31          bless($self, $class);          bless($self, $class);
32    
33          my $index_file = shift || die "need index file";          my $config_file = shift || die "need index file";
34    
35          $self->{index} = Plucene::Simple->open($index_file) || die "can't open index '$index_file': $!";          $self->{config} = new Config::IniFiles( -file => $config_file );
36    
37            my $index_file = $self->{config}->val('global', 'index') || croak "can't find [index] section in config file with path of index";
38    
39            $self->{index} = Plucene::Simple->open($index_file) || croak "can't open index '$index_file': $!";
40    
41          $self->{mgr} = Mail::Box::Manager->new;          $self->{mgr} = Mail::Box::Manager->new;
42    
# Line 41  sub new { Line 46  sub new {
46          return $self;          return $self;
47  }  }
48    
49    sub open_folder {
 sub fetch_message {  
50          my $self = shift;          my $self = shift;
51    
52          my $mbox_id = shift || die "need mbox_id!";          my $mbox = shift || croak "open_folder needs mbox name";
         my ($mbox,$id) = split(/ /,$mbox_id);  
53    
54          if (! $self->{folder}->{$mbox}) {          if (! $self->{folder}->{$mbox}) {
55                  $self->{folder}->{$mbox} = $self->{mgr}->open($mbox);                  my $mbox_path = $self->{config}->val('folders', $mbox) || croak "comeone removed folder $mbox from config?";
56                    $self->{folder}->{$mbox} = $self->{mgr}->open($mbox_path) || croak "can't open folder $mbox at '$mbox_path': $!";
57                  print STDERR "## open($mbox)\n" if ($debug);                  print STDERR "## open($mbox)\n" if ($debug);
58          }          }
59    
60          my $message = $self->{folder}->{$mbox}->find($id) ||          return $self->{folder}->{$mbox};
61    
62    }
63    
64    sub fetch_message {
65            my $self = shift;
66    
67            my $mbox_id = shift || die "need mbox_id!";
68            my ($mbox,$id) = split(/ /,$mbox_id);
69    
70            # return message with ID
71            return $self->open_folder($mbox)->find($id) ||
72                  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";
           
         return $message;  
73  }  }
74    
75    
# Line 83  sub unroll($$$) { Line 96  sub unroll($$$) {
96          my @arr;          my @arr;
97    
98          foreach my $from ($message->$part) {          foreach my $from ($message->$part) {
99                  push @arr, $from->$sub;                  my $tmp = $from->$sub;
100                    $tmp =~ s/^\s*["'](.*)["']\s*$/$1/;
101                    push @arr, $tmp;
102          }          }
103          return \@arr;          return \@arr;
104  }  }
105            
106    sub fetch_all_results {
107            my $self = shift;
108    
109            croak "results called before search!" if (! $self->{'index_ids'});
110    
111            my @arr;
112    
113            foreach my $id (@{$self->{'index_ids'}}) {
114                    push @arr, $self->fetch_result_by_id($id);
115            }
116    
117            return @arr;
118    }
119    
120  sub fetch_result {  sub fetch_result {
121          my $self = shift;          my $self = shift;
122    
# Line 99  sub fetch_result { Line 128  sub fetch_result {
128    
129          my $id = $self->{'index_ids'}->[$curr];          my $id = $self->{'index_ids'}->[$curr];
130    
131          return if (! $id);          return $self->fetch_result_by_id($id);
132    }
         my $message = $self->fetch_message($id);  
133    
134          my $row;  sub plain_text_body {
135            my $self = shift;
136            my $message = shift || croak "plain_text_body needs message!";
137    
         $row->{'from'} = unroll($message,'from','phrase');  
         $row->{'subject'} = $message->get('Subject');  
138          if (! $message->isMultipart) {          if (! $message->isMultipart) {
139                  $row->{'body'} = $message->decoded->string;                  return $message->decoded->string;
140          } else {          } else {
141                  foreach my $part ($message->parts) {                  foreach my $part ($message->parts) {
142                          if ($part->body->mimeType eq 'text/plain') {                          if ($part->body->mimeType eq 'text/plain') {
143                                  $row->{'body'} = $part->decoded->string;                                  return $part->decoded->string;
                                 last;  
144                          }                          }
145                  }                  }
146          }          }
147    }
148    
149    
150    sub fetch_result_by_id {
151            my $self = shift;
152    
153            my $id = shift || return;
154    
155            my $message = $self->fetch_message($id);
156    
157            my $row;
158    
159            $row->{'id'} = $id;
160            $row->{'from'} = unroll($message,'from','phrase');
161            $row->{'subject'} = $message->subject;
162            $row->{'body'} = $self->plain_text_body($message);
163    
164          return $row;          return $row;
165                    

Legend:
Removed from v.3  
changed lines
  Added in v.7

  ViewVC Help
Powered by ViewVC 1.1.26