--- lib/Grep/Action/Fetch.pm 2007/02/21 03:04:48 47 +++ lib/Grep/Action/Fetch.pm 2007/02/22 18:12:35 71 @@ -90,8 +90,6 @@ Jifty->log->info( $message ); - my $items = Grep::Model::ItemCollection->new(); - my $ua = LWP::UserAgent->new; $ua->default_header( 'Cookie' => $feed->cookie ); my $r = $ua->get( $uri ); @@ -103,12 +101,54 @@ return $self->result->error( "No content returned from $uri" ) unless length( $content ) > 1; + my ( $items, $new ) = $self->collection_from_feed( $feed, $content ); + + if ( my $count = $items->count ) { + + # construct a proper sentence :-) + my $message = $count + . ( $new == $count ? ' new' : '' ) + . ( $new == 0 ? ' old' : '' ) + . ' results ' + . ( $new && $new < $count ? "of which $new new " : '' ) + . "for '$q' in " . $feed->title; + + $self->result->message( $message ); + + $self->result->content( items => $items ); + $self->result->content( count => $items->count ); + + Grep::Search->finish if $new; + + return $items; + + } else { + return $self->result->error( "No results for '$q' in " . $feed->title ); + } +} + + +=head2 collection_from_feed + + my ( $collection, $new ) = $self->collection_from_feed( $feed, 'souce of feed'); + +=cut + +sub collection_from_feed { + my $self = shift; + + my ( $feed, $content ) = @_; + + die "feed is not a Grep::Model::Feed but ", ref $feed unless $feed->isa('Grep::Model::Feed'); my $xml_feed = XML::Feed->parse( \$content ) - or return $self->result->error( $feed->title, " returned ", XML::Feed->errstr, " for $uri" ); + or return $self->result->error( $feed->title, " returned ", XML::Feed->errstr ); + warn "getting entries from ", $xml_feed->title, "\n"; + my $items = Grep::Model::ItemCollection->new(); + my $new; for my $entry ($xml_feed->entries) { @@ -140,31 +180,9 @@ } else { warn "can't add entry ", dump( $entry ), "\n"; } - - } - - if ( my $count = $items->count ) { - - # construct a proper sentence :-) - my $message = $count - . ( $new == $count ? ' new' : '' ) - . ( $new == 0 ? ' old' : '' ) - . ' results ' - . ( $new && $new < $count ? "of which $new new " : '' ) - . "for '$q' in " . $feed->title; - - $self->result->message( $message ); - - $self->result->content( items => $items ); - $self->result->content( count => $items->count ); - - Grep::Search->finish if $new; - - } else { - return $self->result->error( "No results for '$q' in " . $feed->title ); } - return $items; + return ($items, $new); } 1;