From 6a7817c1ad684ea6eb0b02180e6d2040b3cb0a77 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 4 Nov 2010 22:38:03 +0300 Subject: [PATCH] handle counters using JSON instead of XML --- backend.php | 20 ++--- functions.js | 20 ++--- functions.php | 157 +++++++++++++++++++++------------------- modules/backend-rpc.php | 121 +++++++++++-------------------- 4 files changed, 138 insertions(+), 180 deletions(-) diff --git a/backend.php b/backend.php index 0182b2436..e13019d45 100644 --- a/backend.php +++ b/backend.php @@ -258,9 +258,9 @@ // if (get_pref($link, "SYNC_COUNTERS") || ($mode == "prefetch" && $csync)) { if (time() - $_SESSION["view:counters_stamp"] > 5 && $mode == "prefetch") { - print ""; - getAllCounters($link, $omode); - print ""; + print ""; $_SESSION["view:counters_stamp"] = time(); } @@ -389,20 +389,12 @@ 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 ""; -// getAllCounters($link, $omode, $feed); -// print ""; -// } - if (get_pref($link, 'COMBINED_DISPLAY_MODE') || $subop || time() - $_SESSION["viewfeed:counters_stamp"] > 5) { if (!$offset) { - print ""; - getAllCounters($link, $omode, $feed); - print ""; + print ""; $_SESSION["viewfeed:counters_stamp"] = time(); } } diff --git a/functions.js b/functions.js index 553c52bf7..9a1652ce7 100644 --- a/functions.js +++ b/functions.js @@ -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 + ")"; diff --git a/functions.php b/functions.php index bed8f23f1..da999fe2d 100644 --- a/functions.php +++ b/functions.php @@ -2454,30 +2454,32 @@ 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) + $ret_arr = array(); -/* $ctr = getCategoryUnread($link, -1); + /* Labels category */ - print ""; */ + $cv = array("id" => -2, "cat" => true, + "counter" => getCategoryUnread($link, -2)); - $ctr = getCategoryUnread($link, -2); - - print ""; + array_push($ret_arr, $cv); $age_qpart = getMaxAgeSubquery(); @@ -2489,15 +2491,20 @@ while ($line = db_fetch_assoc($result)) { $line["cat_id"] = (int) $line["cat_id"]; - print ""; + $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 ""; + $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) { @@ -2730,20 +2737,28 @@ } function getGlobalCounters($link, $global_unread = -1) { + $ret_arr = array(); + if ($global_unread == -1) { $global_unread = getGlobalUnread($link); } - print ""; + + $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 ""; + $cv = array("id" => "subscribed-feeds", + "counter" => $subscribed_feeds); + array_push($ret_arr, $cv); + + return $ret_arr; } function getSubscribedFeeds($link) { @@ -2754,6 +2769,8 @@ } function getTagCounters($link) { + + $ret_arr = array(); $age_qpart = getMaxAgeSubquery(); @@ -2773,37 +2790,41 @@ foreach (array_keys($tags) as $tag) { $unread = $tags[$tag]; $tag = htmlspecialchars($tag); - print ""; - } + + $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); - - if (!$ret_mode) { - - if (get_pref($link, 'EXTENDED_FEEDLIST')) { - $xmsg_part = "xmsg=\"(" . getFeedArticles($link, $i) . " total)\""; - } else { - $xmsg_part = ""; - } - print ""; - } else { - $ret_arr[$i]["counter"] = $count; - $ret_arr[$i]["description"] = getFeedTitle($link, $i); - } + $cv = array("id" => $i, + "counter" => $count, + "description" => getFeedTitle($link, $i)); + + if (get_pref($link, 'EXTENDED_FEEDLIST')) + $cv["xmsg"] = getFeedArticles($link, $i)." ".__("total"); + + array_push($ret_arr, $cv); } return $ret_arr; } - function getLabelCounters($link, $ret_mode = false) { + function getLabelCounters($link) { + + $ret_arr = array(); $age_qpart = getMaxAgeSubquery(); @@ -2818,21 +2839,15 @@ $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 ""; + 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; @@ -2840,6 +2855,8 @@ function getFeedCounters($link, $active_feed = false) { + $ret_arr = array(); + $age_qpart = getMaxAgeSubquery(); $query = "SELECT ttrss_feeds.id, @@ -2868,8 +2885,6 @@ $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, @@ -2878,38 +2893,28 @@ $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 ""; } + + return $ret_arr; } function get_script_dt_add() { -/* if (strpos(VERSION, ".99") === false) { - return VERSION; - } else { - return time(); - } */ return time(); } diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index aa05e8e8e..228d45a78 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -156,12 +156,11 @@ if ($subop == "getAllCounters") { print ""; - print ""; + print ""; + print "]]>"; print_runtime_info($link); print ""; @@ -183,14 +182,9 @@ $result = db_query($link, "UPDATE ttrss_user_entries SET marked = $mark WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); - print ""; - getGlobalCounters($link); - getVirtCounters($link); - getLabelCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; + print ""; return; } @@ -201,13 +195,9 @@ $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); - print ""; - getGlobalCounters($link); - getVirtCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; + print ""; return; } @@ -219,13 +209,9 @@ SET feed_id = orig_feed_id, orig_feed_id = NULL WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]); - print ""; - getGlobalCounters($link); - getVirtCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; + print ""; return; } @@ -237,13 +223,9 @@ archive_article($link, $id, $_SESSION["uid"]); } - print ""; - getGlobalCounters($link); - getVirtCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; + print ""; return; } @@ -274,14 +256,9 @@ print ""; - print ""; - getGlobalCounters($link); - getVirtCounters($link); - getLabelCounters($link); - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - print ""; + print ""; if ($note != 'undefined') { $note_size = strlen($note); @@ -301,9 +278,9 @@ update_rss_feed($link, $feed_id); print ""; - print ""; - getFeedCounter($link, $feed_id); - print ""; + print ""; print ""; return; @@ -316,31 +293,14 @@ print ""; - print ""; + print ""; + print "]]>"; print_runtime_info($link); @@ -358,9 +318,10 @@ catchupArticlesById($link, $ids, $cmode); print ""; - print ""; - getAllCounters($link, $_REQUEST["omode"]); - print ""; + print ""; + print_runtime_info($link); print ""; @@ -375,9 +336,9 @@ markArticlesById($link, $ids, $cmode); print ""; - print ""; - getAllCounters($link, $_REQUEST["omode"]); - print ""; + print ""; print_runtime_info($link); print ""; @@ -392,9 +353,9 @@ publishArticlesById($link, $ids, $cmode); print ""; - print ""; - getAllCounters($link, $_REQUEST["omode"]); - print ""; + print ""; print_runtime_info($link); print ""; @@ -649,9 +610,9 @@ print ""; - print ""; - getAllCounters($link, $omode); - print ""; + print ""; print ""; return; @@ -686,9 +647,9 @@ print ""; - print ""; - getAllCounters($link, $omode); - print ""; + print ""; print ""; return;