]> git.wh0rd.org - tt-rss.git/blobdiff - js/feedlist.js
Merge pull request #28 from Menti/master
[tt-rss.git] / js / feedlist.js
index 21fe9c50c8e5214bee252be2791e9b46bc0ce879..9104a460865734f1b1c70e5d1d4c9aabb85b6beb 100644 (file)
@@ -1,6 +1,7 @@
 var _infscroll_disable = 0;
 var _infscroll_request_sent = 0;
 var _search_query = false;
+var _viewfeed_last = 0;
 
 var counter_timeout_id = false;
 
@@ -18,8 +19,9 @@ function loadMoreHeadlines() {
                var offset = 0;
 
                var view_mode = document.forms["main_toolbar_form"].view_mode.value;
-               var num_unread = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length;
+               var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length;
                var num_all = $$("#headlines-frame > div[id*=RROW]").length;
+               var num_unread = getFeedUnread(getActiveFeedId(), activeFeedIsCat());
 
                // TODO implement marked & published
 
@@ -30,16 +32,20 @@ function loadMoreHeadlines() {
                        console.warn("loadMoreHeadlines: published is not implemented, falling back.");
                        offset = num_all;
                } else if (view_mode == "unread") {
-                       offset = num_unread;
+                       offset = unread_in_buffer;
+               } else if (_search_query) {
+                       offset = num_all;
                } else if (view_mode == "adaptive") {
                        if (num_unread > 0)
-                               offset = num_unread;
+                               offset = unread_in_buffer;
                        else
                                offset = num_all;
                } else {
                        offset = num_all;
                }
 
+               console.log("offset: " + offset);
+
                viewfeed(getActiveFeedId(), '', activeFeedIsCat(), offset, false, true);
 
        } catch (e) {
@@ -64,11 +70,13 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
 
                var cached_headlines = false;
 
-               if (feed == getActiveFeedId()) {
+               if (feed == getActiveFeedId() && activeFeedIsCat() == is_cat) {
                        cache_delete("feed:" + feed + ":" + is_cat);
                } else {
                        cached_headlines = cache_get("feed:" + feed + ":" + is_cat);
 
+                       if (!background && _search_query) _search_query = false;
+
                        // switching to a different feed, we might as well catchup stuff visible
                        // in headlines buffer (if any)
                        // disabled for now because this behavior is considered confusing -fox
@@ -106,6 +114,8 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
                                dijit.byId("content-tabs").getChildren()[0]);
 
                if (!background) {
+                       _viewfeed_last = get_timestamp();
+
                        if (getActiveFeedId() != feed || offset == 0) {
                                active_post_id = 0;
                                _infscroll_disable = 0;
@@ -121,8 +131,7 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
                        }
 
                        if (offset != 0 && !method) {
-                               var date = new Date();
-                               var timestamp = Math.round(date.getTime() / 1000);
+                               var timestamp = get_timestamp();
 
                                if (_infscroll_request_sent && _infscroll_request_sent + 30 > timestamp) {
                                        //console.log("infscroll request in progress, aborting");
@@ -140,13 +149,17 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
                var toolbar_query = Form.serialize("main_toolbar_form");
 
                var query = "?op=feeds&method=view&feed=" + feed + "&" +
-                       toolbar_query + "&m=" + param_escape(method);
+                       toolbar_query;
+
+               if (method) {
+                       query = query + "&m=" + param_escape(method);
+               }
 
                if (!background) {
                        if (_search_query) {
                                force_nocache = true;
                                query = query + "&" + _search_query;
-                               _search_query = false;
+                               //_search_query = false;
                        }
 
                        if (offset != 0) {
@@ -156,6 +169,10 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
                                if (vgroup_last_feed) {
                                        query = query + "&vgrlf=" + param_escape(vgroup_last_feed);
                                }
+                       } else {
+                               if (!method && !is_cat && feed == getActiveFeedId()) {
+                                       query = query + "&m=ForceUpdate";
+                               }
                        }
 
                        Form.enable("main_toolbar_form");
@@ -203,7 +220,7 @@ function feedlist_init() {
                hideOrShowFeeds(getInitParam("hide_read_feeds") == 1);
 
                setTimeout("timeout()", 5000);
-               setTimeout("precache_headlines_idle()", 3000);
+               setTimeout("precache_headlines_idle()", 15000);
 
        } catch (e) {
                exception_error("feedlist/init", e);
@@ -238,7 +255,7 @@ function request_counters() {
 
        try {
 
-               if (getInitParam("bw_limit") == "1") return;
+               //if (getInitParam("bw_limit") == "1") return;
 
                var date = new Date();
                var timestamp = Math.round(date.getTime() / 1000);
@@ -305,8 +322,11 @@ function parse_counters(elems, scheduled_call) {
                                displayNewContentPrompt(id);
                        }
 
-                       if (getFeedUnread(id, (kind == "cat")) != ctr)
+                       if (getFeedUnread(id, (kind == "cat")) != ctr ||
+                                       (kind == "cat")) {
+
                                cache_delete("feed:" + id + ":" + (kind == "cat"));
+                       }
 
                        setFeedUnread(id, (kind == "cat"), ctr);
 
@@ -562,6 +582,8 @@ function decrementFeedCounter(feed, is_cat) {
                        }
                }
 
+               cache_delete("feed:" + feed + ":" + is_cat);
+
        } catch (e) {
                exception_error("decrement_feed_counter", e);
        }