summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-03-26 14:45:39 +0100
committerBernhard Posselt <nukeawhale@gmail.com>2013-03-26 14:45:39 +0100
commit8e1e0f5281c1ee49fe7f6d84ba8f2b709ebf7f40 (patch)
tree30bc99a02a414de50e1461c9f6b6289b44e3c543
parentcd3b748f65cc98185c56fd110a140ad2206c319b (diff)
added logic for adding feeds
-rw-r--r--js/app/controllers/feedcontroller.coffee46
-rw-r--r--js/app/services/persistence.coffee4
-rw-r--r--js/public/app.js85
-rw-r--r--js/tests/controllers/feedcontrollerSpec.coffee51
4 files changed, 122 insertions, 64 deletions
diff --git a/js/app/controllers/feedcontroller.coffee b/js/app/controllers/feedcontroller.coffee
index fea2cb46d..7a61f4ab1 100644
--- a/js/app/controllers/feedcontroller.coffee
+++ b/js/app/controllers/feedcontroller.coffee
@@ -67,34 +67,40 @@ angular.module('News').factory '_FeedController', ->
@$scope.setShowAll = (showAll) =>
@setShowAll(showAll)
- @$scope.addFeed = (feedUrl, parentFolderId) =>
- ###
+ @$scope.isAddingFolder = =>
+ return @_isAddingFolder
+
+ @$scope.isAddingFeed = =>
+ return @_isAddingFeed
+
+ @$scope.toggleFolder = (folderId) =>
+ @toggleFolder(folderId)
+
+ @$scope.addFeed = (feedUrl, parentFolderId=0) =>
@$scope.feedEmptyError = false
@$scope.feedExistsError = false
@$scope.feedError = false
-
+
if angular.isUndefined(feedUrl) or feedUrl.trim() == ''
@$scope.feedEmptyError = true
else
feedUrl = feedUrl.trim()
- for feed in @feedModel.getItems()
- if feedUrl == feed.feedUrl # FIXME: can we really compare this
+ for feed in @_feedModel.getAll()
+ if feedUrl == feed.url
@$scope.feedExistsError = true
-
+
+
if not (@$scope.feedEmptyError or @$scope.feedExistsError)
- if angular.isUndefined(parentFolderId)
- folderId = 0
- else
- folderId = folder.id
- @$scope.adding = true
+ @_isAddingFeed = true
+
onSuccess = =>
@$scope.feedUrl = ''
- @$scope.adding = false
+ @_isAddingFeed = false
onError = =>
@$scope.feedError = true
- @$scope.adding = false
- @persistence.createFeed(url, folderId, onSuccess, onError)
- ###
+ @_isAddingFeed = false
+ @_persistence.createFeed(feedUrl, parentFolderId, onSuccess,
+ onError)
@$scope.addFolder = (folderName) =>
@$scope.folderEmptyError = false
@@ -115,16 +121,6 @@ angular.module('News').factory '_FeedController', ->
@_isAddingFolder = false
- @$scope.isAddingFolder = =>
- return @_isAddingFolder
-
- @$scope.isAddingFeed = =>
- return @_isAddingFeed
-
- @$scope.toggleFolder = (folderId) =>
- @toggleFolder(folderId)
-
-
toggleFolder: (folderId) ->
folder = @_folderModel.getById(folderId)
diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee
index 200145c71..8e0564002 100644
--- a/js/app/services/persistence.coffee
+++ b/js/app/services/persistence.coffee
@@ -145,7 +145,9 @@ angular.module('News').factory '_Persistence', ->
@_request.get 'news_feeds_active', params
- createFeed: (url, parentFolderId, onSuccess, onFailure) ->
+ createFeed: (url, parentFolderId, onSuccess=null, onFailure=null) ->
+ onSuccess or= ->
+ onFailure or= ->
params =
data:
parentFolderId: parentFolderId
diff --git a/js/public/app.js b/js/public/app.js
index aced192d8..e720ed428 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -186,35 +186,47 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
this.$scope.setShowAll = function(showAll) {
return _this.setShowAll(showAll);
};
+ this.$scope.isAddingFolder = function() {
+ return _this._isAddingFolder;
+ };
+ this.$scope.isAddingFeed = function() {
+ return _this._isAddingFeed;
+ };
+ this.$scope.toggleFolder = function(folderId) {
+ return _this.toggleFolder(folderId);
+ };
this.$scope.addFeed = function(feedUrl, parentFolderId) {
- /*
- @$scope.feedEmptyError = false
- @$scope.feedExistsError = false
- @$scope.feedError = false
-
- if angular.isUndefined(feedUrl) or feedUrl.trim() == ''
- @$scope.feedEmptyError = true
- else
- feedUrl = feedUrl.trim()
- for feed in @feedModel.getItems()
- if feedUrl == feed.feedUrl # FIXME: can we really compare this
- @$scope.feedExistsError = true
-
- if not (@$scope.feedEmptyError or @$scope.feedExistsError)
- if angular.isUndefined(parentFolderId)
- folderId = 0
- else
- folderId = folder.id
- @$scope.adding = true
- onSuccess = =>
- @$scope.feedUrl = ''
- @$scope.adding = false
- onError = =>
- @$scope.feedError = true
- @$scope.adding = false
- @persistence.createFeed(url, folderId, onSuccess, onError)
- */
-
+ var feed, onError, onSuccess, _i, _len, _ref;
+ if (parentFolderId == null) {
+ parentFolderId = 0;
+ }
+ _this.$scope.feedEmptyError = false;
+ _this.$scope.feedExistsError = false;
+ _this.$scope.feedError = false;
+ if (angular.isUndefined(feedUrl) || feedUrl.trim() === '') {
+ _this.$scope.feedEmptyError = true;
+ } else {
+ feedUrl = feedUrl.trim();
+ _ref = _this._feedModel.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ feed = _ref[_i];
+ if (feedUrl === feed.url) {
+ _this.$scope.feedExistsError = true;
+ }
+ }
+ }
+ if (!(_this.$scope.feedEmptyError || _this.$scope.feedExistsError)) {
+ _this._isAddingFeed = true;
+ onSuccess = function() {
+ _this.$scope.feedUrl = '';
+ return _this._isAddingFeed = false;
+ };
+ onError = function() {
+ _this.$scope.feedError = true;
+ return _this._isAddingFeed = false;
+ };
+ return _this._persistence.createFeed(feedUrl, parentFolderId, onSuccess, onError);
+ }
};
this.$scope.addFolder = function(folderName) {
var folder, _i, _len, _ref;
@@ -240,15 +252,6 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
});
}
};
- this.$scope.isAddingFolder = function() {
- return _this._isAddingFolder;
- };
- this.$scope.isAddingFeed = function() {
- return _this._isAddingFeed;
- };
- this.$scope.toggleFolder = function(folderId) {
- return _this.toggleFolder(folderId);
- };
}
FeedController.prototype.toggleFolder = function(folderId) {
@@ -1085,6 +1088,14 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
Persistence.prototype.createFeed = function(url, parentFolderId, onSuccess, onFailure) {
var params;
+ if (onSuccess == null) {
+ onSuccess = null;
+ }
+ if (onFailure == null) {
+ onFailure = null;
+ }
+ onSuccess || (onSuccess = function() {});
+ onFailure || (onFailure = function() {});
params = {
data: {
parentFolderId: parentFolderId,
diff --git a/js/tests/controllers/feedcontrollerSpec.coffee b/js/tests/controllers/feedcontrollerSpec.coffee
index 1a019a74e..af4c8f9a7 100644
--- a/js/tests/controllers/feedcontrollerSpec.coffee
+++ b/js/tests/controllers/feedcontrollerSpec.coffee
@@ -323,7 +323,6 @@ describe '_FeedController', ->
it 'should should reset the foldername on and set isAddingFolder to false',=>
-
@persistence.createFolder =
jasmine.createSpy('create').andCallFake (arg1, arg2, func) =>
func()
@@ -333,3 +332,53 @@ describe '_FeedController', ->
expect(@scope.isAddingFolder()).toBeFalsy()
+ it 'should not add feeds that have no url', =>
+ @persistence.createFeed = jasmine.createSpy('create')
+ @scope.addFeed(' ')
+
+ expect(@scope.feedEmptyError).toBeTruthy()
+ expect(@persistence.createFeed).not.toHaveBeenCalled()
+
+
+ it 'should not add feeds that already exist client side', =>
+ @FeedModel.add({id: 3, url: 'ola'})
+ @persistence.createFeed = jasmine.createSpy('create')
+ @scope.addFeed('ola')
+
+ expect(@scope.feedExistsError).toBeTruthy()
+ expect(@persistence.createFeed).not.toHaveBeenCalled()
+
+
+ it 'should set isAddingFeed to true if there were no problems', =>
+ @persistence.createFeed = jasmine.createSpy('create')
+ @scope.addFeed('ola')
+ expect(@scope.isAddingFeed()).toBeTruthy()
+
+
+ it 'should should reset the feedurl and set isAddingFeed to false on succ',=>
+ @persistence.createFeed =
+ jasmine.createSpy('create').andCallFake (arg1, arg2, func) =>
+ func()
+ @scope.addFeed(' Ola')
+
+ expect(@scope.feedUrl).toBe('')
+ expect(@scope.isAddingFeed()).toBeFalsy()
+
+
+ it 'should should set isAddingFeed to false on err',=>
+ @persistence.createFeed =
+ jasmine.createSpy('create').andCallFake (arg1, arg2, func, err) =>
+ err()
+ @scope.addFeed('Ola')
+
+ expect(@scope.isAddingFeed()).toBeFalsy()
+ expect(@scope.feedError).toBeTruthy()
+
+
+ it 'should create a create new feed request if everything was ok', =>
+ @persistence.createFeed = jasmine.createSpy('create')
+ @scope.addFeed('Ola')
+ expect(@persistence.createFeed).toHaveBeenCalled()
+ expect(@persistence.createFeed.argsForCall[0][0]).toBe('Ola')
+ expect(@persistence.createFeed.argsForCall[0][1]).toBe(0)
+