summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2013-12-20 17:24:50 +0100
committerBernhard Posselt <dev@bernhard-posselt.com>2013-12-20 17:25:01 +0100
commit67daf1074702f8ee8e0720c6f864bc4b8eb3780c (patch)
tree7b17318ad4a1ef70415589e152ebafbfa62bba86 /js
parentee9810ede5a5e3e10b214a771d0a58dcbb29bc36 (diff)
prevent multiple autopage requests, fix #201
Diffstat (limited to 'js')
-rw-r--r--js/app/services/businesslayer/businesslayer.coffee2
-rw-r--r--js/app/services/businesslayer/itembusinesslayer.coffee1
-rw-r--r--js/app/services/persistence.coffee10
-rw-r--r--js/public/app.js14
-rw-r--r--js/tests/services/businesslayer/itembusinesslayerSpec.coffee16
-rw-r--r--js/tests/services/persistenceSpec.coffee33
6 files changed, 71 insertions, 5 deletions
diff --git a/js/app/services/businesslayer/businesslayer.coffee b/js/app/services/businesslayer/businesslayer.coffee
index 14d692084..f7b02baea 100644
--- a/js/app/services/businesslayer/businesslayer.coffee
+++ b/js/app/services/businesslayer/businesslayer.coffee
@@ -27,9 +27,11 @@ angular.module('News').factory '_BusinessLayer', ->
constructor: (@_activeFeed, @_persistence, @_itemModel, @_type,
@_$rootScope) ->
+ @_preventAutopage = false
load: (id) ->
+ @_preventAutopage = false
@_$rootScope.$broadcast 'loadingNewItems'
@_itemModel.clear()
@_persistence.getItems @_type, id, 0, =>
diff --git a/js/app/services/businesslayer/itembusinesslayer.coffee b/js/app/services/businesslayer/itembusinesslayer.coffee
index 1382df190..82d19de8e 100644
--- a/js/app/services/businesslayer/itembusinesslayer.coffee
+++ b/js/app/services/businesslayer/itembusinesslayer.coffee
@@ -106,6 +106,7 @@ StarredBusinessLayer, NewestItem) ->
loadNext: (callback) ->
+
lowestItemId = @_itemModel.getLowestId()
if lowestItemId != 0
@_persistence.getItems @_activeFeed.getType(),
diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee
index 176589e9c..1bbe754eb 100644
--- a/js/app/services/persistence.coffee
+++ b/js/app/services/persistence.coffee
@@ -30,7 +30,7 @@ $rootScope, $q) ->
constructor: (@_request, @_feedLoading, @_autoPageLoading, @_newLoading,
@_config, @_activeFeed, @_$rootScope) ->
-
+ @_preventUselessAutoPageRequest = false
init: ->
###
@@ -64,13 +64,16 @@ $rootScope, $q) ->
# show different loading signs
if offset == 0
+ @_preventUselessAutoPageRequest = false
loading = @_feedLoading
else
loading = @_autoPageLoading
# loading sign handling
loading.increase()
- successCallbackWrapper = (data) ->
+ successCallbackWrapper = (data) =>
+ if data.items.length == 0
+ @_preventUselessAutoPageRequest = true
onSuccess(data)
loading.decrease()
failureCallbackWrapper = (data) ->
@@ -85,7 +88,8 @@ $rootScope, $q) ->
onSuccess: successCallbackWrapper
onFailure: failureCallbackWrapper
- @_request.get 'news_items', params
+ if not @_preventUselessAutoPageRequest
+ @_request.get 'news_items', params
getNewItems: (type, id, lastModified, onSuccess) ->
diff --git a/js/public/app.js b/js/public/app.js
index e314695ca..c709dccab 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -1051,10 +1051,12 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
this._itemModel = _itemModel;
this._type = _type;
this._$rootScope = _$rootScope;
+ this._preventAutopage = false;
}
BusinessLayer.prototype.load = function(id) {
var _this = this;
+ this._preventAutopage = false;
this._$rootScope.$broadcast('loadingNewItems');
this._itemModel.clear();
this._persistence.getItems(this._type, id, 0, function() {
@@ -2730,6 +2732,7 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
this._config = _config;
this._activeFeed = _activeFeed;
this._$rootScope = _$rootScope;
+ this._preventUselessAutoPageRequest = false;
}
Persistence.prototype.init = function() {
@@ -2760,18 +2763,23 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
Persistence.prototype.getItems = function(type, id, offset, onSuccess) {
- var failureCallbackWrapper, loading, params, successCallbackWrapper;
+ var failureCallbackWrapper, loading, params, successCallbackWrapper,
+ _this = this;
if (onSuccess == null) {
onSuccess = null;
}
onSuccess || (onSuccess = function() {});
if (offset === 0) {
+ this._preventUselessAutoPageRequest = false;
loading = this._feedLoading;
} else {
loading = this._autoPageLoading;
}
loading.increase();
successCallbackWrapper = function(data) {
+ if (data.items.length === 0) {
+ _this._preventUselessAutoPageRequest = true;
+ }
onSuccess(data);
return loading.decrease();
};
@@ -2788,7 +2796,9 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
onSuccess: successCallbackWrapper,
onFailure: failureCallbackWrapper
};
- return this._request.get('news_items', params);
+ if (!this._preventUselessAutoPageRequest) {
+ return this._request.get('news_items', params);
+ }
};
Persistence.prototype.getNewItems = function(type, id, lastModified, onSuccess) {
diff --git a/js/tests/services/businesslayer/itembusinesslayerSpec.coffee b/js/tests/services/businesslayer/itembusinesslayerSpec.coffee
index 75804323d..9ac0a9e24 100644
--- a/js/tests/services/businesslayer/itembusinesslayerSpec.coffee
+++ b/js/tests/services/businesslayer/itembusinesslayerSpec.coffee
@@ -264,3 +264,19 @@ describe 'ItemBusinessLayer', ->
expect(@persistence.getNewItems).toHaveBeenCalledWith(
@FeedType.Feed, 3, 4, callback)
+
+
+ it 'should autopage the next items if there are none', =>
+ @NewestItem.handle(13)
+ @persistence.getItems = jasmine.createSpy('autopage')
+ callback = ->
+
+ @ItemModel.add({id: 2, guidHash: 'abc', feedId: 2, status: 16})
+ @ItemModel.add({id: 3, guidHash: 'abcd', feedId: 2, status: 16})
+ @ItemModel.add({id: 1, guidHash: 'abce', feedId: 2, status: 16})
+ @ItemModel.add({id: 6, guidHash: 'abcf', feedId: 2, status: 16})
+
+ @ItemBusinessLayer.loadNext(callback)
+
+ expect(@persistence.getItems).toHaveBeenCalledWith(
+ @FeedType.Feed, 3, 1, jasmine.any(Function)) \ No newline at end of file
diff --git a/js/tests/services/persistenceSpec.coffee b/js/tests/services/persistenceSpec.coffee
index b9250b974..323a41330 100644
--- a/js/tests/services/persistenceSpec.coffee
+++ b/js/tests/services/persistenceSpec.coffee
@@ -74,6 +74,37 @@ describe 'Persistence', ->
expect(@req.get).toHaveBeenCalledWith('news_items', expected)
+ it 'should reset the autopage lock when loading a new feed', =>
+ data =
+ items: []
+ called = 0
+ @req.get.andCallFake (route, params) ->
+ params.onSuccess(data)
+ called++
+
+ success = ->
+ @Persistence.getItems(2, 3, 4, success)
+ @Persistence.getItems(2, 3, 0, success)
+
+ expect(called).toBe(2)
+
+
+ it 'should not send autopage request if reqeust returned nothing', =>
+ data =
+ items: []
+ called = 0
+ @req.get.andCallFake (route, params) ->
+ params.onSuccess(data)
+ called++
+
+ success = ->
+ @Persistence.getItems(2, 3, 4, success)
+ @Persistence.getItems(2, 3, 4, success)
+
+ expect(called).toBe(1)
+
+
+
it 'should send a load new items request', =>
success = ->
params =
@@ -446,3 +477,5 @@ describe 'Persistence', ->
expect(@req.post).toHaveBeenCalledWith('news_usersettings_setcompact',
expected)
+
+