From 363b3629a41a56e3130d6b493f8d0b8a268aa1ed Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 8 Feb 2021 16:52:47 +0300 Subject: [PATCH] rewrite a few more hooks --- classes/rssutils.php | 52 ++++++++++++++++++--------------- plugins/af_redditimgur/init.php | 16 +++++----- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/classes/rssutils.php b/classes/rssutils.php index c0025a022..96128e60c 100755 --- a/classes/rssutils.php +++ b/classes/rssutils.php @@ -414,12 +414,14 @@ class RSSUtils { Debug::log("running HOOK_FETCH_FEED handlers...", Debug::$LOG_VERBOSE); - foreach ($pluginhost->get_hooks(PluginHost::HOOK_FETCH_FEED) as $plugin) { - Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE); - $start = microtime(true); - $feed_data = $plugin->hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed, 0, $auth_login, $auth_pass); - Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE); - } + $start_ts = microtime(true); + $last_article_timestamp = 0; + $pluginhost->chain_hooks_callback(PluginHost::HOOK_FETCH_FEED, + function ($result, $plugin) use (&$feed_data, $start_ts) { + $feed_data = $result; + Debug::log(sprintf("=== %.4f (sec) %s", microtime(true) - $start_ts, get_class($plugin)), Debug::$LOG_VERBOSE); + }, + $feed_data, $fetch_url, $owner_uid, $feed, $last_article_timestamp, $auth_login, $auth_pass); if ($feed_data) { Debug::log("feed data has been modified by a plugin.", Debug::$LOG_VERBOSE); @@ -529,12 +531,13 @@ class RSSUtils { Debug::log("running HOOK_FEED_FETCHED handlers...", Debug::$LOG_VERBOSE); $feed_data_checksum = md5($feed_data); - foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_FETCHED) as $plugin) { - Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE); - $start = microtime(true); - $feed_data = $plugin->hook_feed_fetched($feed_data, $fetch_url, $owner_uid, $feed); - Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE); - } + $start_ts = microtime(true); + $pluginhost->chain_hooks_callback(PluginHost::HOOK_FEED_FETCHED, + function ($result, $plugin) use (&$feed_data, $start_ts) { + $feed_data = $result; + Debug::log(sprintf("=== %.4f (sec) %s", microtime(true) - $start_ts, get_class($plugin)), Debug::$LOG_VERBOSE); + }, + $feed_data, $fetch_url, $owner_uid, $feed); if (md5($feed_data) != $feed_data_checksum) { Debug::log("feed data has been modified by a plugin.", Debug::$LOG_VERBOSE); @@ -551,12 +554,12 @@ class RSSUtils { // We use local pluginhost here because we need to load different per-user feed plugins - foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_PARSED) as $plugin) { - Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE); - $start = microtime(true); - $plugin->hook_feed_parsed($rss, $feed); - Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE); - } + $start_ts = microtime(true); + $pluginhost->chain_hooks_callback(PluginHost::HOOK_FEED_PARSED, + function($result, $plugin) use ($start_ts) { + Debug::log(sprintf("=== %.4f (sec) %s", microtime(true) - $start_ts, get_class($plugin)), Debug::$LOG_VERBOSE); + }, + $rss, $feed); Debug::log("language: $feed_language", Debug::$LOG_VERBOSE); Debug::log("processing feed data...", Debug::$LOG_VERBOSE); @@ -744,9 +747,11 @@ class RSSUtils { if (is_array($encs)) { foreach ($encs as $e) { - foreach ($pluginhost->get_hooks(PluginHost::HOOK_ENCLOSURE_IMPORTED) as $plugin) { - $e = $plugin->hook_enclosure_imported($e, $feed); - } + $pluginhost->chain_hooks_callback(PluginHost::HOOK_ENCLOSURE_IMPORTED, + function ($result) use (&$e) { + $e = $result; + }, + $e, $feed); $e_item = array( rewrite_relative_url($site_url, $e->link), @@ -850,9 +855,8 @@ class RSSUtils { $article["tags"], $matched_rules, $matched_filters); // $article_filters should be renamed to something like $filter_actions; actual filter objects are in $matched_filters - foreach ($pluginhost->get_hooks(PluginHost::HOOK_FILTER_TRIGGERED) as $plugin) { - $plugin->hook_filter_triggered($feed, $owner_uid, $article, $matched_filters, $matched_rules, $article_filters); - } + $pluginhost->run_hooks(PluginHost::HOOK_FILTER_TRIGGERED, + $feed, $owner_uid, $article, $matched_filters, $matched_rules, $article_filters); $matched_filter_ids = array_map(function($f) { return $f['id']; }, $matched_filters); diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index a1da0ca37..dba1a2bff 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -738,14 +738,14 @@ class Af_RedditImgur extends Plugin { if ($content_type && strpos($content_type, "text/html") !== false) { - foreach ($this->host->get_hooks(PluginHost::HOOK_GET_FULL_TEXT) as $p) { - $extracted_content = $p->hook_get_full_text($url); - - if ($extracted_content) { - $article["content"] = $extracted_content; - break; - } - } + $this->host->run_hooks_callback(PluginHost::HOOK_GET_FULL_TEXT, + function ($result) use (&$article) { + if ($result) { + $article["content"] = $result; + return true; + } + }, + $url); } } }