--- lib/Grep/Action/Fetch.pm 2007/02/19 20:07:48 30 +++ lib/Grep/Action/Fetch.pm 2007/02/19 20:40:55 31 @@ -87,22 +87,38 @@ Jifty->log->info("Fetching ", $feed->title, " at $uri"); } + my $items = Grep::Model::ItemCollection->new(); + + sub abort { + my $message = join(" ", @_); + if ( $publish ) { + Grep::Event::Result->new({ + q => $q, coll => $items, + message => $message, class => 'error', + })->publish; + return 0; + } else { + $self->result->error( $message ); + return 0; + } + } my $ua = LWP::UserAgent->new; $ua->default_header( 'Cookie' => $feed->cookie ); my $r = $ua->get( $uri ); - die $feed->title . " returned " . $r->status_line . " for $uri\n" unless ( $r->is_success ); + return abort( + $feed->title . " returned " . $r->status_line . " for $uri\n" + ) unless ( $r->is_success ); my $content = $r->content; - die "No content returned from $uri" unless length( $content ) > 1; + return abort( "No content returned from $uri" ) unless length( $content ) > 1; + my $xml_feed = XML::Feed->parse( \$content ) - or die $feed->title, " returned ", XML::Feed->errstr, " for $uri\n"; + or return abort( $feed->title, " returned ", XML::Feed->errstr, " for $uri" ); warn "getting entries from ", $xml_feed->title, "\n"; - my $items = Grep::Model::ItemCollection->new(); - for my $entry ($xml_feed->entries) { my $i = Grep::Model::Item->new(); @@ -130,12 +146,15 @@ if ( $items ) { - $self->result->message( $q . ' => ' . $xml_feed->entries . ' results' ); + my $message = $q . ' => ' . $xml_feed->entries . ' results'; + + $self->result->message( $message ); if ( $publish ) { Grep::Event::Result->new({ q => $q, coll => $items, item_fragment => $self->argument_value('item_fragment'), + message => $message, class => 'messages', })->publish; Jifty->log->debug( $items->count, " for '$q' published" ); } else { @@ -144,9 +163,7 @@ } } else { - - $self->result->error( 'No results found' ); - + return abort( 'No results found' ); } return $items;