summaryrefslogtreecommitdiffstats
path: root/js/service
diff options
context:
space:
mode:
Diffstat (limited to 'js/service')
-rw-r--r--js/service/FeedResource.js45
-rw-r--r--js/service/ItemResource.js8
2 files changed, 48 insertions, 5 deletions
diff --git a/js/service/FeedResource.js b/js/service/FeedResource.js
index 548c5a27c..5880c83fd 100644
--- a/js/service/FeedResource.js
+++ b/js/service/FeedResource.js
@@ -15,6 +15,31 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => {
constructor ($http, BASE_URL) {
super($http, BASE_URL, 'url');
this.ids = {};
+ this.unreadCount = 0;
+ this.folderUnreadCount = {};
+ }
+
+
+ receive (data) {
+ super.receive(data);
+ this.updateUnreadCache();
+ }
+
+
+ updateUnreadCache () {
+ this.unreadCount = 0;
+ this.folderUnreadCount = {};
+
+ for (let value of this.values) {
+ if (value.unreadCount) {
+ this.unreadCount += value.unreadCount;
+ }
+ if (value.folderId !== undefined) {
+ this.folderUnreadCount[value.folderId] =
+ this.folderUnreadCount[value.folderId] || 0;
+ this.folderUnreadCount[value.folderId] += value.unreadCount;
+ }
+ }
}
@@ -37,29 +62,47 @@ app.factory('FeedResource', (Resource, $http, BASE_URL) => {
for (let feed of this.values) {
feed.unreadCount = 0;
}
+ this.unreadCount = 0;
+ this.folderUnreadCount = {};
}
markFeedRead (feedId) {
this.ids[feedId].unreadCount = 0;
+ this.updateUnreadCache();
+ }
+
+ markFolderRead (folderId) {
+ for (let feed of this.values) {
+ if (feed.folderId === folderId) {
+ feed.unreadCount = 0;
+ }
+ }
+ this.updateUnreadCache();
}
markItemOfFeedRead (feedId) {
this.ids[feedId].unreadCount -= 1;
+ this.updateUnreadCache();
}
markItemOfFeedUnread (feedId) {
this.ids[feedId].unreadCount += 1;
+ this.updateUnreadCache();
}
getUnreadCount () {
- return this.values.reduce((sum, feed) => sum + feed.unreadCount, 0);
+ return this.unreadCount;
}
+ getFolderUnreadCount (folderId) {
+ return this.folderUnreadCount[folderId] || 0;
+ }
+
}
return new FeedResource($http, BASE_URL);
diff --git a/js/service/ItemResource.js b/js/service/ItemResource.js
index 67a6d23e6..983b9b39a 100644
--- a/js/service/ItemResource.js
+++ b/js/service/ItemResource.js
@@ -84,7 +84,7 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => {
}
- read (itemId, isRead=true) {
+ markItemRead (itemId, isRead=true) {
this.get(itemId).unread = !isRead;
return this.http({
url: `${this.BASE_URL}/items/${itemId}/read`,
@@ -96,7 +96,7 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => {
}
- readFeed (feedId, read=true) {
+ markFeedRead (feedId, read=true) {
for (let item of this.values.filter(i => i.feedId === feedId)) {
item.unread = !read;
}
@@ -104,7 +104,7 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => {
}
- readAll () {
+ markRead () {
for (let item of this.values) {
item.unread = false;
}
@@ -124,7 +124,7 @@ app.factory('ItemResource', (Resource, $http, BASE_URL) => {
keepUnread (itemId) {
this.get(itemId).keepUnread = true;
- return this.read(itemId, false);
+ return this.markItemRead(itemId, false);
}