Browse Source

Skip nested Feed when calling getNextUnreadFeed()

This function is only called when using "Mark all as read".
So every time, this function gets called right now, all nested
categories get marked as read as well, so we don't want to jump to them.
Instead we want to the next category with same or higher tier.
André Glüpker 10 years ago
parent
commit
d922b09c43
2 changed files with 9 additions and 4 deletions
  1. 1 0
      classes/pref/feeds.php
  2. 8 4
      js/FeedTree.js

+ 1 - 0
classes/pref/feeds.php

@@ -55,6 +55,7 @@ class Pref_Feeds extends Handler_Protected {
 			$cat['unread'] = 0;
 			$cat['child_unread'] = 0;
 			$cat['auxcounter'] = 0;
+			$cat['parent_id'] = $cat_id;
 
 			$cat['items'] = $this->get_category_items($line['id']);
 

+ 8 - 4
js/FeedTree.js

@@ -58,12 +58,12 @@ dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, {
 
 		if (is_cat) {
 			treeItem = this.store._itemsByIdentity['CAT:' + feed];
-			items = this.store._arrayOfTopLevelItems;
 		} else {
 			treeItem = this.store._itemsByIdentity['FEED:' + feed];
-			items = this.store._arrayOfAllItems;
 		}
 
+		items = this.store._arrayOfAllItems;
+
 		for (var i = 0; i < items.length; i++) {
 			if (items[i] == treeItem) {
 
@@ -71,14 +71,18 @@ dojo.declare("fox.FeedStoreModel", dijit.tree.ForestStoreModel, {
 					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];
+					if (unread > 0 && ((is_cat && id.match("CAT:")) || (!is_cat && id.match("FEED:")))) {
+						if( !is_cat || ! (this.store.hasAttribute(items[j], 'parent_id') && this.store.getValue(items[j], 'parent_id') == feed) ) return items[j];
+					}
 				}
 
 				for (var 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];
+					if (unread > 0 && ((is_cat && id.match("CAT:")) || (!is_cat && id.match("FEED:")))) {
+						if( !is_cat || ! (this.store.hasAttribute(items[j], 'parent_id') && this.store.getValue(items[j], 'parent_id') == feed) ) return items[j];
+					}
 				}
 			}
 		}