--- trunk/MWS.pm 2004/05/06 12:40:11 12 +++ trunk/MWS.pm 2004/05/06 16:53:40 13 @@ -8,6 +8,7 @@ use Mail::Box::Manager; use Config::IniFiles; +use POSIX qw(strftime); #use MWS_plucene; use MWS_swish; @@ -24,7 +25,7 @@ my $folder; # placeholder for folders -my $debug = 1; +my $debug = 2; sub new { my $class = shift; @@ -53,8 +54,9 @@ if (! $self->{folder}->{$mbox}) { my $mbox_path = $self->{config}->val('folders', $mbox) || croak "comeone removed folder $mbox from config?"; + 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($mbox)\n" if ($debug); + print STDERR "open_folder($mbox)\n" if ($debug); } return $self->{folder}->{$mbox}; @@ -68,6 +70,7 @@ my ($mbox,$id) = split(/ /,$mbox_id); # return message with ID + print STDERR "fetch $id from $mbox\n" if ($debug); return $self->open_folder($mbox)->find($id) || print STDERR "can't find message $id in $mbox. Time to re-index?\n"; } @@ -78,6 +81,7 @@ my $s = shift || carp "search called without argument!"; + print STDERR "search_index($s)\n" if ($debug == 2); my @index_ids = $self->search_index($s); $self->{'index_ids'} = \@index_ids; @@ -87,10 +91,14 @@ $self->{'curr_result'} = 0; + print STDERR "$results results\n" if ($debug == 2); + return $results || 'error'; } sub unroll($$$) { + my $self = shift; + my ($message,$part,$sub) = @_; my @arr; @@ -108,6 +116,8 @@ croak "results called before search!" if (! $self->{'index_ids'}); + print STDERR "fetch_all_results_results\n" if ($debug == 2); + my @arr; foreach my $id (@{$self->{'index_ids'}}) { @@ -152,14 +162,28 @@ my $id = shift || return; - my $message = $self->fetch_message($id); + my $row = $self->{cache}->{$id}; + + if (! $row) { - my $row; + print STDERR "fetch_result_by_id($id) not in cache, hitting disk\n" if ($debug == 2); - $row->{'id'} = $id; - $row->{'from'} = unroll($message,'from','phrase'); - $row->{'subject'} = $message->subject; - $row->{'body'} = $self->plain_text_body($message); + 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->{'subject'} = $message->subject; + $row->{'body'} = $self->plain_text_body($message); + $row->{'date'} = $message->date; + + # XXX store in cache? + $self->{cache}->{$id} = $row; + print STDERR "$id stored in cache\n" if ($debug == 2); + } else { + print STDERR "fetch_result_by_id($id) in cache\n" if ($debug == 2); + } return $row;