summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--js/build/app.js81
-rw-r--r--js/controller/NavigationController.js14
-rw-r--r--js/service/FeedResource.js45
-rw-r--r--js/service/ItemResource.js8
-rw-r--r--js/tests/unit/controller/NavigationControllerSpec.js36
-rw-r--r--js/tests/unit/service/FeedResourceSpec.js44
-rw-r--r--js/tests/unit/service/ItemResourceSpec.js6
7 files changed, 209 insertions, 25 deletions
diff --git a/js/build/app.js b/js/build/app.js
index cdee3ea75..40e1a4bb6 100644
--- a/js/build/app.js
+++ b/js/build/app.js
@@ -192,10 +192,21 @@ var $__build_47_app__ = function () {
};
}
]);
- app.controller('NavigationController', function () {
- 'use strict';
- console.log('here');
- });
+ app.controller('NavigationController', [
+ 'FeedResource',
+ 'FolderResource',
+ 'ItemResource',
+ function (FeedResource, FolderResource, ItemResource) {
+ 'use strict';
+ this.getFeeds = function () {
+ return FeedResource.getAll();
+ };
+ this.getFolders = function () {
+ return FolderResource.getAll();
+ };
+ console.log(ItemResource);
+ }
+ ]);
app.controller('SettingsController', [
'$route',
'SettingsResource',
@@ -245,9 +256,36 @@ var $__build_47_app__ = function () {
'url'
]);
this.ids = {};
+ this.unreadCount = 0;
+ this.folderUnreadCount = {};
};
var $FeedResource = FeedResource;
$traceurRuntime.createClass(FeedResource, {
+ receive: function (data) {
+ $traceurRuntime.superCall(this, $FeedResource.prototype, 'receive', [data]);
+ this.updateUnreadCache();
+ },
+ updateUnreadCache: function () {
+ var $__14, $__15, $__16, $__17, $__18;
+ this.unreadCount = 0;
+ this.folderUnreadCount = {};
+ for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) {
+ try {
+ throw undefined;
+ } catch (value) {
+ value = $__4.value;
+ {
+ if (value.unreadCount) {
+ this.unreadCount += value.unreadCount;
+ }
+ if (value.folderId !== undefined) {
+ $traceurRuntime.setProperty(this.folderUnreadCount, value.folderId, this.folderUnreadCount[$traceurRuntime.toProperty(value.folderId)] || 0);
+ $__14 = this.folderUnreadCount, $__15 = value.folderId, $__16 = value.unreadCount, $__17 = $__14[$traceurRuntime.toProperty($__15)], $__18 = $__17 + $__16, $traceurRuntime.setProperty($__14, $__15, $__18), $__18;
+ }
+ }
+ }
+ }
+ },
add: function (value) {
$traceurRuntime.superCall(this, $FeedResource.prototype, 'add', [value]);
if (value.id !== undefined) {
@@ -270,20 +308,41 @@ var $__build_47_app__ = function () {
}
}
}
+ this.unreadCount = 0;
+ this.folderUnreadCount = {};
},
markFeedRead: function (feedId) {
this.ids[$traceurRuntime.toProperty(feedId)].unreadCount = 0;
+ this.updateUnreadCache();
+ },
+ markFolderRead: function (folderId) {
+ for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) {
+ try {
+ throw undefined;
+ } catch (feed) {
+ feed = $__4.value;
+ {
+ if (feed.folderId === folderId) {
+ feed.unreadCount = 0;
+ }
+ }
+ }
+ }
+ this.updateUnreadCache();
},
markItemOfFeedRead: function (feedId) {
this.ids[$traceurRuntime.toProperty(feedId)].unreadCount -= 1;
+ this.updateUnreadCache();
},
markItemOfFeedUnread: function (feedId) {
this.ids[$traceurRuntime.toProperty(feedId)].unreadCount += 1;
+ this.updateUnreadCache();
},
getUnreadCount: function () {
- return this.values.reduce(function (sum, feed) {
- return sum + feed.unreadCount;
- }, 0);
+ return this.unreadCount;
+ },
+ getFolderUnreadCount: function (folderId) {
+ return this.folderUnreadCount[$traceurRuntime.toProperty(folderId)] || 0;
}
}, {}, Resource);
return new FeedResource($http, BASE_URL);
@@ -371,7 +430,7 @@ var $__build_47_app__ = function () {
data: { isStarred: isStarred }
});
},
- read: function (itemId) {
+ markItemRead: function (itemId) {
var isRead = arguments[1] !== void 0 ? arguments[1] : true;
this.get(itemId).unread = !isRead;
return this.http({
@@ -380,7 +439,7 @@ var $__build_47_app__ = function () {
data: { isRead: isRead }
});
},
- readFeed: function (feedId) {
+ markFeedRead: function (feedId) {
var read = arguments[1] !== void 0 ? arguments[1] : true;
for (var $__3 = this.values.filter(function (i) {
return i.feedId === feedId;
@@ -396,7 +455,7 @@ var $__build_47_app__ = function () {
}
return this.http.post(this.BASE_URL + '/feeds/' + feedId + '/read');
},
- readAll: function () {
+ markRead: function () {
for (var $__3 = this.values[$traceurRuntime.toProperty(Symbol.iterator)](), $__4; !($__4 = $__3.next()).done;) {
try {
throw undefined;
@@ -417,7 +476,7 @@ var $__build_47_app__ = function () {
},
keepUnread: function (itemId) {
this.get(itemId).keepUnread = true;
- return this.read(itemId, false);
+ return this.markItemRead(itemId, false);
},
clear: function () {
this.highestId = 0;
diff --git a/js/controller/NavigationController.js b/js/controller/NavigationController.js
index 700e6bd02..bc0c13d13 100644
--- a/js/controller/NavigationController.js
+++ b/js/controller/NavigationController.js
@@ -7,8 +7,18 @@
* @author Bernhard Posselt <dev@bernhard-posselt.com>
* @copyright Bernhard Posselt 2014
*/
-app.controller('NavigationController', function () {
+app.controller('NavigationController',
+function (FeedResource, FolderResource, ItemResource) {
'use strict';
- console.log('here');
+ this.getFeeds = () => {
+ return FeedResource.getAll();
+ };
+
+ this.getFolders = () => {
+ return FolderResource.getAll();
+ };
+
+ console.log(ItemResource);
+
}); \ No newline at end of file
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);
}
diff --git a/js/tests/unit/controller/NavigationControllerSpec.js b/js/tests/unit/controller/NavigationControllerSpec.js
new file mode 100644
index 000000000..a8d3a0f76
--- /dev/null
+++ b/js/tests/unit/controller/NavigationControllerSpec.js
@@ -0,0 +1,36 @@
+/**
+ * ownCloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright Bernhard Posselt 2014
+ */
+describe('NavigationController', () => {
+ 'use strict';
+
+ let controller;
+
+ beforeEach(module('News', ($provide) => {
+ $provide.value('BASE_URL', 'base');
+ }));
+
+ beforeEach(inject(($controller) => {
+ controller = $controller('NavigationController');
+ }));
+
+
+ it('should expose Feeds', inject((FeedResource) => {
+ FeedResource.add({url: 1});
+ expect(controller.getFeeds()).toBe(FeedResource.getAll());
+ }));
+
+
+ it('should expose Folders', inject((FolderResource) => {
+ FolderResource.add({name: 1});
+ expect(controller.getFolders()).toBe(FolderResource.getAll());
+ }));
+
+
+}); \ No newline at end of file
diff --git a/js/tests/unit/service/FeedResourceSpec.js b/js/tests/unit/service/FeedResourceSpec.js
index 8b941d99d..a12536a9f 100644
--- a/js/tests/unit/service/FeedResourceSpec.js
+++ b/js/tests/unit/service/FeedResourceSpec.js
@@ -7,7 +7,7 @@
* @author Bernhard Posselt <dev@bernhard-posselt.com>
* @copyright Bernhard Posselt 2014
*/
-describe('ItemResource', () => {
+describe('FeedResource', () => {
'use strict';
let resource;
@@ -19,9 +19,11 @@ describe('ItemResource', () => {
beforeEach(inject((FeedResource) => {
resource = FeedResource;
- FeedResource.add({id: 1, url: 'ye', unreadCount: 45});
- FeedResource.add({id: 2, url: 'sye', unreadCount: 25});
- FeedResource.add({id: 3, url: '1sye', unreadCount: 0});
+ FeedResource.receive([
+ {id: 1, folderId: 3, url: 'ye', unreadCount: 45},
+ {id: 2, folderId: 4, url: 'sye', unreadCount: 25},
+ {id: 3, folderId: 3, url: '1sye', unreadCount: 0}
+ ]);
}));
it('should mark all read', inject((FeedResource) => {
@@ -52,4 +54,38 @@ describe('ItemResource', () => {
expect(FeedResource.get('ye').unreadCount).toBe(46);
}));
+
+
+ it('should cache unreadcount', inject((FeedResource) => {
+ expect(FeedResource.getUnreadCount()).toBe(70);
+
+ FeedResource.markItemOfFeedRead(3);
+ expect(FeedResource.getUnreadCount()).toBe(69);
+
+ FeedResource.markItemOfFeedUnread(3);
+ expect(FeedResource.getUnreadCount()).toBe(70);
+
+ FeedResource.markFolderRead(3);
+ expect(FeedResource.getUnreadCount()).toBe(25);
+
+ FeedResource.markRead();
+ expect(FeedResource.getUnreadCount()).toBe(0);
+ }));
+
+
+ it('should cache folder unreadcount', inject((FeedResource) => {
+ expect(FeedResource.getFolderUnreadCount(3)).toBe(45);
+
+ FeedResource.markItemOfFeedRead(3);
+ expect(FeedResource.getFolderUnreadCount(3)).toBe(44);
+
+ FeedResource.markItemOfFeedUnread(3);
+ expect(FeedResource.getFolderUnreadCount(3)).toBe(45);
+
+ FeedResource.markFolderRead(3);
+ expect(FeedResource.getFolderUnreadCount(3)).toBe(0);
+
+ FeedResource.markRead();
+ expect(FeedResource.getFolderUnreadCount(4)).toBe(0);
+ }));
});
diff --git a/js/tests/unit/service/ItemResourceSpec.js b/js/tests/unit/service/ItemResourceSpec.js
index bfdaf4b4a..4f2a572a9 100644
--- a/js/tests/unit/service/ItemResourceSpec.js
+++ b/js/tests/unit/service/ItemResourceSpec.js
@@ -76,7 +76,7 @@ describe('ItemResource', () => {
}
], 'items');
- ItemResource.read(3);
+ ItemResource.markItemRead(3);
http.flush();
@@ -132,7 +132,7 @@ describe('ItemResource', () => {
}
], 'items');
- ItemResource.readFeed(4);
+ ItemResource.markFeedRead(4);
http.flush();
@@ -162,7 +162,7 @@ describe('ItemResource', () => {
}
], 'items');
- ItemResource.readAll(4);
+ ItemResource.markRead();
http.flush();