]> git.wh0rd.org - tt-rss.git/blobdiff - tt-rss.js
js: misc fixes, code cleanup
[tt-rss.git] / tt-rss.js
index 917196ba9c445a6ca910b6b96c803610c9abce68..abd0f673e70e72de4964d97ead7eabfe2b4beb72 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -10,11 +10,20 @@ var hotkey_prefix_pressed = false;
 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;
 }
@@ -167,7 +176,7 @@ function timeout() {
 
                        window.clearTimeout(counter_timeout_id);
                
-                       var query_str = "?op=rpc&subop=getAllCounters";
+                       var query_str = "?op=rpc&subop=getAllCounters&seq=" + next_seq();
                
                        var omode;
                
@@ -192,11 +201,11 @@ function timeout() {
                        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) {
@@ -820,7 +829,6 @@ function hotkey_handler(e) {
                var shift_key = false;
 
                var cmdline = $('cmdline');
-               var feedlist = $('feedList');
 
                try {
                        shift_key = e.shiftKey;
@@ -953,10 +961,11 @@ function hotkey_handler(e) {
                        }
 
                        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
@@ -1106,11 +1115,6 @@ function hotkey_handler(e) {
                                return resort_feedlist();
                        }
 
-                       if (keycode == 72) { // h
-                               hideReadHeadlines();
-                               return;
-                       }
-
                        if (keycode == 88) { // x
                                reverseHeadlineOrder();
                                return;
@@ -1221,10 +1225,6 @@ function hotkey_handler(e) {
        }
 }
 
-function feedsSortByUnread() {
-       return feeds_sort_by_unread;
-}
-
 function inPreferences() {
        return false;
 }
@@ -1249,3 +1249,65 @@ function showFeedsWithErrors() {
        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;
+}
+