diff options
-rw-r--r-- | classes/handler/public.php | 2 | ||||
-rw-r--r-- | classes/rpc.php | 6 | ||||
-rw-r--r-- | include/functions.php | 44 | ||||
-rw-r--r-- | js/functions.js | 19 |
4 files changed, 33 insertions, 38 deletions
diff --git a/classes/handler/public.php b/classes/handler/public.php index b9972df4f..7cb465594 100644 --- a/classes/handler/public.php +++ b/classes/handler/public.php @@ -553,7 +553,7 @@ class Handler_Public extends Handler { break; case 4: print_notice(__("Multiple feed URLs found.")); - $feed_urls = get_feeds_from_html($feed_url); + $feed_urls = $rc["feeds"]; break; case 5: print_error(T_sprintf("Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL.", $feed_url)); diff --git a/classes/rpc.php b/classes/rpc.php index c4d0cd53c..f0d1d3d86 100644 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -195,12 +195,6 @@ class RPC extends Handler_Protected { print json_encode(array("result" => $rc)); } - function extractfeedurls() { - $urls = get_feeds_from_html($_REQUEST['url']); - - print json_encode(array("urls" => $urls)); - } - function togglepref() { $key = db_escape_string($_REQUEST["key"]); set_pref($this->link, $key, !get_pref($this->link, $key)); diff --git a/include/functions.php b/include/functions.php index ba7cb75a8..cca02837e 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1810,15 +1810,19 @@ $update_method = 0; - if (!fetch_file_contents($url, false, $auth_login, $auth_pass)) + $contents = @fetch_file_contents($url, false, $auth_login, $auth_pass); + + 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) { return array("code" => 3); } else if (count($feedUrls) > 1) { - return array("code" => 4); + return array("code" => 4, "feeds" => $feedUrls); } //use feed url as new URL $url = key($feedUrls); @@ -4758,22 +4762,13 @@ return false; } - /** - * 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) + function get_feeds_from_html($url, $content) { $url = fix_url($url); $baseUrl = substr($url, 0, strrpos($url, '/') + 1); libxml_use_internal_errors(true); - $content = @fetch_file_contents($url, false, $login, $pass); - $doc = new DOMDocument(); $doc->loadHTML($content); $xpath = new DOMXPath($doc); @@ -4794,23 +4789,12 @@ return $feedUrls; } - /** - * Checks if the content behind the given URL is a HTML file - * - * @param string $url URL to check - * - * @return boolean True if the URL contains HTML content - */ - function url_is_html($url, $login = false, $pass = false) { - $content = substr(fetch_file_contents($url, false, $login, $pass), 0, 1000); - - if (stripos($content, '<html>') === false - && stripos($content, '<html ') === false - ) { - return false; - } + function is_html($content) { + return preg_match("/<html|DOCTYPE html/i", $content) !== 0; + } - return true; + function url_is_html($url, $login = false, $pass = false) { + return is_html(fetch_file_contents($url, false, $login, $pass)); } function print_label_select($link, $name, $value, $attributes = "") { diff --git a/js/functions.js b/js/functions.js index 97df318e5..e9dcf3f3a 100644 --- a/js/functions.js +++ b/js/functions.js @@ -881,7 +881,7 @@ function quickAddFeed() { alert(__("Specified URL doesn't seem to contain any feeds.")); break; case 4: - notify_progress("Searching for feed urls...", true); + /* notify_progress("Searching for feed urls...", true); new Ajax.Request("backend.php", { parameters: 'op=rpc&method=extractfeedurls&url=' + param_escape(feed_url), @@ -912,6 +912,23 @@ function quickAddFeed() { 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; case 5: alert(__("Couldn't download the specified URL: %s"). |