From b5553a83dbd593fa6c7b22e508c3b0fabe1ab9a3 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Fri, 20 Dec 2013 22:54:32 +0100 Subject: debug --- js/app/services/persistence.coffee | 30 ++++++++++++++++++++----- js/public/app.js | 30 ++++++++++++++++++++----- js/tests/services/persistenceSpec.coffee | 38 ++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 11 deletions(-) (limited to 'js') 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 . 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 . 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 . 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) + + -- cgit v1.2.3