Changeset 1545

Show
Ignore:
Timestamp:
08/20/06 22:53:44
Author:
ko
Message:

Implement searcher to Search::Rast

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger/Plugin/Search/Rast.pm

    r131 r1545  
    33use base qw( Plagger::Plugin ); 
    44 
    5 use Encode
     5use Encode ()
    66use POSIX; 
    77use Rast; 
     
    1111    $context->register_hook( 
    1212        $self, 
    13         'publish.feed' => \&feed, 
     13        'publish.feed'     => \&feed, 
    1414        'publish.finalize' => \&finalize, 
     15        'searcher.search'  => \&search, 
    1516    ); 
    1617} 
     
    9596                        $feed->link,  
    9697                        $entry->permalink,  
    97                         $self->convert($entry->title) || '',  
    98                         $self->convert($entry->author) || '',  
     98                        $self->encode($entry->title) || '',  
     99                        $self->encode($entry->author) || '',  
    99100                        POSIX::strftime('%Y-%m-%dT%H:%M:%S', localtime($time)), 
    100                         $self->convert(join(' ', @{ $entry->tags })) 
     101                        $self->encode(join(' ', @{ $entry->tags })) 
    101102                        ]; 
    102103 
    103         my $text = $self->convert($entry->text); 
     104        my $text = $self->encode($entry->text); 
    104105        unless ($result->hit_count) { 
    105106            my $id = $rast->register($text, $options); 
     
    113114} 
    114115 
    115 sub convert
     116sub encode
    116117    my ($self, $str) = @_; 
    117118    utf8::decode($str) unless utf8::is_utf8($str); 
    118     return encode($self->{encode}, $str); 
     119    return Encode::encode($self->{encode}, $str); 
     120
     121 
     122sub decode { 
     123    my ($self, $str) = @_; 
     124    return Encode::decode($self->{encode}, $str); 
    119125} 
    120126 
     
    123129    return unless $self->{rast}; 
    124130    $self->{rast}->close; 
     131} 
     132 
     133sub search { 
     134    my($self, $context, $args) = @_; 
     135 
     136    my $result = $self->{rast}->search($self->encode($args->{query}), { 
     137        need_summary => 1, 
     138        properties => [qw/feedlink permalink title author/], 
     139    }); 
     140 
     141    my $feed = Plagger::Feed->new; 
     142    $feed->type('search:Rast'); 
     143    $feed->title("Search: $args->{query}"); 
     144 
     145    while (my $row = $result->fetch) { 
     146        my $entry = Plagger::Entry->new; 
     147 
     148        $entry->link($row->{properties}->[0]); 
     149        $entry->permalink($row->{properties}->[1]); 
     150        $entry->title($self->decode($row->{properties}->[2]));  
     151        $entry->author($self->decode($row->{properties}->[3])) ; 
     152        $entry->body($self->decode($row->{summary})); 
     153        $feed->add_entry($entry); 
     154    } 
     155 
     156    return $feed; 
    125157} 
    126158