var init_params = {};
var ver_offset = 0;
var hor_offset = 0;
-var feeds_sort_by_unread = false;
-var feedlist_sortable_enabled = false;
var _force_scheduled_update = false;
var last_scheduled_update = false;
+var _rpc_seq = 0;
+
+function next_seq() {
+ _rpc_seq += 1;
+ return _rpc_seq;
+}
+
+function get_seq() {
+ return _rpc_seq;
+}
+
function activeFeedIsCat() {
return _active_feed_is_cat;
}
window.clearTimeout(counter_timeout_id);
- var query_str = "?op=rpc&subop=getAllCounters";
+ var query_str = "?op=rpc&subop=getAllCounters&seq=" + next_seq();
var omode;
new Ajax.Request("backend.php", {
parameters: query_str,
onComplete: function(transport) {
- handle_rpc_reply(transport, true);
+ handle_rpc_reply(transport, !_force_scheduled_update);
+ _force_scheduled_update = false;
} });
last_scheduled_update = ts;
- _force_scheduled_update = false;
}
} catch (e) {
var shift_key = false;
var cmdline = $('cmdline');
- var feedlist = $('feedList');
try {
shift_key = e.shiftKey;
}
if (keycode == 68 && shift_key) { // shift-D
- if (isCdmMode()) {
- //cdmDismissArticle(active_post_id);
- cdmDismissSelectedArticles();
- }
+ dismissSelectedArticles();
+ }
+
+ if (keycode == 88 && shift_key) { // shift-X
+ dismissReadArticles();
}
if (keycode == 78 || keycode == 40) { // n, down
return resort_feedlist();
}
- if (keycode == 72) { // h
- hideReadHeadlines();
- return;
- }
-
if (keycode == 88) { // x
reverseHeadlineOrder();
return;
}
}
-function feedsSortByUnread() {
- return feeds_sort_by_unread;
-}
-
function inPreferences() {
return false;
}
displayDlg('feedUpdateErrors');
}
+function handle_rpc_reply(transport, scheduled_call) {
+ try {
+ if (offline_mode) return false;
+
+ if (!transport.responseText && db) {
+ offlineConfirmModeChange();
+ return false;
+ }
+
+ if (transport.responseXML) {
+
+ if (!transport_error_check(transport)) return false;
+
+ var seq = transport.responseXML.getElementsByTagName("seq")[0];
+
+ if (seq) {
+ seq = seq.firstChild.nodeValue;
+
+ if (get_seq() != seq) {
+ //console.log("[handle_rpc_reply] sequence mismatch: " + seq);
+ return true;
+ }
+ }
+
+ var message = transport.responseXML.getElementsByTagName("message")[0];
+
+ if (message) {
+ message = message.firstChild.nodeValue;
+
+ if (message == "UPDATE_COUNTERS") {
+ console.log("need to refresh counters...");
+ setInitParam("last_article_id", -1);
+ _force_scheduled_update = true;
+ }
+ }
+
+ var counters = transport.responseXML.getElementsByTagName("counters")[0];
+
+ if (counters)
+ parse_counters(counters, scheduled_call);
+
+ var runtime_info = transport.responseXML.getElementsByTagName("runtime-info")[0];
+
+ if (runtime_info)
+ parse_runtime_info(runtime_info);
+
+ if (feedsSortByUnread())
+ resort_feedlist();
+
+ hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
+
+ } else {
+ notify_error("Error communicating with server.");
+ }
+
+ } catch (e) {
+ exception_error("handle_rpc_reply", e, transport);
+ }
+
+ return true;
+}
+