From 1341ea0dbedf749ff87e7d9b4b8a06d42d4ca4e0 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 24 Aug 2007 05:04:55 +0100 Subject: [PATCH] add some async counters handling --- functions.js | 14 ++++- modules/backend-rpc.php | 22 ++++---- viewfeed.js | 116 ++++++++++++++++++++++------------------ 3 files changed, 89 insertions(+), 63 deletions(-) diff --git a/functions.js b/functions.js index 0d839019..da33ba42 100644 --- a/functions.js +++ b/functions.js @@ -712,7 +712,8 @@ function parse_counters(reply, scheduled_call) { } if (row_needs_hl) { - new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5"}); + new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5", + queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } ); } } else { feedctr.className = "invisible"; @@ -790,6 +791,17 @@ function parse_counters_reply(xmlhttp, scheduled_call) { } +function all_counters_callback2(transport) { + try { + debug("all_counters_callback2 IN: " + transport + ""); + parse_counters_reply(transport); + debug("all_counters_callback2 OUT: " + transport + ""); + + } catch (e) { + exception_error("all_counters_callback2", e); + } +} + function all_counters_callback() { if (xmlhttp_rpc.readyState == 4) { try { diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 6d3ceedf..b54bd783 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -165,20 +165,22 @@ print ""; + $omode = $_GET["omode"]; + + if (!$omode) $omode = "tflc"; + + if (strchr($omode, "l")) getLabelCounters($link); + + if (strchr($omode, "c")) { + if (get_pref($link, 'ENABLE_FEED_CATS')) { + getCategoryCounters($link); + } + } + if ($global_unread_caller != $global_unread) { - $omode = $_GET["omode"]; - - if (!$omode) $omode = "tflc"; - - if (strchr($omode, "l")) getLabelCounters($link); if (strchr($omode, "f")) getFeedCounters($link); if (strchr($omode, "t")) getTagCounters($link); - if (strchr($omode, "c")) { - if (get_pref($link, 'ENABLE_FEED_CATS')) { - getCategoryCounters($link); - } - } } getGlobalCounters($link, $global_unread); diff --git a/viewfeed.js b/viewfeed.js index 2984b4bc..d9b2e22f 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -1,5 +1,4 @@ var active_post_id = false; -var _catchup_callback_func = false; var last_article_view = false; var active_real_feed_id = false; @@ -33,6 +32,19 @@ function catchup_callback() { } } +function catchup_callback2(transport, callback) { + try { + debug("catchup_callback2 " + transport + ", " + callback); + notify(""); + all_counters_callback2(transport); + if (callback) { + setTimeout(callback, 10); + } + } catch (e) { + exception_error("catchup_callback2", e); + } +} + function headlines_callback() { if (xmlhttp.readyState == 4) { debug("headlines_callback"); @@ -376,11 +388,6 @@ function toggleMark(id, client_only, no_effects) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - return; - } - var query = "backend.php?op=rpc&id=" + id + "&subop=mark"; query = query + "&afid=" + getActiveFeedId(); @@ -443,9 +450,15 @@ function toggleMark(id, client_only, no_effects) { if (!client_only) { debug(query); - xmlhttp_rpc.open("GET", query, true); - xmlhttp_rpc.onreadystatechange=all_counters_callback; - xmlhttp_rpc.send(null); +// xmlhttp_rpc.open("GET", query, true); +// xmlhttp_rpc.onreadystatechange=all_counters_callback; +// xmlhttp_rpc.send(null); + + new Ajax.Request(query, { + onComplete: function(transport) { + all_counters_callback2(transport); + } }); + } } catch (e) { @@ -457,11 +470,6 @@ function togglePub(id, client_only, no_effects) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - return; - } - var query = "backend.php?op=rpc&id=" + id + "&subop=publ"; query = query + "&afid=" + getActiveFeedId(); @@ -522,9 +530,10 @@ function togglePub(id, client_only, no_effects) { new Ajax.Request(query); */ if (!client_only) { - xmlhttp_rpc.open("GET", query, true); - xmlhttp_rpc.onreadystatechange=all_counters_callback; - xmlhttp_rpc.send(null); + new Ajax.Request(query, { + onComplete: function(transport) { + all_counters_callback2(transport); + } }); } } catch (e) { @@ -609,10 +618,6 @@ function moveToPost(mode) { function toggleUnread(id, cmode) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - return; - } var row = document.getElementById("RROW-" + id); if (row) { @@ -631,11 +636,12 @@ function toggleUnread(id, cmode) { var query = "backend.php?op=rpc&subop=catchupSelected&ids=" + param_escape(id) + "&cmode=" + param_escape(cmode); - notify_progress("Loading, please wait..."); +// notify_progress("Loading, please wait..."); - xmlhttp_rpc.open("GET", query, true); - xmlhttp_rpc.onreadystatechange=all_counters_callback; - xmlhttp_rpc.send(null); + new Ajax.Request(query, { + onComplete: function(transport) { + all_counters_callback2(transport); + } }); } @@ -647,10 +653,10 @@ function toggleUnread(id, cmode) { function selectionToggleUnread(cdm_mode, set_state, callback_func, no_error) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { +/* if (!xmlhttp_ready(xmlhttp_rpc)) { printLockingError(); return; - } + } */ var rows; @@ -705,13 +711,20 @@ function selectionToggleUnread(cdm_mode, set_state, callback_func, no_error) { var query = "backend.php?op=rpc&subop=catchupSelected&ids=" + param_escape(rows.toString()) + "&cmode=" + cmode; - _catchup_callback_func = callback_func; +// _catchup_callback_func = callback_func; + + debug(callback_func); notify_progress("Loading, please wait..."); - xmlhttp_rpc.open("GET", query, true); +/* xmlhttp_rpc.open("GET", query, true); xmlhttp_rpc.onreadystatechange=catchup_callback; - xmlhttp_rpc.send(null); + xmlhttp_rpc.send(null); */ + + new Ajax.Request(query, { + onComplete: function(transport) { + catchup_callback2(transport, callback_func); + } }); } @@ -722,10 +735,6 @@ function selectionToggleUnread(cdm_mode, set_state, callback_func, no_error) { function selectionToggleMarked(cdm_mode) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - return; - } var rows; @@ -751,15 +760,18 @@ function selectionToggleMarked(cdm_mode) { query = query + "&afid=" + getActiveFeedId(); - if (tagsAreDisplayed()) { +/* if (tagsAreDisplayed()) { query = query + "&omode=tl"; } else { query = query + "&omode=flc"; - } + } */ + + query = query + "&omode=lc"; - xmlhttp_rpc.open("GET", query, true); - xmlhttp_rpc.onreadystatechange=all_counters_callback; - xmlhttp_rpc.send(null); + new Ajax.Request(query, { + onComplete: function(transport) { + all_counters_callback2(transport); + } }); } @@ -770,10 +782,6 @@ function selectionToggleMarked(cdm_mode) { function selectionTogglePublished(cdm_mode) { try { - if (!xmlhttp_ready(xmlhttp_rpc)) { - printLockingError(); - return; - } var rows; @@ -799,15 +807,18 @@ function selectionTogglePublished(cdm_mode) { query = query + "&afid=" + getActiveFeedId(); - if (tagsAreDisplayed()) { +/* if (tagsAreDisplayed()) { query = query + "&omode=tl"; } else { query = query + "&omode=flc"; - } + } */ + + query = query + "&omode=lc"; - xmlhttp_rpc.open("GET", query, true); - xmlhttp_rpc.onreadystatechange=all_counters_callback; - xmlhttp_rpc.send(null); + new Ajax.Request(query, { + onComplete: function(transport) { + all_counters_callback2(transport); + } }); } @@ -1125,7 +1136,7 @@ function cdmWatchdog() { debug("cdmWatchdog, ids= " + ids.toString()); - if (ids.length > 0 && xmlhttp_ready(xmlhttp_rpc)) { + if (ids.length > 0) { for (var i = 0; i < ids.length; i++) { var e = document.getElementById("RROW-" + ids[i]); @@ -1137,9 +1148,10 @@ function cdmWatchdog() { var query = "backend.php?op=rpc&subop=catchupSelected&ids=" + param_escape(ids.toString()) + "&cmode=0"; - xmlhttp_rpc.open("GET", query, true); - xmlhttp_rpc.onreadystatechange=all_counters_callback; - xmlhttp_rpc.send(null); + new Ajax.Request(query, { + onComplete: function(transport) { + all_counters_callback2(transport); + } }); } -- 2.39.2