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

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

revision 12 by dpavlin, Thu May 6 12:40:11 2004 UTC revision 20 by dpavlin, Fri May 7 23:35:39 2004 UTC
# Line 8  use strict; Line 8  use strict;
8  #  #
9    
10  use SWISH::API;  use SWISH::API;
11    use Text::Iconv;
12    use Data::Dumper;
13    
14    my $iso2utf = Text::Iconv->new('ISO-8859-2','UTF-8');
15    my $utf2iso = Text::Iconv->new('UTF-8','ISO-8859-2');
16    
17  sub open_index {  sub open_index {
18          my $self = shift;          my $self = shift;
# Line 41  sub search_index { Line 46  sub search_index {
46          }          }
47    
48          print STDERR "swish search: $s\n";          print STDERR "swish search: $s\n";
49    
50            # convert to UTF-8
51            $s = $iso2utf->convert($s) || $s;
52          my $results = $index->Query($s);          my $results = $index->Query($s);
53    
54          my @r;          # store total number of hits
55            $self->{'total_hits'} = $results->Hits;
56    
57            my @res_ids;
58    
59            my $count = 1;
60    
61            while ( my $r = $results->NextResult ) {
62    
63                    sub p($$) {
64                            my ($r,$prop) = @_;
65                            $prop = $r->Property($prop);
66                            $prop =~ s/##lf##/\n/gs;
67                            return $utf2iso->convert($prop);
68                    }
69    
70                    my $id = p($r,"swishdocpath");
71                    push @res_ids, $id;
72    
73                    foreach my $p (qw(from to cc bcc)) {
74                            @{$self->{cache}->{$id}->{$p}} = ();
75                            foreach my $v (split(/##/, p($r,$p.'_phrase'))) {
76                                    push @{$self->{cache}->{$id}->{$p}}, $v;
77                                    $self->add_counter($p,$v);
78                            }
79                    }
80    
81                    foreach my $p (qw(subject body date)) {
82                            $self->{cache}->{$id}->{$p} = p($r,$p);
83                    }
84    
85          while ( my $result = $results->NextResult ) {                  $self->add_counter_calendar(p($r,'date_utime'));
86                  push @r, $result->Property( "swishdocpath" );  
87                    # this is redundant, but needed for templates later...
88                    $self->{cache}->{$id}->{'id'} = $id;
89    
90                    last if (++$count > $self->{max_results});
91          }          }
92    
93          return @r;          return @res_ids;
94  }  }
95    
96  sub add_index {  sub add_index {
97          my $self = shift;          my $self = shift;
98            
99          croak("add_index is not implemented for swish!");          my $mbox_id = shift || croak "add_index needs mbox_id";
100            my $document = shift || croak "add_index needs document";
101    
102            my ($mbox,$id) = split(/\s/,$mbox_id,2);
103    
104            my $xml = qq{<message>};
105            foreach my $tag (keys %$document) {
106                    my $data = $document->{$tag};
107                    next if (! $data || $data eq '');
108                    # save [cr/]lf before conversion to XML
109                    $data =~ s/\n\r/##lf##/gs;
110                    $data =~ s/\n/##lf##/gs;
111                    $xml .= "<$tag><![CDATA[".$data."]]></$tag>\n";
112            }
113            $xml .= qq{</message>};
114    
115            $xml = $iso2utf->convert($xml);
116            use bytes;      # as opposed to chars
117            print "Path-Name: $mbox $id\n";
118            print "Content-Length: ".(length($xml)+1)."\n";
119            print "Document-Type: XML\n\n$xml\n";
120    
121  }  }
122    
123  sub close_index {  sub close_index {

Legend:
Removed from v.12  
changed lines
  Added in v.20

  ViewVC Help
Powered by ViewVC 1.1.26