subscribe_to_feed: stop fetching URL multiple times while subscribing, various other speedups
This commit is contained in:
parent
386c4ce63c
commit
759e5132a1
|
@ -553,7 +553,7 @@ class Handler_Public extends Handler {
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
print_notice(__("Multiple feed URLs found."));
|
print_notice(__("Multiple feed URLs found."));
|
||||||
$feed_urls = get_feeds_from_html($feed_url);
|
$feed_urls = $rc["feeds"];
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
print_error(T_sprintf("Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL.", $feed_url));
|
print_error(T_sprintf("Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL.", $feed_url));
|
||||||
|
|
|
@ -195,12 +195,6 @@ class RPC extends Handler_Protected {
|
||||||
print json_encode(array("result" => $rc));
|
print json_encode(array("result" => $rc));
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractfeedurls() {
|
|
||||||
$urls = get_feeds_from_html($_REQUEST['url']);
|
|
||||||
|
|
||||||
print json_encode(array("urls" => $urls));
|
|
||||||
}
|
|
||||||
|
|
||||||
function togglepref() {
|
function togglepref() {
|
||||||
$key = db_escape_string($_REQUEST["key"]);
|
$key = db_escape_string($_REQUEST["key"]);
|
||||||
set_pref($this->link, $key, !get_pref($this->link, $key));
|
set_pref($this->link, $key, !get_pref($this->link, $key));
|
||||||
|
|
|
@ -1810,15 +1810,19 @@
|
||||||
|
|
||||||
$update_method = 0;
|
$update_method = 0;
|
||||||
|
|
||||||
if (!fetch_file_contents($url, false, $auth_login, $auth_pass))
|
$contents = @fetch_file_contents($url, false, $auth_login, $auth_pass);
|
||||||
return array("code" => 5, "message" => $fetch_last_error);
|
|
||||||
|
if (!$contents) {
|
||||||
|
return array("code" => 5, "message" => $fetch_last_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_html($contents)) {
|
||||||
|
$feedUrls = get_feeds_from_html($url, $contents);
|
||||||
|
|
||||||
if (url_is_html($url, $auth_login, $auth_pass)) {
|
|
||||||
$feedUrls = get_feeds_from_html($url, $auth_login, $auth_pass);
|
|
||||||
if (count($feedUrls) == 0) {
|
if (count($feedUrls) == 0) {
|
||||||
return array("code" => 3);
|
return array("code" => 3);
|
||||||
} else if (count($feedUrls) > 1) {
|
} else if (count($feedUrls) > 1) {
|
||||||
return array("code" => 4);
|
return array("code" => 4, "feeds" => $feedUrls);
|
||||||
}
|
}
|
||||||
//use feed url as new URL
|
//use feed url as new URL
|
||||||
$url = key($feedUrls);
|
$url = key($feedUrls);
|
||||||
|
@ -4758,22 +4762,13 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
function get_feeds_from_html($url, $content)
|
||||||
* Extracts RSS/Atom feed URLs from the given HTML URL.
|
|
||||||
*
|
|
||||||
* @param string $url HTML page URL
|
|
||||||
*
|
|
||||||
* @return array Array of feeds. Key is the full URL, value the title
|
|
||||||
*/
|
|
||||||
function get_feeds_from_html($url, $login = false, $pass = false)
|
|
||||||
{
|
{
|
||||||
$url = fix_url($url);
|
$url = fix_url($url);
|
||||||
$baseUrl = substr($url, 0, strrpos($url, '/') + 1);
|
$baseUrl = substr($url, 0, strrpos($url, '/') + 1);
|
||||||
|
|
||||||
libxml_use_internal_errors(true);
|
libxml_use_internal_errors(true);
|
||||||
|
|
||||||
$content = @fetch_file_contents($url, false, $login, $pass);
|
|
||||||
|
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
$doc->loadHTML($content);
|
$doc->loadHTML($content);
|
||||||
$xpath = new DOMXPath($doc);
|
$xpath = new DOMXPath($doc);
|
||||||
|
@ -4794,23 +4789,12 @@
|
||||||
return $feedUrls;
|
return $feedUrls;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
function is_html($content) {
|
||||||
* Checks if the content behind the given URL is a HTML file
|
return preg_match("/<html|DOCTYPE html/i", $content) !== 0;
|
||||||
*
|
}
|
||||||
* @param string $url URL to check
|
|
||||||
*
|
|
||||||
* @return boolean True if the URL contains HTML content
|
|
||||||
*/
|
|
||||||
function url_is_html($url, $login = false, $pass = false) {
|
function url_is_html($url, $login = false, $pass = false) {
|
||||||
$content = substr(fetch_file_contents($url, false, $login, $pass), 0, 1000);
|
return is_html(fetch_file_contents($url, false, $login, $pass));
|
||||||
|
|
||||||
if (stripos($content, '<html>') === false
|
|
||||||
&& stripos($content, '<html ') === false
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function print_label_select($link, $name, $value, $attributes = "") {
|
function print_label_select($link, $name, $value, $attributes = "") {
|
||||||
|
|
|
@ -881,7 +881,7 @@ function quickAddFeed() {
|
||||||
alert(__("Specified URL doesn't seem to contain any feeds."));
|
alert(__("Specified URL doesn't seem to contain any feeds."));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
notify_progress("Searching for feed urls...", true);
|
/* notify_progress("Searching for feed urls...", true);
|
||||||
|
|
||||||
new Ajax.Request("backend.php", {
|
new Ajax.Request("backend.php", {
|
||||||
parameters: 'op=rpc&method=extractfeedurls&url=' + param_escape(feed_url),
|
parameters: 'op=rpc&method=extractfeedurls&url=' + param_escape(feed_url),
|
||||||
|
@ -912,6 +912,23 @@ function quickAddFeed() {
|
||||||
Effect.Appear('feedDlg_feedsContainer', {duration : 0.5});
|
Effect.Appear('feedDlg_feedsContainer', {duration : 0.5});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
break; */
|
||||||
|
|
||||||
|
feeds = rc['feeds'];
|
||||||
|
|
||||||
|
var select = dijit.byId("feedDlg_feedContainerSelect");
|
||||||
|
|
||||||
|
while (select.getOptions().length > 0)
|
||||||
|
select.removeOption(0);
|
||||||
|
|
||||||
|
var count = 0;
|
||||||
|
for (var feedUrl in feeds) {
|
||||||
|
select.addOption({value: feedUrl, label: feeds[feedUrl]});
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Effect.Appear('feedDlg_feedsContainer', {duration : 0.5});
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
alert(__("Couldn't download the specified URL: %s").
|
alert(__("Couldn't download the specified URL: %s").
|
||||||
|
|
Loading…
Reference in New Issue