]> git.wh0rd.org - tt-rss.git/blobdiff - js/feedlist.js
scroll handler: performance improvements
[tt-rss.git] / js / feedlist.js
index 10be5126b12a4308f076ebda56f6c1380049ec3e..78a125998aba70cb4b907989866cd7e3bcf650e6 100644 (file)
@@ -61,21 +61,14 @@ function cleanup_memory(root) {
 
 function viewfeed(params) {
        const feed = params.feed;
-       let is_cat = params.is_cat;
-       let offset = params.offset;
-       let background = params.background;
-       let infscroll_req = params.infscroll_req;
+       let is_cat = !!params.is_cat || false;
+       let offset = params.offset || 0;
+       let background = params.background || false;
+       let infscroll_req = params.infscroll_req || false;
        const can_wait = params.can_wait;
        const viewfeed_debug = params.viewfeed_debug;
        const method = params.method;
 
-       if (is_cat == undefined)
-               is_cat = false;
-       else
-               is_cat = !!is_cat;
-
-       if (offset == undefined) offset = 0;
-       if (background == undefined) background = false;
        if (infscroll_req == undefined) infscroll_req = false;
 
        last_requested_article = 0;
@@ -109,34 +102,31 @@ function viewfeed(params) {
 
        Form.enable("main_toolbar_form");
 
-       const toolbar_query = Form.serialize("main_toolbar_form");
-
-       let query = "?op=feeds&method=view&feed=" + param_escape(feed) + "&" +
-               toolbar_query;
+       let query = Object.assign({op: "feeds", method: "view", feed: feed},
+        dojo.formToObject("main_toolbar_form"));
 
-       if (method) query += "&m=" + param_escape(method);
+       if (method) query.m = method;
 
        if (offset > 0) {
                if (current_first_id) {
-                       query = query + "&fid=" + param_escape(current_first_id);
+                       query.fid = current_first_id;
                }
        }
 
        if (!background) {
                if (_search_query) {
-                       query = query + "&" + _search_query;
-                       //_search_query = false;
+                       query = Object.assign(query, _search_query);
                }
 
                if (offset != 0) {
-                       query = query + "&skip=" + offset;
+                       query.skip = offset;
 
                        // to prevent duplicate feed titles when showing grouped vfeeds
                        if (vgroup_last_feed) {
-                               query = query + "&vgrlf=" + param_escape(vgroup_last_feed);
+                               query.vgrlf = vgroup_last_feed;
                        }
                } else if (!is_cat && feed == getActiveFeedId() && !params.method) {
-                               query = query + "&m=ForceUpdate";
+                               query.m = "ForceUpdate";
                        }
 
                Form.enable("main_toolbar_form");
@@ -146,9 +136,7 @@ function viewfeed(params) {
                                notify_progress("Loading, please wait...", true);
        }
 
-       query += "&cat=" + is_cat;
-
-       console.log(query);
+       query.cat = is_cat;
 
        if (can_wait && _viewfeed_timeout) {
                setFeedExpandoIcon(getActiveFeedId(), activeFeedIsCat(), 'images/blank_icon.gif');
@@ -158,23 +146,25 @@ function viewfeed(params) {
        setActiveFeedId(feed, is_cat);
 
        if (viewfeed_debug) {
-               window.open("backend.php" + query + "&debug=1&csrf_token=" + getInitParam("csrf_token"));
+               window.open("backend.php?" +
+                       dojo.objectToQuery(
+                               Object.assign({debug: 1, csrf_token: getInitParam("csrf_token")}, query)
+                       ));
        }
 
        const timeout_ms = can_wait ? 250 : 0;
-       _viewfeed_timeout = setTimeout(function() {
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               try {
-                                       setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif');
-                                       headlines_callback2(transport, offset, background, infscroll_req);
-                                       PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]);
-                               } catch (e) {
-                                       exception_error(e);
-                               }
-                       } });
+       _viewfeed_timeout = setTimeout(() => {
+
+               xhrPost("backend.php", query, (transport) => {
+            try {
+                setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif');
+                headlines_callback2(transport, offset, background, infscroll_req);
+                PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]);
+            } catch (e) {
+                exception_error(e);
+            }
+               });
+
        }, timeout_ms); // Wait 250ms
 
 }
@@ -185,7 +175,8 @@ function feedlist_init() {
        loading_set_progress(50);
 
        document.onkeydown = hotkey_handler;
-       setTimeout(hotkey_prefix_timeout, 5*1000);
+       setInterval(hotkey_prefix_timeout, 5*1000);
+       setInterval(catchupBatchedArticles, 3*1000);
 
        if (!getActiveFeedId()) {
                viewfeed({feed: -3});
@@ -235,18 +226,14 @@ function request_counters(force) {
 
                counters_last_request = timestamp;
 
-               let query = "?op=rpc&method=getAllCounters&seq=" + next_seq();
+               let query = {op: "rpc", method: "getAllCounters", seq: next_seq()};
 
                if (!force)
-                       query = query + "&last_article_id=" + getInitParam("last_article_id");
-
-               console.log(query);
+                       query.last_article_id = getInitParam("last_article_id");
 
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               handle_rpc_json(transport);
-                       } });
+               xhrPost("backend.php", query, (transport) => {
+            handle_rpc_json(transport);
+               });
 
        } else {
                console.log("request_counters: rate limit reached: " + (timestamp - counters_last_request));
@@ -481,21 +468,11 @@ function catchupFeedInGroup(id) {
                        updateFloatingTitle(true);
                }
 
-               const catchup_query = "?op=rpc&method=catchupFeed&feed_id=" +
-                               id + "&is_cat=false";
-
-               console.log(catchup_query);
-
                notify_progress("Loading, please wait...", true);
 
-               new Ajax.Request("backend.php", {
-                       parameters: catchup_query,
-                       onComplete: function (transport) {
-                               handle_rpc_json(transport);
-                       }
-               } );
-
-               //return viewCurrentFeed('MarkAllReadGR:' + id);
+               xhrPost("backend.php", { op: "rpc", method: "catchupFeed", feed_id: id, is_cat: false}, (transport) => {
+            handle_rpc_json(transport);
+               });
        }
 }
 
@@ -532,30 +509,25 @@ function catchupFeed(feed, is_cat, mode) {
                is_cat: is_cat, mode: mode, search_query: last_search_query[0],
                search_lang: last_search_query[1]};
 
-       console.log(catchup_query);
-
        notify_progress("Loading, please wait...", true);
 
-       new Ajax.Request("backend.php", {
-               parameters: catchup_query,
-               onComplete: function(transport) {
-                               handle_rpc_json(transport);
+       xhrPost("backend.php", catchup_query, (transport) => {
+        handle_rpc_json(transport);
 
-                               const show_next_feed = getInitParam("on_catchup_show_next_feed") == "1";
+        const show_next_feed = getInitParam("on_catchup_show_next_feed") == "1";
 
-                               if (show_next_feed) {
-                                       const nuf = getNextUnreadFeed(feed, is_cat);
+        if (show_next_feed) {
+            const nuf = getNextUnreadFeed(feed, is_cat);
 
-                                       if (nuf) {
-                                               viewfeed({feed: nuf, is_cat: is_cat});
-                                       }
-                               } else if (feed == getActiveFeedId() && is_cat == activeFeedIsCat()) {
-                                               viewCurrentFeed();
-                                       }
-
-                               notify("");
-                       } });
+            if (nuf) {
+                viewfeed({feed: nuf, is_cat: is_cat});
+            }
+        } else if (feed == getActiveFeedId() && is_cat == activeFeedIsCat()) {
+            viewCurrentFeed();
+        }
 
+        notify("");
+       });
 }
 
 function decrementFeedCounter(feed, is_cat) {