--- trunk/MWS.pm 2004/05/06 16:53:40 13 +++ trunk/MWS.pm 2004/05/06 19:46:58 14 @@ -9,6 +9,8 @@ use Mail::Box::Manager; use Config::IniFiles; use POSIX qw(strftime); +use Text::Autoformat; + #use MWS_plucene; use MWS_swish; @@ -22,7 +24,6 @@ our $VERSION = '1.00'; - my $folder; # placeholder for folders my $debug = 2; @@ -44,25 +45,46 @@ # placeholder for opened folders $self->{folder} = {}; + $self->{wrap_margin} = $self->{config}->val('global', 'wrap_margin'); + return $self; } +sub mbox_name2path { + my $self = shift; + + my $mbox = shift || croak "folder_name2path needs mbox name"; + + return $self->{config}->val('folders', $mbox) || croak "comeone removed folder $mbox from config?"; +} + sub open_folder { my $self = shift; my $mbox = shift || croak "open_folder needs mbox name"; if (! $self->{folder}->{$mbox}) { - my $mbox_path = $self->{config}->val('folders', $mbox) || croak "comeone removed folder $mbox from config?"; + my $mbox_path = $self->mbox_name2path($mbox); + print STDERR "about to open_folder($mbox)\n" if ($debug == 2); + $self->{folder}->{$mbox} = $self->{mgr}->open($mbox_path) || croak "can't open folder $mbox at '$mbox_path': $!"; - print STDERR "open_folder($mbox)\n" if ($debug); + + print STDERR "open_folder($mbox) ok\n" if ($debug); } return $self->{folder}->{$mbox}; } +sub close_folder { + my $self = shift; + + my $mbox = shift || croak "open_folder needs mbox name"; + + return $self->{folder}->{$mbox}->close(write => 'NEVER'); +} + sub fetch_message { my $self = shift; @@ -105,10 +127,13 @@ foreach my $from ($message->$part) { my $tmp = $from->$sub; - $tmp =~ s/^\s*["'](.*)["']\s*$/$1/; - push @arr, $tmp; + if ($tmp) { + $tmp =~ s/^\s*["'](.*)["']\s*$/$1/; + push @arr, $tmp; + } } - return \@arr; + + return @arr; } sub fetch_all_results { @@ -116,7 +141,7 @@ croak "results called before search!" if (! $self->{'index_ids'}); - print STDERR "fetch_all_results_results\n" if ($debug == 2); + print STDERR "fetch_all_results [",scalar @{$self->{'index_ids'}},"]\n" if ($debug == 2); my @arr; @@ -137,6 +162,8 @@ my $curr = $self->{'curr_result'}++; my $id = $self->{'index_ids'}->[$curr]; + + print STDERR "fetch_result: $curr = $id\n" if ($debug == 2); return $self->fetch_result_by_id($id); } @@ -145,15 +172,27 @@ my $self = shift; my $message = shift || croak "plain_text_body needs message!"; + my $body; + if (! $message->isMultipart) { - return $message->decoded->string; + $body = $message->decoded->string; } else { foreach my $part ($message->parts) { if ($part->body->mimeType eq 'text/plain') { - return $part->decoded->string; + $body = $part->decoded->string; + last; } } } + + # reformat with Text::Autoformat + my $wrap = $self->{wrap_margin}; + if ($wrap && $body && $body =~ m/^.{$wrap}..*$/m) { + $body = autoformat $body; + $body .="\n[reformated using autoformat, margin at $wrap]" if ($debug == 2); + } + + return $body; } @@ -171,9 +210,9 @@ my $message = $self->fetch_message($id) || print STDERR "can't fetch message '$id'"; $row->{'id'} = $id; - $row->{'from'} = $self->unroll($message,'from','phrase'); - $row->{'to'} = $self->unroll($message,'to','phrase'); - $row->{'cc'} = $self->unroll($message,'cc','phrase'); + @{$row->{'from'}} = $self->unroll($message,'from','phrase'); + @{$row->{'to'}} = $self->unroll($message,'to','phrase'); + @{$row->{'cc'}} = $self->unroll($message,'cc','phrase'); $row->{'subject'} = $message->subject; $row->{'body'} = $self->plain_text_body($message); $row->{'date'} = $message->date;