Index: lib/Plagger.pm =================================================================== --- lib/Plagger.pm (revision 1912) +++ lib/Plagger.pm (working copy) @@ -60,6 +60,7 @@ $self->load_cache($opt{config}); $self->load_plugins(@{ $config->{plugins} || [] }); $self->rewrite_config if @{ $self->{rewrite_tasks} }; + $self->change_update_phase; $self; } @@ -201,6 +202,47 @@ } } +sub change_update_phase { + my $self = shift; + my @hooks = qw(update.feed.fixup update.entry.fixup update.fixup); + + my $eftxango = "Plagger::Plugin::Filter::EFTXango"; + my $flag = 0; + for my $action (@{ $self->{hooks}->{"update.fixup"}}) { + if (ref($action->{plugin}) eq $eftxango) { + $flag++; + last; + } + } + return unless $flag; + + my @prefixes = qw(before execute after); + for my $hook (@hooks) { + my $level = 0; + for my $action (@{ $self->{hooks}->{$hook} }) { + $level++ if (ref($action->{plugin}) eq $eftxango); + + my $newhook = $prefixes[$level] . ".eftxango." . $hook; + push @{ $self->{hooks}->{$newhook} }, +{ + callback => $action->{callback}, + plugin => $action->{plugin}, + }; + + $action->{rule_hook} = $newhook if $action->{rule_hook} eq $hook; + + $level++ if (ref($action->{plugin}) eq $eftxango); + } + delete($self->{hooks}->{$hook}); + } + return; + + for my $hook (keys %{ $self->{hooks} }) { + for my $action (@{ $self->{hooks}->{$hook} }) { + $self->log(info => "$hook: ".ref($action->{plugin})); + } + } +} + sub is_loaded { my($self, $stuff) = @_; @@ -260,6 +302,7 @@ my @ret; for my $action (@{ $self->{hooks}->{$hook} }) { my $plugin = $action->{plugin}; + $self->log(info => "running $hook " . ref($plugin)); if ( $plugin->rule->dispatch($plugin, $hook, $args) ) { my $ret = $action->{callback}->($plugin, $self, $args); $callback->($ret) if $callback; @@ -324,15 +367,28 @@ sub do_run_with_feeds { my $self = shift; - for my $feed ($self->update->feeds) { - for my $entry ($feed->entries) { - $self->run_hook('update.entry.fixup', { feed => $feed, entry => $entry }); + my $key = "execute.eftxango.update.fixup"; + if (exists($self->{hooks}->{$key})) { + my @prefixes = qw(before execute after); + for my $prefix (@prefixes) { + for my $feed ($self->update->feeds) { + for my $entry ($feed->entries) { + $self->run_hook($prefix.".eftxango.".'update.entry.fixup', { feed => $feed, entry => $entry }); + } + $self->run_hook($prefix.".eftxango.".'update.feed.fixup', { feed => $feed }); + } + $self->run_hook($prefix.".eftxango.".'update.fixup'); } - $self->run_hook('update.feed.fixup', { feed => $feed }); + } else { + for my $feed ($self->update->feeds) { + for my $entry ($feed->entries) { + $self->run_hook('update.entry.fixup', { feed => $feed, entry => $entry }); + } + $self->run_hook('update.feed.fixup', { feed => $feed }); + } + $self->run_hook('update.fixup'); } - $self->run_hook('update.fixup'); - $self->run_hook('smartfeed.init'); for my $feed ($self->update->feeds) { for my $entry ($feed->entries) {