summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2013-12-20 22:54:32 +0100
committerBernhard Posselt <dev@bernhard-posselt.com>2013-12-20 22:54:32 +0100
commitb5553a83dbd593fa6c7b22e508c3b0fabe1ab9a3 (patch)
tree46dcda33fc6f943e45e51ce0e26719c2de844a16 /js
parent0454021bc3e65dba6f2509498d0bcff26ff82a6d (diff)
debug
Diffstat (limited to 'js')
-rw-r--r--js/app/services/persistence.coffee30
-rw-r--r--js/public/app.js30
-rw-r--r--js/tests/services/persistenceSpec.coffee38
3 files changed, 87 insertions, 11 deletions
diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee
index 176589e9c..59b3083ff 100644
--- a/js/app/services/persistence.coffee
+++ b/js/app/services/persistence.coffee
@@ -30,7 +30,8 @@ $rootScope, $q) ->
constructor: (@_request, @_feedLoading, @_autoPageLoading, @_newLoading,
@_config, @_activeFeed, @_$rootScope) ->
-
+ @_preventUselessAutoPageRequest = false
+ @_lastFeedChange = new Date().getTime()
init: ->
###
@@ -65,14 +66,32 @@ $rootScope, $q) ->
# show different loading signs
if offset == 0
loading = @_feedLoading
+ # every change of the feed should inevitably reset the
+ # autopage prevention
+ @_lastFeedChange = new Date().getTime()
+ @_preventUselessAutoPageRequest = false
else
loading = @_autoPageLoading
# loading sign handling
loading.increase()
- successCallbackWrapper = (data) ->
- onSuccess(data)
- loading.decrease()
+
+
+ successCallbackWrapper = ->
+ lastChange = @_lastFeedChange
+ # back up last change value in closure so we can compare it properly
+ do (lastChange, offset) =>
+ successCallbackWrapper = (data) =>
+ console.log data
+ console.log offset
+ console.log lastChange
+ console.log @_lastFeedChange
+ if data.items.length == 0 &&
+ lastChange == @_lastFeedChange &&
+ offset != 0
+ @_preventUselessAutoPageRequest = true
+ onSuccess(data)
+ loading.decrease()
failureCallbackWrapper = (data) ->
loading.decrease()
@@ -85,7 +104,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..26680dea4 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -2730,6 +2730,8 @@ 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;
+ this._lastFeedChange = new Date().getTime();
}
Persistence.prototype.init = function() {
@@ -2760,21 +2762,35 @@ 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, lastChange, loading, params, successCallbackWrapper,
+ _this = this;
if (onSuccess == null) {
onSuccess = null;
}
onSuccess || (onSuccess = function() {});
if (offset === 0) {
loading = this._feedLoading;
+ this._lastFeedChange = new Date().getTime();
+ this._preventUselessAutoPageRequest = false;
} else {
loading = this._autoPageLoading;
}
loading.increase();
- successCallbackWrapper = function(data) {
- onSuccess(data);
- return loading.decrease();
- };
+ successCallbackWrapper = function() {};
+ lastChange = this._lastFeedChange;
+ (function(lastChange, offset) {
+ return successCallbackWrapper = function(data) {
+ console.log(data);
+ console.log(offset);
+ console.log(lastChange);
+ console.log(_this._lastFeedChange);
+ if (data.items.length === 0 && lastChange === _this._lastFeedChange && offset !== 0) {
+ _this._preventUselessAutoPageRequest = true;
+ }
+ onSuccess(data);
+ return loading.decrease();
+ };
+ })(lastChange, offset);
failureCallbackWrapper = function(data) {
return loading.decrease();
};
@@ -2788,7 +2804,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/persistenceSpec.coffee b/js/tests/services/persistenceSpec.coffee
index b9250b974..06bdd73ea 100644
--- a/js/tests/services/persistenceSpec.coffee
+++ b/js/tests/services/persistenceSpec.coffee
@@ -74,6 +74,42 @@ 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, 0, success)
+ @Persistence.getItems(2, 3, 4, success)
+ @Persistence.getItems(2, 3, 0, success)
+ @Persistence.getItems(2, 3, 4, success)
+
+ expect(called).toBe(4)
+
+
+ xit '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)
+ @Persistence.getItems(2, 3, 4, success)
+ @Persistence.getItems(2, 3, 0, success)
+ @Persistence.getItems(2, 3, 0, success)
+
+ expect(called).toBe(3)
+
+
+
it 'should send a load new items request', =>
success = ->
params =
@@ -446,3 +482,5 @@ describe 'Persistence', ->
expect(@req.post).toHaveBeenCalledWith('news_usersettings_setcompact',
expected)
+
+