Only require an array of basic info from 'HOOK_FEED_BASIC_INFO'.

Removes the need for the plugin to provide feed content.

Gives plugins a chance to provide 'title' and 'site_url' basic info.
Falls back to attempting retrieval+parsing of the fetch URL if needed.
This commit is contained in:
wn_ 2017-09-26 20:37:05 -05:00
parent bec5ba93e2
commit 3476690cbf
1 changed files with 21 additions and 22 deletions

View File

@ -223,8 +223,6 @@ class RSSUtils {
$fetch_url = db_fetch_result($result, 0, "feed_url"); $fetch_url = db_fetch_result($result, 0, "feed_url");
$feed_data = '';
$pluginhost = new PluginHost(); $pluginhost = new PluginHost();
$user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid); $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
@ -232,14 +230,12 @@ class RSSUtils {
$pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid); $pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
$pluginhost->load_data(); $pluginhost->load_data();
$basic_info = array();
foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_BASIC_INFO) as $plugin) { foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_BASIC_INFO) as $plugin) {
$feed_data = $plugin->hook_feed_basic_info($fetch_url, $owner_uid, $feed, $auth_login, $auth_pass); $basic_info = $plugin->hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass);
if ($feed_data) { }
break;
}
}
if (!$feed_data) { if (!$basic_info) {
$feed_data = fetch_file_contents($fetch_url, false, $feed_data = fetch_file_contents($fetch_url, false,
$auth_login, $auth_pass, false, $auth_login, $auth_pass, false,
FEED_FETCH_TIMEOUT, FEED_FETCH_TIMEOUT,
@ -252,31 +248,34 @@ class RSSUtils {
if ($tmp) $feed_data = $tmp; if ($tmp) $feed_data = $tmp;
} }
$feed_data = trim($feed_data);
$rss = new FeedParser($feed_data);
$rss->init();
if (!$rss->error()) {
$basic_info = array(
'title' => db_escape_string(mb_substr($rss->get_title(), 0, 199)),
'site_url' => db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245))
);
}
} }
$feed_data = trim($feed_data); if ($basic_info && is_array($basic_info)) {
$rss = new FeedParser($feed_data);
$rss->init();
if (!$rss->error()) {
$result = db_query("SELECT title, site_url FROM ttrss_feeds WHERE id = '$feed'"); $result = db_query("SELECT title, site_url FROM ttrss_feeds WHERE id = '$feed'");
$registered_title = db_fetch_result($result, 0, "title"); $registered_title = db_fetch_result($result, 0, "title");
$orig_site_url = db_fetch_result($result, 0, "site_url"); $orig_site_url = db_fetch_result($result, 0, "site_url");
$site_url = db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245)); if ($basic_info['title'] && (!$registered_title || $registered_title == "[Unknown]")) {
$feed_title = db_escape_string(mb_substr($rss->get_title(), 0, 199));
if ($feed_title && (!$registered_title || $registered_title == "[Unknown]")) {
db_query("UPDATE ttrss_feeds SET db_query("UPDATE ttrss_feeds SET
title = '$feed_title' WHERE id = '$feed'"); title = '${basic_info['title']}' WHERE id = '$feed'");
} }
if ($site_url && $orig_site_url != $site_url) { if ($basic_info['site_url'] && $orig_site_url != $basic_info['site_url']) {
db_query("UPDATE ttrss_feeds SET db_query("UPDATE ttrss_feeds SET
site_url = '$site_url' WHERE id = '$feed'"); site_url = '${basic_info['site_url']}' WHERE id = '$feed'");
} }
} }
} }