From 692de15991a7be43afd515e3b9fde3d0a713de3d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 20 Nov 2010 11:25:08 +0300 Subject: [PATCH] fix opening next unread feed on catchup --- FeedTree.js | 41 +++++++++++++++++++++++++++++++++++++---- feedlist.js | 9 ++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/FeedTree.js b/FeedTree.js index 19c32a95f..76b46601b 100644 --- a/FeedTree.js +++ b/FeedTree.js @@ -52,6 +52,42 @@ dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, { if (treeItem) return this.store.setValue(treeItem, key, value); }, + getNextUnreadFeed: function (feed, is_cat) { + if (is_cat) { + treeItem = this.store._itemsByIdentity['CAT:' + feed]; + items = this.store._arrayOfTopLevelItems; + } else { + treeItem = this.store._itemsByIdentity['FEED:' + feed]; + items = this.store._arrayOfAllItems; + } + + for (var i = 0; i < items.length; i++) { + if (items[i] == treeItem) { + + for (j = i+1; j < items.length; j++) { + var unread = this.store.getValue(items[j], 'unread'); + var id = this.store.getValue(items[j], 'id'); + + if (unread > 0 && (is_cat || id.match("FEED:"))) return items[j]; + } + + for (j = 0; j < i; j++) { + var unread = this.store.getValue(items[j], 'unread'); + var id = this.store.getValue(items[j], 'id'); + + if (unread > 0 && (is_cat || id.match("FEED:"))) return items[j]; + } + } + } + + return null; + }, + hasCats: function() { + if (this.store && this.store._itemsByIdentity) + return this.store._itemsByIdentity['CAT:-1'] != undefined; + else + return false; + }, }); dojo.declare("fox.FeedTree", dijit.Tree, { @@ -144,10 +180,7 @@ dojo.declare("fox.FeedTree", dijit.Tree, { return false; }, hasCats: function() { - if (this.model.store && this.model.store._itemsByIdentity) - return this.model.store._itemsByIdentity['CAT:-1'] != undefined; - else - return false; + return this.model.hasCats(); }, hideRead: function (hide, show_special) { if (this.hasCats()) { diff --git a/feedlist.js b/feedlist.js index bd1c85722..d694b9be7 100644 --- a/feedlist.js +++ b/feedlist.js @@ -115,7 +115,14 @@ function viewfeed(feed, subop, is_cat, offset) { var show_next_feed = getInitParam("on_catchup_show_next_feed") == "1"; if (show_next_feed) { - // TODO: implement show_next_feed handling + var tree = dijit.byId("feedTree"); + var nuf = tree.model.getNextUnreadFeed(feed, is_cat); + + if (nuf) { + var nuf_id = tree.model.store.getValue(nuf, 'bare_id'); + + query = query + "&nuf=" + param_escape(nuf_id); + } } }