Changeset 20
- Timestamp:
- 02/05/06 10:48:56
- Files:
-
- trunk/plagger/lib/Plagger.pm (modified) (1 diff)
- trunk/plagger/lib/Plagger/Feed.pm (modified) (2 diffs)
- trunk/plagger/lib/Plagger/Plugin/Aggregator/Simple.pm (modified) (2 diffs)
- trunk/plagger/lib/Plagger/Plugin/Subscription/Bloglines.pm (modified) (2 diffs)
- trunk/plagger/lib/Plagger/Subscription.pm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/plagger/lib/Plagger.pm
r18 r20 100 100 101 101 $self->run_hook('subscription.load'); 102 $self->run_hook('aggregator.aggregate'); 102 103 for my $type ($self->subscription->types) { 104 for my $feed ($self->subscription->feeds_by_type($type)) { 105 $self->run_hook("aggregator.aggregate.$type", $feed); 106 } 107 } 103 108 104 109 for my $feed ($self->update->feeds) { trunk/plagger/lib/Plagger/Feed.pm
r18 r20 3 3 4 4 use base qw( Class::Accessor::Fast ); 5 __PACKAGE__->mk_accessors(qw( link url image description language author updated tags stash ));5 __PACKAGE__->mk_accessors(qw( link url image description language author updated tags stash type )); 6 6 7 7 sub new { … … 11 11 tags => [], 12 12 entries => [], 13 type => 'feed', 13 14 }, $class; 14 15 } trunk/plagger/lib/Plagger/Plugin/Aggregator/Simple.pm
r17 r20 1 1 package Plagger::Plugin::Aggregator::Simple; 2 2 use strict; 3 use base qw( Plagger::Plugin );3 use base qw( Plagger::Plugin ); 4 4 5 5 use URI; … … 13 13 $context->register_hook( 14 14 $self, 15 'aggregator.aggregate '=> \&aggregate,15 'aggregator.aggregate.feed' => \&aggregate, 16 16 ); 17 17 } 18 18 19 19 sub aggregate { 20 my($self, $context ) = @_;20 my($self, $context, $sub) = @_; 21 21 22 for my $sub ($context->subscription->feeds) { 23 my $url = $sub->url; 24 $context->log(info => "Fetch $url"); 25 my $remote = eval { XML::Feed->parse(URI->new($url)) }; 22 my $url = $sub->url; 23 $context->log(info => "Fetch $url"); 24 my $remote = eval { XML::Feed->parse(URI->new($url)) }; 26 25 27 unless ($remote) {28 $context->log(info => "Parsing $url failed. " . XML::Feed->errstr);29 next;30 }26 unless ($remote) { 27 $context->log(info => "Parsing $url failed. " . XML::Feed->errstr); 28 next; 29 } 31 30 32 my $feed = Plagger::Feed->new;33 $feed->title($remote->title);34 $feed->url($sub->url);35 $feed->link($remote->link);36 $feed->description($remote->tagline);37 $feed->language($remote->language);38 $feed->author($remote->author);39 $feed->updated($remote->modified);31 my $feed = Plagger::Feed->new; 32 $feed->title($remote->title); 33 $feed->url($sub->url); 34 $feed->link($remote->link); 35 $feed->description($remote->tagline); 36 $feed->language($remote->language); 37 $feed->author($remote->author); 38 $feed->updated($remote->modified); 40 39 41 for my $e ($remote->entries) {42 my $entry = Plagger::Entry->new;43 $entry->title($e->title);44 $entry->author($e->author);45 $entry->tags([ $e->category ]) if $e->category;46 $entry->date( Plagger::Date->rebless($e->issued) )47 if eval { $e->issued };48 $entry->link($e->link);49 $entry->id($e->id);50 $entry->body($e->content->body);40 for my $e ($remote->entries) { 41 my $entry = Plagger::Entry->new; 42 $entry->title($e->title); 43 $entry->author($e->author); 44 $entry->tags([ $e->category ]) if $e->category; 45 $entry->date( Plagger::Date->rebless($e->issued) ) 46 if eval { $e->issued }; 47 $entry->link($e->link); 48 $entry->id($e->id); 49 $entry->body($e->content->body); 51 50 52 $feed->add_entry($entry);53 }51 $feed->add_entry($entry); 52 } 54 53 55 $context->log(info => "Aggregate $url success: " . $feed->count . " entries."); 56 $context->update->add($feed); 57 } 54 $context->log(info => "Aggregate $url success: " . $feed->count . " entries."); 55 $context->update->add($feed); 58 56 } 59 57 trunk/plagger/lib/Plagger/Plugin/Subscription/Bloglines.pm
r7 r20 14 14 $context->register_hook( 15 15 $self, 16 'subscription.load' => \&getsubs,16 'subscription.load' => \&getsubs, 17 17 ); 18 18 } else { 19 19 $context->register_hook( 20 20 $self, 21 'subscription.load' => \¬ifier,22 'aggregator.aggregate ' => \&sync,21 'subscription.load' => \¬ifier, 22 'aggregator.aggregate.bloglines' => \&sync, 23 23 ); 24 24 } … … 63 63 my $count = $self->{bloglines}->notify(); 64 64 $context->log(debug => "You have $count unread item(s) on Bloglines."); 65 $self->{bloglines_new} = $count; 65 if ($count) { 66 my $feed = Plagger::Feed->new; 67 $feed->type('bloglines'); 68 $context->subscription->add($feed); 69 } 66 70 } 67 71 68 72 sub sync { 69 my($self, $context) = @_; 70 71 return unless $self->{bloglines_new}; 73 my($self, $context, $sub) = @_; 72 74 73 75 my @updates = $self->{bloglines}->getitems(0, $self->conf->{mark_read}); trunk/plagger/lib/Plagger/Subscription.pm
r7 r20 3 3 use base qw( Plagger::Update ); 4 4 5 sub new { 6 my $class = shift; 7 bless { feeds => [], by_tags => {}, by_types => {} }, $class; 8 } 9 10 sub add { 11 my($self, $feed) = @_; 12 push @{ $self->{feeds} }, $feed; 13 for my $tag ( @{$feed->tags} ) { 14 push @{ $self->{by_tags}->{$tag} }, $feed; 15 } 16 push @{ $self->{by_types}->{$feed->type} }, $feed; 17 } 18 19 sub types { 20 my $self = shift; 21 keys %{ $self->{by_types} }; 22 } 23 24 sub feeds_by_type { 25 my($self, $type) = @_; 26 @{ $self->{by_types}->{$type} || [] }; 27 } 28 5 29 1;
