From f987751d8c5c7a3ee660411afb9d01e6a822aed5 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Fri, 26 Apr 2013 11:20:55 +0200 Subject: order by pubdate on the client side fix #115 --- js/app/services/businesslayer/businesslayer.coffee | 2 +- .../businesslayer/feedbusinesslayer.coffee | 10 +++--- .../businesslayer/itembusinesslayer.coffee | 16 +++++---- js/app/services/models/itemmodel.coffee | 21 ------------ js/app/services/newestitem.coffee | 39 ++++++++++++++++++++++ js/app/services/persistence.coffee | 15 +++------ js/app/services/services.coffee | 5 +-- 7 files changed, 61 insertions(+), 47 deletions(-) create mode 100644 js/app/services/newestitem.coffee (limited to 'js/app/services') diff --git a/js/app/services/businesslayer/businesslayer.coffee b/js/app/services/businesslayer/businesslayer.coffee index 3096eb71e..622351333 100644 --- a/js/app/services/businesslayer/businesslayer.coffee +++ b/js/app/services/businesslayer/businesslayer.coffee @@ -25,7 +25,7 @@ angular.module('News').factory '_BusinessLayer', -> class BusinessLayer - constructor: (@_activeFeed, @_persistence, @_itemModel, @_type) -> + constructor: (@_activeFeed, @_persistence, @_itemModel, @_type, @_newest) -> load: (id) -> diff --git a/js/app/services/businesslayer/feedbusinesslayer.coffee b/js/app/services/businesslayer/feedbusinesslayer.coffee index 9a23bec43..804b68423 100644 --- a/js/app/services/businesslayer/feedbusinesslayer.coffee +++ b/js/app/services/businesslayer/feedbusinesslayer.coffee @@ -24,15 +24,15 @@ License along with this library. If not, see . angular.module('News').factory 'FeedBusinessLayer', ['_BusinessLayer', 'ShowAll', 'Persistence', 'ActiveFeed', 'FeedType', 'ItemModel', 'FeedModel', 'NewLoading', '_ExistsError', 'Utils', '$rootScope', -'UndoQueue', +'UndoQueue', 'NewestItem', (_BusinessLayer, ShowAll, Persistence, ActiveFeed, FeedType, ItemModel, -FeedModel, NewLoading, _ExistsError, Utils, $rootScope, UndoQueue) -> +FeedModel, NewLoading, _ExistsError, Utils, $rootScope, UndoQueue, NewestItem) -> class FeedBusinessLayer extends _BusinessLayer constructor: (@_showAll, @_feedModel, persistence, activeFeed, feedType, itemModel, @_newLoading, @_utils, @_$rootScope, - @_undoQueue) -> + @_undoQueue, @_newestItem) -> super(activeFeed, persistence, itemModel, feedType.Feed) @_feedType = feedType @@ -70,7 +70,7 @@ FeedModel, NewLoading, _ExistsError, Utils, $rootScope, UndoQueue) -> feed.unreadCount = 0 if @_activeFeed.getId() == feedId and @_activeFeed.getType() == @_feedType.Feed - highestItemId = @_itemModel.getHighestId() + highestItemId = @_newestItem.getId() else highestItemId = 0 @_persistence.setFeedRead(feedId, highestItemId) @@ -198,6 +198,6 @@ FeedModel, NewLoading, _ExistsError, Utils, $rootScope, UndoQueue) -> return new FeedBusinessLayer(ShowAll, FeedModel, Persistence, ActiveFeed, FeedType, ItemModel, NewLoading, Utils, - $rootScope, UndoQueue) + $rootScope, UndoQueue, NewestItem) ] \ No newline at end of file diff --git a/js/app/services/businesslayer/itembusinesslayer.coffee b/js/app/services/businesslayer/itembusinesslayer.coffee index 99a400385..6d12661ff 100644 --- a/js/app/services/businesslayer/itembusinesslayer.coffee +++ b/js/app/services/businesslayer/itembusinesslayer.coffee @@ -23,14 +23,14 @@ License along with this library. If not, see . angular.module('News').factory 'ItemBusinessLayer', ['ItemModel', 'FeedModel', 'Persistence', 'ActiveFeed', 'FeedType', -'StarredBusinessLayer', +'StarredBusinessLayer', 'NewestItem', (ItemModel, FeedModel, Persistence, ActiveFeed, FeedType, -StarredBusinessLayer) -> +StarredBusinessLayer, NewestItem) -> class ItemBusinessLayer constructor: (@_itemModel, @_feedModel, @_persistence, @_activeFeed, - @_feedType, @_starredBusinessLayer) -> + @_feedType, @_starredBusinessLayer, @_newestItem) -> getAll: -> return @_itemModel.getAll() @@ -106,10 +106,12 @@ StarredBusinessLayer) -> loadNext: (callback) -> - lowestItemId = @_itemModel.getLowestId() - if lowestItemId != 0 + size = @_itemModel.size() + if size != 0 @_persistence.getItems @_activeFeed.getType(), - @_activeFeed.getId(), lowestItemId, + @_activeFeed.getId(), + size, + @_newestItem.getId(), callback else callback() @@ -121,6 +123,6 @@ StarredBusinessLayer) -> return new ItemBusinessLayer(ItemModel, FeedModel, Persistence, ActiveFeed, - FeedType, StarredBusinessLayer) + FeedType, StarredBusinessLayer, NewestItem) ] \ No newline at end of file diff --git a/js/app/services/models/itemmodel.coffee b/js/app/services/models/itemmodel.coffee index 1b03d65f8..12f557421 100644 --- a/js/app/services/models/itemmodel.coffee +++ b/js/app/services/models/itemmodel.coffee @@ -99,26 +99,5 @@ angular.module('News').factory 'ItemModel', super(id) - getHighestId: -> - query = new _MaximumQuery('id') - highestId = @get(query) - - if angular.isDefined(highestId) - return highestId.id - else - return 0 - - - getLowestId: -> - query = new _MinimumQuery('id') - lowestId = @get(query) - - if angular.isDefined(lowestId) - return lowestId.id - else - return 0 - - - return new ItemModel() ] \ No newline at end of file diff --git a/js/app/services/newestitem.coffee b/js/app/services/newestitem.coffee new file mode 100644 index 000000000..3afa9b079 --- /dev/null +++ b/js/app/services/newestitem.coffee @@ -0,0 +1,39 @@ +### + +ownCloud - News + +@author Bernhard Posselt +@copyright 2012 Bernhard Posselt nukeawhale@gmail.com + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +License as published by the Free Software Foundation; either +version 3 of the License, or any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU AFFERO GENERAL PUBLIC LICENSE for more details. + +You should have received a copy of the GNU Affero General Public +License along with this library. If not, see . + +### + +angular.module('News').factory 'NewestItem', -> + + class NewestItem + + constructor: -> + @_id = 0 + + + handle: (data) -> + @_id = data + + + getId: -> + return @_id + + + return new NewestItem() diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee index 188f5a7c7..8eea196db 100644 --- a/js/app/services/persistence.coffee +++ b/js/app/services/persistence.coffee @@ -51,7 +51,7 @@ $rootScope) -> ### ITEM CONTROLLER ### - getItems: (type, id, offset, onSuccess=null, updatedSince=null) -> + getItems: (type, id, offset, newestItemId=0, onSuccess=null) -> onSuccess or= -> # show different loading signs @@ -68,20 +68,13 @@ $rootScope) -> failureCallbackWrapper = (data) => loading.decrease() - if updatedSince != null - data = - updatedSince: updatedSince - type: type - id: id - else - data = + params = + data: limit: @_config.itemBatchSize offset: offset id: id type: type - - params = - data: data + newestItemId: newestItemId onSuccess: successCallbackWrapper onFailure: failureCallbackWrapper diff --git a/js/app/services/services.coffee b/js/app/services/services.coffee index 537a4492c..fa600b517 100644 --- a/js/app/services/services.coffee +++ b/js/app/services/services.coffee @@ -45,9 +45,9 @@ angular.module('News').factory 'NewLoading', ['_Loading', (_Loading) -> angular.module('News').factory 'Publisher', ['_Publisher', 'ActiveFeed', 'ShowAll', 'StarredCount', 'ItemModel', -'FolderModel', 'FeedModel', 'Language', +'FolderModel', 'FeedModel', 'Language', 'NewestItem', (_Publisher, ActiveFeed, ShowAll, StarredCount, ItemModel, -FolderModel, FeedModel, Language) -> +FolderModel, FeedModel, Language, NewestItem) -> # register items at publisher to automatically add incoming items publisher = new _Publisher() @@ -58,6 +58,7 @@ FolderModel, FeedModel, Language) -> publisher.subscribeObjectTo(FolderModel, 'folders') publisher.subscribeObjectTo(FeedModel, 'feeds') publisher.subscribeObjectTo(ItemModel, 'items') + publisher.subscribeObjectTo(NewestItem, 'newestItemId') return publisher ] -- cgit v1.2.3