summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-03-25 21:50:49 +0100
committerBernhard Posselt <nukeawhale@gmail.com>2013-03-25 21:50:49 +0100
commit0430a6ca38545463d7eea070204d77bddb447437 (patch)
tree8a0b9dcbc54aab0b327f7b794d2d74861c26d019
parent7ade1165ddd0aa2d650ea28ae2f38a412375f9cc (diff)
added more feedcontroller methods
-rw-r--r--js/app/controllers/feedcontroller.coffee24
-rw-r--r--js/app/services/models/itemmodel.coffee10
-rw-r--r--js/public/app.js54
-rw-r--r--js/tests/controllers/feedcontrollerSpec.coffee58
4 files changed, 143 insertions, 3 deletions
diff --git a/js/app/controllers/feedcontroller.coffee b/js/app/controllers/feedcontroller.coffee
index ddd35d2f8..2feec2a1c 100644
--- a/js/app/controllers/feedcontroller.coffee
+++ b/js/app/controllers/feedcontroller.coffee
@@ -81,6 +81,7 @@ angular.module('News').factory '_FeedController', ->
getUnreadCount: (type, id) ->
+ # TODO: use polymorphism instead of switches
switch type
when @_feedType.Subscriptions
count = @_feedModel.getUnreadCount()
@@ -98,6 +99,7 @@ angular.module('News').factory '_FeedController', ->
loadFeed: (type, id) ->
+ # TODO: use polymorphism instead of switches
if type != @_active.getType() or id != @_active.getId()
@_itemModel.clear()
@_persistence.getItems(type, id, 0)
@@ -112,9 +114,31 @@ angular.module('News').factory '_FeedController', ->
delete: (type, id) ->
+ # TODO: use polymorphism instead of switches
+ switch type
+ when @_feedType.Feed
+ count = @_feedModel.removeById(id)
+ @_persistence.deleteFeed(id)
+ when @_feedType.Folder
+ count = @_folderModel.removeById(id)
+ @_persistence.deleteFolder(id)
markAllRead: (type, id) ->
+ # TODO: use polymorphism instead of switches
+ switch type
+ when @_feedType.Subscriptions
+ for feed in @_feedModel.getAll()
+ @markAllRead(@_feedType.Feed, feed.id)
+ when @_feedType.Feed
+ feed = @_feedModel.getById(id)
+ if angular.isDefined(feed)
+ feed.unreadCount = 0
+ highestItemId = @_itemModel.getHighestId()
+ @_persistence.setFeedRead(id, highestItemId)
+ when @_feedType.Folder
+ for feed in @_feedModel.getAllOfFolder(id)
+ @markAllRead(@_feedType.Feed, feed.id)
getFeedsOfFolder: (folderId) ->
diff --git a/js/app/services/models/itemmodel.coffee b/js/app/services/models/itemmodel.coffee
index a2191fdbf..890f18964 100644
--- a/js/app/services/models/itemmodel.coffee
+++ b/js/app/services/models/itemmodel.coffee
@@ -37,5 +37,15 @@ angular.module('News').factory '_ItemModel',
return null
+ getHighestId: ->
+ query = new _MaximumQuery('id')
+ highestId = @get(query)
+
+ if angular.isDefined(highestId)
+ return highestId.id
+ else
+ return 0
+
+
return ItemModel
] \ No newline at end of file
diff --git a/js/public/app.js b/js/public/app.js
index 51f6dcad8..d8303f06f 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -242,9 +242,48 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
return this._feedModel.getAllOfFolder(folderId).length;
};
- FeedController.prototype["delete"] = function(type, id) {};
+ FeedController.prototype["delete"] = function(type, id) {
+ var count;
+ switch (type) {
+ case this._feedType.Feed:
+ count = this._feedModel.removeById(id);
+ return this._persistence.deleteFeed(id);
+ case this._feedType.Folder:
+ count = this._folderModel.removeById(id);
+ return this._persistence.deleteFolder(id);
+ }
+ };
- FeedController.prototype.markAllRead = function(type, id) {};
+ FeedController.prototype.markAllRead = function(type, id) {
+ var feed, highestItemId, _i, _j, _len, _len1, _ref, _ref1, _results, _results1;
+ switch (type) {
+ case this._feedType.Subscriptions:
+ _ref = this._feedModel.getAll();
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ feed = _ref[_i];
+ _results.push(this.markAllRead(this._feedType.Feed, feed.id));
+ }
+ return _results;
+ break;
+ case this._feedType.Feed:
+ feed = this._feedModel.getById(id);
+ if (angular.isDefined(feed)) {
+ feed.unreadCount = 0;
+ highestItemId = this._itemModel.getHighestId();
+ return this._persistence.setFeedRead(id, highestItemId);
+ }
+ break;
+ case this._feedType.Folder:
+ _ref1 = this._feedModel.getAllOfFolder(id);
+ _results1 = [];
+ for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
+ feed = _ref1[_j];
+ _results1.push(this.markAllRead(this._feedType.Feed, feed.id));
+ }
+ return _results1;
+ }
+ };
FeedController.prototype.getFeedsOfFolder = function(folderId) {
return this._feedModel.getAllOfFolder(folderId);
@@ -648,6 +687,17 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
}
};
+ ItemModel.prototype.getHighestId = function() {
+ var highestId, query;
+ query = new _MaximumQuery('id');
+ highestId = this.get(query);
+ if (angular.isDefined(highestId)) {
+ return highestId.id;
+ } else {
+ return 0;
+ }
+ };
+
return ItemModel;
})(_Model);
diff --git a/js/tests/controllers/feedcontrollerSpec.coffee b/js/tests/controllers/feedcontrollerSpec.coffee
index f338dcf75..2b5d1f54c 100644
--- a/js/tests/controllers/feedcontrollerSpec.coffee
+++ b/js/tests/controllers/feedcontrollerSpec.coffee
@@ -207,4 +207,60 @@ describe '_FeedController', ->
expect(@scope.hasFeeds(3)).toBeFalsy()
@FeedModel.add({id: 2, unreadCount:35, folderId: 3})
- expect(@scope.hasFeeds(3)).toBeTruthy() \ No newline at end of file
+ expect(@scope.hasFeeds(3)).toBeTruthy()
+
+
+ it 'should delete feeds', =>
+ @FeedModel.removeById = jasmine.createSpy('remove')
+ @persistence.deleteFeed = jasmine.createSpy('deletequery')
+ @scope.delete(@FeedType.Feed, 3)
+
+ expect(@FeedModel.removeById).toHaveBeenCalledWith(3)
+ expect(@persistence.deleteFeed).toHaveBeenCalledWith(3)
+
+
+ it 'should delete folders', =>
+ @FolderModel.removeById = jasmine.createSpy('remove')
+ @persistence.deleteFolder = jasmine.createSpy('deletequery')
+ @scope.delete(@FeedType.Folder, 3)
+
+ expect(@FolderModel.removeById).toHaveBeenCalledWith(3)
+ expect(@persistence.deleteFolder).toHaveBeenCalledWith(3)
+
+
+ it 'should mark feed as read', =>
+ @persistence.setFeedRead = jasmine.createSpy('setFeedRead')
+ @FeedModel.add({id: 5, unreadCount:2, folderId: 2})
+ @ItemModel.add({id: 6})
+ @ItemModel.add({id: 3})
+ @ItemModel.add({id: 2})
+ @scope.markAllRead(@FeedType.Feed, 5)
+
+ expect(@persistence.setFeedRead).toHaveBeenCalledWith(5, 6)
+ expect(@FeedModel.getById(5).unreadCount).toBe(0)
+
+
+ it 'should mark folder as read', =>
+ @persistence.setFeedRead = jasmine.createSpy('setFeedRead')
+ @FeedModel.add({id: 3, unreadCount:134, folderId: 3})
+ @FeedModel.add({id: 5, unreadCount:2, folderId: 2})
+ @FeedModel.add({id: 1, unreadCount:12, folderId: 3})
+
+ @scope.markAllRead(@FeedType.Folder, 3)
+
+ expect(@FeedModel.getById(3).unreadCount).toBe(0)
+ expect(@FeedModel.getById(1).unreadCount).toBe(0)
+ expect(@FeedModel.getById(5).unreadCount).toBe(2)
+
+
+ it 'should mark all as read', =>
+ @persistence.setFeedRead = jasmine.createSpy('setFeedRead')
+ @FeedModel.add({id: 3, unreadCount:134, folderId: 3})
+ @FeedModel.add({id: 5, unreadCount:2, folderId: 2})
+ @FeedModel.add({id: 1, unreadCount:12, folderId: 3})
+
+ @scope.markAllRead(@FeedType.Subscriptions, 0)
+
+ expect(@FeedModel.getById(3).unreadCount).toBe(0)
+ expect(@FeedModel.getById(1).unreadCount).toBe(0)
+ expect(@FeedModel.getById(5).unreadCount).toBe(0) \ No newline at end of file