This time the loop stores messages in an array as they're added to the index, and passes that array to the hook.
I want to do some unrelated processing on each message I receive, but I don't want to block the message being added to the index. This patch adds a hook which runs /after/ the message is added to the index. --- lib/sup/poll.rb | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/lib/sup/poll.rb b/lib/sup/poll.rb index 8a9d218..fb3aacf 100644 --- a/lib/sup/poll.rb +++ b/lib/sup/poll.rb @@ -11,6 +11,12 @@ Variables: message: the new message EOS + HookManager.register "after-add-message", <<EOS +Executes after all messages are added to the index. +Variables: + messages: an array of the new messages added +EOS + HookManager.register "before-poll", <<EOS Executes immediately before a poll for new messages commences. No variables. @@ -138,6 +144,7 @@ EOS begin return if source.done? || source.has_errors? + messages = [] source.each do |offset, default_labels| if source.has_errors? Redwood::log "error loading messages from #{source}: #{source.error.message}" @@ -145,6 +152,7 @@ EOS end m_new = Message.build_from_source source, offset + messages.push(m_new) m_old = Index.build_message m_new.id m_new.labels += default_labels + (source.archived? ? [] : [:inbox]) @@ -157,6 +165,8 @@ EOS Index.sync_message m_ret, opts UpdateManager.relay self, :added, m_ret unless m_old end + HookManager.run "after-add-message", :messages => messages + rescue SourceError => e Redwood::log "problem getting messages from #{source}: #{e.message}" Redwood::report_broken_sources :force_to_top => true -- 1.6.0.4 _______________________________________________ sup-talk mailing list sup-talk@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-talk