]> git.wh0rd.org - tt-rss.git/commitdiff
expand error messages in subscribeToFeed(), provide proper error message
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Tue, 21 Aug 2012 10:09:51 +0000 (14:09 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Tue, 21 Aug 2012 10:09:51 +0000 (14:09 +0400)
when URL download failed (refs #489)

classes/dlg.php
include/functions.php
js/functions.js

index 7e68c9e69d43312fbc6bc8e32ee9453656530e14..008518a8aa5c0f528a76ca7e644724d9f72f1f67 100644 (file)
@@ -250,6 +250,11 @@ class Dlg extends Handler_Protected {
                print "<div class=\"dlgSec\">".__("Feed")."</div>";
                print "<div class=\"dlgSecCont\">";
 
+               print "<div style='float : right'>
+                       <img style='display : none'
+                               id='feed_add_spinner' src='".
+                               theme_image($this->link, 'images/indicator_white.gif')."'></div>";
+
                print "<input style=\"font-size : 16px; width : 20em;\"
                        placeHolder=\"".__("Feed URL")."\"
                        dojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"feed\" id=\"feedDlg_feedUrl\">";
index ac07974e8b70d435f64028220263e57848a385cb..632c1e628134964790b33f8c51e4022b808a99e5 100644 (file)
@@ -2,6 +2,8 @@
        define('EXPECTED_CONFIG_VERSION', 25);
        define('SCHEMA_VERSION', 94);
 
+       $fetch_last_error = false;
+
        function __autoload($class) {
                $class_file = str_replace("_", "/", strtolower(basename($class)));
 
                $login = urlencode($login);
                $pass = urlencode($pass);
 
+               global $fetch_last_error;
+
                if (function_exists('curl_init') && !ini_get("open_basedir")) {
                        $ch = curl_init($url);
 
                        $contents = @curl_exec($ch);
 
                        if ($contents === false) {
+                               $fetch_last_error = curl_error($ch);
                                curl_close($ch);
                                return false;
                        }
                                }
                        }
 
-                       return @file_get_contents($url);
+                       $data = @file_get_contents($url);
+
+                       if (!$data && function_exists('error_get_last')) {
+                               $error = error_get_last();
+                               $fetch_last_error = $error["message"];
+                       }
+                       return $data;
                }
 
        }
        }
 
        /**
-        * @return integer Status code:
+        * @return array (code => Status code, message => error message if available)
+        *
         *                 0 - OK, Feed already exists
         *                 1 - OK, Feed added
         *                 2 - Invalid URL
        function subscribe_to_feed($link, $url, $cat_id = 0,
                        $auth_login = '', $auth_pass = '', $need_auth = false) {
 
+               global $fetch_last_error;
+
                require_once "include/rssfuncs.php";
 
                $url = fix_url($url);
 
-               if (!$url || !validate_feed_url($url)) return 2;
+               if (!$url || !validate_feed_url($url)) return array("code" => 2);
 
                $update_method = 0;
 
                $has_oauth = db_fetch_result($result, 0, 'twitter_oauth');
 
                if (!$need_auth || !$has_oauth || strpos($url, '://api.twitter.com') === false) {
-                       if (!fetch_file_contents($url, false, $auth_login, $auth_pass)) return 5;
+                       if (!fetch_file_contents($url, false, $auth_login, $auth_pass))
+                               return array("code" => 5, "message" => $fetch_last_error);
 
                        if (url_is_html($url, $auth_login, $auth_pass)) {
                                $feedUrls = get_feeds_from_html($url, $auth_login, $auth_pass);
                                if (count($feedUrls) == 0) {
-                                       return 3;
+                                       return array("code" => 3);
                                } else if (count($feedUrls) > 1) {
-                                       return 4;
+                                       return array("code" => 4);
                                }
                                //use feed url as new URL
                                $url = key($feedUrls);
 
                        } else {
                                if (!fetch_twitter_rss($link, $url, $_SESSION['uid']))
-                                       return 5;
+                                       return array("code" => 5);
 
                                $update_method = 3;
                        }
                                update_rss_feed($link, $feed_id, true);
                        }
 
-                       return 1;
+                       return array("code" => 1);
                } else {
-                       return 0;
+                       return array("code" => 0);
                }
        }
 
index 578172c77b0ccaa05ed94ccb0c5b4d5c5b919300..da0f2ba282c6a9acda833b9703b399e7898e91f1 100644 (file)
@@ -866,7 +866,7 @@ function quickAddFeed() {
 
                                        var feed_url = this.attr('value').feed;
 
-                                       notify_progress(__("Subscribing to feed..."), true);
+                                       Element.show("feed_add_spinner");
 
                                        new Ajax.Request("backend.php", {
                                                parameters: dojo.objectToQuery(this.attr('value')),
@@ -875,13 +875,14 @@ function quickAddFeed() {
 
                                                                var reply = JSON.parse(transport.responseText);
 
-                                                               var rc = parseInt(reply['result']);
+                                                               var rc = reply['result'];
 
                                                                notify('');
+                                                               Element.hide("feed_add_spinner");
 
                                                                console.log("GOT RC: " + rc);
 
-                                                               switch (rc) {
+                                                               switch (parseInt(rc['code'])) {
                                                                case 1:
                                                                        dialog.hide();
                                                                        notify_info(__("Subscribed to %s").replace("%s", feed_url));
@@ -928,7 +929,8 @@ function quickAddFeed() {
                                                                        });
                                                                        break;
                                                                case 5:
-                                                                       alert(__("Couldn't download the specified URL."));
+                                                                       alert(__("Couldn't download the specified URL: %s").
+                                                                                       replace("%s", rc['message']));
                                                                        break;
                                                                case 0:
                                                                        alert(__("You are already subscribed to this feed."));