From 0430a6ca38545463d7eea070204d77bddb447437 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Mon, 25 Mar 2013 21:50:49 +0100 Subject: added more feedcontroller methods --- js/app/controllers/feedcontroller.coffee | 24 +++++++++++ js/app/services/models/itemmodel.coffee | 10 +++++ js/public/app.js | 54 +++++++++++++++++++++++- js/tests/controllers/feedcontrollerSpec.coffee | 58 +++++++++++++++++++++++++- 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 . 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 . } }; + 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 -- cgit v1.2.3