]> git.wh0rd.org - tt-rss.git/commitdiff
handle counters using JSON instead of XML
authorAndrew Dolgov <fox@fakecake.org>
Thu, 4 Nov 2010 19:38:03 +0000 (22:38 +0300)
committerAndrew Dolgov <fox@fakecake.org>
Thu, 4 Nov 2010 19:38:03 +0000 (22:38 +0300)
backend.php
functions.js
functions.php
modules/backend-rpc.php

index 0182b24361a20c7045e6bb062d0b2350010bb80a..e13019d45f9106e202e76a64d6edc7da4fc860e9 100644 (file)
 //                     if (get_pref($link, "SYNC_COUNTERS") || ($mode == "prefetch" && $csync)) {
 
                        if (time() - $_SESSION["view:counters_stamp"] > 5 && $mode == "prefetch") {
-                               print "<counters>";
-                               getAllCounters($link, $omode);
-                               print "</counters>";
+                               print "<counters><![CDATA[";
+                               print json_encode(getAllCounters($link, $omode));
+                               print "]]></counters>";
                                $_SESSION["view:counters_stamp"] = time();
                        }
 
 
                        if ($_REQUEST["debug"]) $timing_info = print_checkpoint("20", $timing_info);
 
-
-//                     if (get_pref($link, "SYNC_COUNTERS") ||                         
-//                                     time() - $_SESSION["get_all_counters_stamp"] > $viewfeed_ctr_interval) {
-//                             print "<counters>";
-//                             getAllCounters($link, $omode, $feed);
-//                             print "</counters>";
-//                     }
-
                        if (get_pref($link, 'COMBINED_DISPLAY_MODE') || $subop || 
                                time() - $_SESSION["viewfeed:counters_stamp"] > 5) {
                                if (!$offset) {
-                                       print "<counters>";
-                                       getAllCounters($link, $omode, $feed);
-                                       print "</counters>";
+                                       print "<counters><![CDATA[";
+                                       print json_encode(getAllCounters($link, $omode, $feed));
+                                       print "]]></counters>";
                                        $_SESSION["viewfeed:counters_stamp"] = time();
                                }
                        }
index 553c52bf73ee7c359292ff436e108c0410203275..9a1652ce78b40675ed15295be04f70ba10cda29c 100644 (file)
@@ -383,18 +383,18 @@ function parse_counters(reply, scheduled_call) {
 
                var feeds_found = 0;
 
-               var elems = reply.getElementsByTagName("counter");
+               var elems = JSON.parse(reply.firstChild.nodeValue);
 
                for (var l = 0; l < elems.length; l++) {
 
-                       var id = elems[l].getAttribute("id");
-                       var t = elems[l].getAttribute("type");
-                       var ctr = elems[l].getAttribute("counter");
-                       var error = elems[l].getAttribute("error");
-                       var has_img = elems[l].getAttribute("hi");
-                       var updated = elems[l].getAttribute("updated");
-                       var title = elems[l].getAttribute("title");
-                       var xmsg = elems[l].getAttribute("xmsg");
+                       var id = elems[l].id
+                       var is_cat = elems[l].cat;
+                       var ctr = parseInt(elems[l].counter)
+                       var error = elems[l].error;
+                       var has_img = elems[l].has_img;
+                       var updated = elems[l].updated;
+                       var title = elems[l].title;
+                       var xmsg = elems[l].xmsg;
        
                        if (id == "global-unread") {
 
@@ -412,7 +412,7 @@ function parse_counters(reply, scheduled_call) {
                                continue;
                        }
        
-                       if (t == "category") {
+                       if (is_cat) {
                                var catctr = $("FCATCTR-" + id);
                                if (catctr) {
                                        catctr.innerHTML = "(" + ctr + ")";
index bed8f23f10e63e747b08c983943a02ac641bef63..da999fe2d4ecc515150a430d4e31e4f8094ab026 100644 (file)
        function getAllCounters($link, $omode = "flc", $active_feed = false) {
 
                if (!$omode) $omode = "flc";
-       
-               getGlobalCounters($link);
-               getVirtCounters($link);
 
-               if (strchr($omode, "l")) getLabelCounters($link);
-               if (strchr($omode, "f")) getFeedCounters($link, $active_feed);
-               if (strchr($omode, "t")) getTagCounters($link);
+               $data = getGlobalCounters($link);
+               
+               $data = array_merge($data, getVirtCounters($link));
+
+               if (strchr($omode, "l")) $data = array_merge($data, getLabelCounters($link));
+               if (strchr($omode, "f")) $data = array_merge($data, getFeedCounters($link, $active_feed));
+               if (strchr($omode, "t")) $data = array_merge($data, getTagCounters($link));
                if (strchr($omode, "c")) {                      
                        if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               getCategoryCounters($link);
+                               $data = array_merge($data, getCategoryCounters($link));
                        }
                }
+
+               return $data;
        }       
 
        function getCategoryCounters($link) {
-               # two special categories are -1 and -2 (all virtuals; all labels)
-
-/*             $ctr = getCategoryUnread($link, -1);
+               $ret_arr = array();
 
-               print "<counter type=\"category\" id=\"-1\" counter=\"$ctr\"/>"; */
+               /* Labels category */
 
-               $ctr = getCategoryUnread($link, -2); 
+               $cv = array("id" => -2, "cat" => true,
+                       "counter" => getCategoryUnread($link, -2));
 
-               print "<counter type=\"category\" id=\"-2\" counter=\"$ctr\"/>";
+               array_push($ret_arr, $cv);
 
                $age_qpart = getMaxAgeSubquery();
 
                while ($line = db_fetch_assoc($result)) {
                        $line["cat_id"] = (int) $line["cat_id"];
 
-                       print "<counter type=\"category\" id=\"".$line["cat_id"]."\" counter=\"".
-                               $line["unread"]."\"/>";
+                       $cv = array("id" => $line["cat_id"], "cat" => true,
+                               "counter" => $line["unread"]);
+
+                       array_push($ret_arr, $cv);
                }
 
                /* Special case: NULL category doesn't actually exist in the DB */
 
-               print "<counter type=\"category\" id=\"0\" counter=\"".
-                       ccache_find($link, 0, $_SESSION["uid"], true)."\"/>";
+               $cv = array("id" => 0, "cat" => true,
+                       "counter" => ccache_find($link, 0, $_SESSION["uid"], true));
 
+               array_push($ret_arr, $cv);
+
+               return $ret_arr;
        }
 
        function getCategoryUnread($link, $cat, $owner_uid = false) {
        }
 
        function getGlobalCounters($link, $global_unread = -1) {
+               $ret_arr = array();
+
                if ($global_unread == -1) {     
                        $global_unread = getGlobalUnread($link);
                }
-               print "<counter type=\"global\" id='global-unread' 
-                       counter='$global_unread'/>";
+
+               $cv = array("id" => "global-unread", 
+                       "counter" => $global_unread);
+
+               array_push($ret_arr, $cv);
 
                $result = db_query($link, "SELECT COUNT(id) AS fn FROM 
                        ttrss_feeds WHERE owner_uid = " . $_SESSION["uid"]);
 
                $subscribed_feeds = db_fetch_result($result, 0, "fn");
 
-               print "<counter type=\"global\" id='subscribed-feeds' 
-                       counter='$subscribed_feeds'/>";
+               $cv = array("id" => "subscribed-feeds", 
+                       "counter" => $subscribed_feeds);
 
+               array_push($ret_arr, $cv);
+
+               return $ret_arr;
        }
 
        function getSubscribedFeeds($link) {
        }
 
        function getTagCounters($link) {
+               
+               $ret_arr = array();
 
                $age_qpart = getMaxAgeSubquery();
 
                foreach (array_keys($tags) as $tag) {
                        $unread = $tags[$tag];                  
                        $tag = htmlspecialchars($tag);
-                       print "<counter type=\"tag\" id=\"$tag\" counter=\"$unread\"/>";
-               } 
+
+                       $cv = array("id" => $tag,
+                               "tag" => true,
+                               "counter" => $unread);
+
+                       array_push($ret_arr, $cv);
+               }
+
+               return $ret_arr;        
        }
 
-       function getVirtCounters($link, $ret_mode = false) {
+       function getVirtCounters($link) {
 
                $ret_arr = array();
 
                for ($i = 0; $i >= -4; $i--) {
 
                        $count = getFeedUnread($link, $i);
+
+                       $cv = array("id" => $i,
+                               "counter" => $count,
+                               "description" => getFeedTitle($link, $i));
        
-                       if (!$ret_mode) {
-       
-                               if (get_pref($link, 'EXTENDED_FEEDLIST')) {
-                                       $xmsg_part = "xmsg=\"(" . getFeedArticles($link, $i) . " total)\"";
-                               } else {
-                                       $xmsg_part = "";
-                               }
+                       if (get_pref($link, 'EXTENDED_FEEDLIST'))
+                               $cv["xmsg"] = getFeedArticles($link, $i)." ".__("total");
 
-                               print "<counter type=\"label\" id=\"$i\" counter=\"$count\" $xmsg_part/>";
-                       } else {
-                               $ret_arr[$i]["counter"] = $count;
-                               $ret_arr[$i]["description"] = getFeedTitle($link, $i);
-                       }
+                       array_push($ret_arr, $cv);
                } 
 
                return $ret_arr;
        }
 
-       function getLabelCounters($link, $ret_mode = false) {
+       function getLabelCounters($link) {
+
+               $ret_arr = array();
 
                $age_qpart = getMaxAgeSubquery();
 
 
                        $label_name = $line["caption"];
                        $count = getFeedUnread($link, $id);
-       
-                       if (!$ret_mode) {
 
-                               if (get_pref($link, 'EXTENDED_FEEDLIST')) {
-                                       $xmsg_part = "xmsg=\"(" . getFeedArticles($link, $id) . " total)\"";
-                               } else {
-                                       $xmsg_part = "";
-                               }
+                       $cv = array("id" => $id,
+                               "counter" => $count,
+                               "description" => $label_name);
 
-                               print "<counter type=\"label\" id=\"$id\" counter=\"$count\" $xmsg_part/>";
+                       if (get_pref($link, 'EXTENDED_FEEDLIST'))
+                               $cv["xmsg"] = getFeedArticles($link, $id)." ".__("total");
 
-                       } else {
-                               $ret_arr[$id]["counter"] = $count;
-                               $ret_arr[$id]["description"] = $label_name;
-                       }
+                       array_push($ret_arr, $cv);
                }
        
                return $ret_arr;
 
        function getFeedCounters($link, $active_feed = false) {
 
+               $ret_arr = array();
+
                $age_qpart = getMaxAgeSubquery();
 
                $query = "SELECT ttrss_feeds.id,
                                $last_updated = date($short_date, strtotime($line["last_updated"]));
                        }                               
 
-                       $last_updated = htmlspecialchars($last_updated);
-
                        $has_img = feed_has_icon($id);
 
                        $tmp_result = db_query($link,
 
                        $count += db_fetch_result($tmp_result, 0, "unread");
 
-                       if ($last_error) {
-                               $error_part = "error=\"$last_error\"";
-                       } else {
-                               $error_part = "";
-                       }
+                       $cv = array("id" => $id,
+                               "last_updated" => $last_updated,
+                               "counter" => $count,
+                               "has_img" => (int) $has_img);
 
-                       if ($has_img) {
-                               $has_img_part = "hi=\"$has_img\"";
-                       } else {
-                               $has_img_part = "";
-                       }                               
+                       if ($last_error)
+                               $cv["error"] = $last_error;
 
-                       if ($active_feed && $id == $active_feed) {
-                               $has_title_part = "title=\"" . htmlspecialchars($line["title"]) . "\"";
-                       } else {
-                               $has_title_part = "";
-                       }
+                       if (get_pref($link, 'EXTENDED_FEEDLIST'))
+                               $cv["xmsg"] = getFeedArticles($link, $id)." ".__("total");
 
-                       if (get_pref($link, 'EXTENDED_FEEDLIST')) {
-                               $xmsg_part = "xmsg=\"(" . getFeedArticles($link, $id) . " total)\"";
-                       }
+                       if ($active_feed && $id == $active_feed)
+                               $cv["title"] = $line["title"];
+
+                       array_push($ret_arr, $cv);
 
-                       print "<counter type=\"feed\" id=\"$id\" counter=\"$count\" $has_img_part $error_part updated=\"$last_updated\" $xmsg_part $has_title_part/>";
                }
+
+               return $ret_arr;
        }
 
        function get_script_dt_add() {
-/*             if (strpos(VERSION, ".99") === false) {
-                       return VERSION;
-               } else {
-                       return time();
-               } */
                return time();
        }
 
index aa05e8e8e8a3866e00d38a1906650d1fd1b3ce5f..228d45a78eabbdecbb5ae41f54cd30042793f9cf 100644 (file)
 
                if ($subop == "getAllCounters") {
                        print "<rpc-reply>";                    
-                       print "<counters>";
+                       print "<counters><![CDATA[";
 
-                       $omode = $_REQUEST["omode"];
+                       print json_encode(getAllCounters($link, $_REQUEST['omode']));
 
-                       getAllCounters($link, $omode);
-                       print "</counters>";
+                       print "]]></counters>";
                        print_runtime_info($link);
                        print "</rpc-reply>";
 
                        $result = db_query($link, "UPDATE ttrss_user_entries SET marked = $mark
                                WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]);
 
-                       print "<rpc-reply><counters>";
-                       getGlobalCounters($link);
-                       getVirtCounters($link);
-                       getLabelCounters($link);
-                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               getCategoryCounters($link);
-                       }
-                       print "</counters></rpc-reply>";
+                       print "<rpc-reply><counters><![CDATA[";
+                       print json_encode(getAllCounters($link));
+                       print "]]></counters></rpc-reply>";
 
                        return;
                }
                        $result = db_query($link, "DELETE FROM ttrss_user_entries                               
                                WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]);
 
-                       print "<rpc-reply><counters>";
-                       getGlobalCounters($link);
-                       getVirtCounters($link);
-                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               getCategoryCounters($link);
-                       }
-                       print "</counters></rpc-reply>";
+                       print "<rpc-reply><counters><![CDATA[";
+                       print json_encode(getAllCounters($link));
+                       print "]]></counters></rpc-reply>";
 
                        return;
                }
                                SET feed_id = orig_feed_id, orig_feed_id = NULL
                                WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]);
 
-                       print "<rpc-reply><counters>";
-                       getGlobalCounters($link);
-                       getVirtCounters($link);
-                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               getCategoryCounters($link);
-                       }
-                       print "</counters></rpc-reply>";
+                       print "<rpc-reply><counters><![CDATA[";
+                       print json_encode(getAllCounters($link));
+                       print "]]></counters></rpc-reply>";
 
                        return;
                }
                                archive_article($link, $id, $_SESSION["uid"]);
                        }
 
-                       print "<rpc-reply><counters>";
-                       getGlobalCounters($link);
-                       getVirtCounters($link);
-                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               getCategoryCounters($link);
-                       }
-                       print "</counters></rpc-reply>";
+                       print "<rpc-reply><counters><![CDATA[";
+                       print json_encode(getAllCounters($link));
+                       print "]]></counters></rpc-reply>";
 
                        return;
                }
 
                        print "<rpc-reply>";
                        
-                       print "<counters>";
-                       getGlobalCounters($link);
-                       getVirtCounters($link);
-                       getLabelCounters($link);
-                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                               getCategoryCounters($link);
-                       }
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getAllCounters($link));
+                       print "]]></counters>";
 
                        if ($note != 'undefined') {
                                $note_size = strlen($note);
                        update_rss_feed($link, $feed_id);
 
                        print "<rpc-reply>";    
-                       print "<counters>";
-                       getFeedCounter($link, $feed_id);
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getFeedCounters($link, $feed_id));
+                       print "]]></counters>";
                        print "</rpc-reply>";
                        
                        return;
 
                        print "<rpc-reply>";
 
-                       print "<counters>";
+                       print "<counters><![CDATA[";
 
                        if ($global_unread_caller != $global_unread) {
-
-                               $omode = $_REQUEST["omode"];
-        
-                               if (!$omode) $omode = "tflc";
-
-                               getVirtCounters($link);
-
-                               if (strchr($omode, "l")) getLabelCounters($link);
-
-                               if (strchr($omode, "c")) {                      
-                                       if (get_pref($link, 'ENABLE_FEED_CATS')) {
-                                               getCategoryCounters($link);
-                                       }
-                               }
-
-                               if (strchr($omode, "f")) getFeedCounters($link);
-                               if (strchr($omode, "t")) getTagCounters($link);
-
-                               getGlobalCounters($link, $global_unread);
+                               $omode = $_REQUEST["omode"];
+                               print json_encode(getAllCounters($link, $omode));
                        }
  
-                       print "</counters>";
+                       print "]]></counters>";
 
                        print_runtime_info($link);
 
                        catchupArticlesById($link, $ids, $cmode);
 
                        print "<rpc-reply>";
-                       print "<counters>";
-                       getAllCounters($link, $_REQUEST["omode"]);
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getAllCounters($link, $_REQUEST['omode']));
+                       print "]]></counters>";
+
                        print_runtime_info($link);
                        print "</rpc-reply>";
 
                        markArticlesById($link, $ids, $cmode);
 
                        print "<rpc-reply>";
-                       print "<counters>";
-                       getAllCounters($link, $_REQUEST["omode"]);
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getAllCounters($link, $_REQUEST['omode']));
+                       print "]]></counters>";
                        print_runtime_info($link);
                        print "</rpc-reply>";
 
                        publishArticlesById($link, $ids, $cmode);
 
                        print "<rpc-reply>";
-                       print "<counters>";
-                       getAllCounters($link, $_REQUEST["omode"]);
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getAllCounters($link, $_REQUEST['omode']));
+                       print "]]></counters>";
                        print_runtime_info($link);
                        print "</rpc-reply>";
 
 
                        print "</info-for-headlines>";
 
-                       print "<counters>";
-                       getAllCounters($link, $omode);
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getAllCounters($link, $_REQUEST['omode']));
+                       print "]]></counters>";
                        print "</rpc-reply>";
 
                        return;
 
                        print "</info-for-headlines>";
 
-                       print "<counters>";
-                       getAllCounters($link, $omode);
-                       print "</counters>";
+                       print "<counters><![CDATA[";
+                       print json_encode(getAllCounters($link, $_REQUEST['omode']));
+                       print "]]></counters>";
                        print "</rpc-reply>";
 
                        return;