]> git.wh0rd.org - tt-rss.git/commitdiff
remove xml from getAllCounters rpc call, use pure JSON
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Thu, 25 Nov 2010 10:20:37 +0000 (13:20 +0300)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Thu, 25 Nov 2010 10:23:37 +0000 (13:23 +0300)
feedlist.js
modules/backend-rpc.php
tt-rss.js
viewfeed.js

index e47567a813c2afbf2dd1298bd38d68c575d8760d..b475b9c5509dffdcc4b84ff69b1c98b999066544 100644 (file)
@@ -232,7 +232,7 @@ function request_counters_real() {
                        parameters: query,
                        onComplete: function(transport) { 
                                try {
-                                       handle_rpc_reply(transport);
+                                       handle_rpc_json(transport);
                                } catch (e) {
                                        exception_error("viewfeed/getcounters", e);
                                }
@@ -286,13 +286,11 @@ function displayNewContentPrompt(id) {
        }
 }
 
-function parse_counters(reply, scheduled_call) {
+function parse_counters(elems, scheduled_call) {
        try {
 
                var feeds_found = 0;
 
-               var elems = JSON.parse(reply.firstChild.nodeValue);
-
                for (var l = 0; l < elems.length; l++) {
 
                        var id = elems[l].id
@@ -302,7 +300,7 @@ function parse_counters(reply, scheduled_call) {
                        var has_img = elems[l].has_img;
                        var updated = elems[l].updated;
                        var title = elems[l].title;
-       
+
                        if (id == "global-unread") {
                                global_unread = ctr;
                                updateTitle();
index e93571207c50423635a7b4303d7e84b21fbc9977..93d8f074b5d7203db3ece4f8a67caf5bf20ed76d 100644 (file)
 
                if ($subop == "updateAllFeeds" || $subop == "getAllCounters") {
 
+                       header("Content-Type: text/plain");
+
                        $last_article_id = (int) $_REQUEST["last_article_id"];  
 
-                       print "<rpc-reply>";
+                       $reply = array();
 
-                       if ($seq)
-                               print "<seq>$seq</seq>";
+                       if ($seq) $reply['seq'] = $seq;
 
                        if ($last_article_id != getLastArticleId($link)) {
-                               print "<counters><![CDATA[";
                                $omode = $_REQUEST["omode"];
 
                                if ($omode != "T") 
-                                       print json_encode(getAllCounters($link, $omode));
+                                       $reply['counters'] = getAllCounters($link, $omode);
                                else
-                                       print json_encode(getGlobalCounters($link));
-
-                               print "]]></counters>";
+                                       $reply['counters'] = getGlobalCounters($link);
                        }
  
-                       print_runtime_info($link);
+                       $reply['runtime-info'] = make_runtime_info($link);
 
-                       print "</rpc-reply>";
 
+                       print json_encode($reply);
                        return;
                }
 
                }
 
                if ($subop == "getTweetInfo") {
-                       header("Content-Type: text/html");
+                       header("Content-Type: text/plain");
                        $id = db_escape_string($_REQUEST['id']);
 
                        $result = db_query($link, "SELECT title, link 
index ccb24ecae9d3b7efed1e03e963d9f044b87fe6b5..6d79943774f5c4e05a43d47e87a3fb7239863e2c 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -207,7 +207,7 @@ function timeout() {
                        new Ajax.Request("backend.php", {
                                parameters: query_str,
                                onComplete: function(transport) { 
-                                               handle_rpc_reply(transport, !_force_scheduled_update);
+                                               handle_rpc_json(transport, !_force_scheduled_update);
                                                _force_scheduled_update = false;
                                        } });
 
@@ -472,21 +472,14 @@ function toggleDispRead() {
        }
 }
 
-function parse_runtime_info(elem) {
-
-       if (!elem || !elem.firstChild) {
-               console.warn("parse_runtime_info: invalid node passed");
-               return;
-       }
-
-       var data = JSON.parse(elem.firstChild.nodeValue);
+function parse_runtime_info(data) {
 
        //console.log("parsing runtime info...");
 
        for (k in data) {
                var v = data[k];
 
-               // console.log("RI: " + k + " => " + v);
+//             console.log("RI: " + k + " => " + v);
 
                if (k == "new_version_available") {
                        var icon = $("newVersionIcon");
@@ -1044,12 +1037,12 @@ function handle_rpc_reply(transport, scheduled_call) {
                        var counters = transport.responseXML.getElementsByTagName("counters")[0];
        
                        if (counters)
-                               parse_counters(counters, scheduled_call);
+                               parse_counters(JSON.parse(counters.firstChild.nodeValue), scheduled_call);
 
                        var runtime_info = transport.responseXML.getElementsByTagName("runtime-info")[0];
 
                        if (runtime_info)
-                               parse_runtime_info(runtime_info);
+                               parse_runtime_info(JSON.parse(runtime_info.firstChild.nodeValue));
 
                        hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
 
@@ -1125,3 +1118,64 @@ function newVersionDlg() {
                exception_error("newVersionDlg", e);
        }
 }
+
+function handle_rpc_json(transport, scheduled_call) {
+       try {
+               var reply = JSON.parse(transport.responseText);
+
+               if (reply) {
+
+                       var error = reply['error'];
+
+                       if (error) {
+                               var code = error['code'];
+                               var msg = error['msg'];
+                               if (code != 0) {
+                                       fatalError(code, msg);
+                                       return false;
+                               }
+                       }
+
+                       var seq = reply['seq'];
+
+                       if (seq) {
+                               if (get_seq() != seq) {
+                                       console.log("[handle_rpc_json] sequence mismatch: " + seq + 
+                                               " (want: " + get_seq() + ")");
+                                       return true;
+                               }
+                       }
+
+                       var message = reply['message'];
+
+                       if (message) {
+                               if (message == "UPDATE_COUNTERS") {
+                                       console.log("need to refresh counters...");
+                                       setInitParam("last_article_id", -1);
+                                       _force_scheduled_update = true;
+                               }
+                       }
+
+                       var counters = reply['counters'];
+       
+                       if (counters)
+                               parse_counters(counters, scheduled_call);
+
+                       var runtime_info = reply['runtime-info'];;
+
+                       if (runtime_info)
+                               parse_runtime_info(runtime_info);
+
+                       hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
+
+               } else {
+                       notify_error("Error communicating with server.");
+               }
+
+       } catch (e) {
+               exception_error("handle_rpc_json", e, transport);
+       }
+
+       return true;
+}
+
index 4344398e3295bb839073d4def0201473e1af2791..8d0ab28a9689cc88b351983e9b604ad10d71f97e 100644 (file)
@@ -172,10 +172,6 @@ function headlines_callback2(transport, feed_cur_page) {
                        else
                                request_counters();
 
-                       if (runtime_info) {
-                               parse_runtime_info(runtime_info[0]);
-                       } 
-       
                } else {
                        console.warn("headlines_callback: returned no XML object");
                        dijit.byId("headlines-frame").attr('content', "<div class='whiteBox'>" +