From 78674ebc36cf9d24309799651c09a7e194d15ea4 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 27 Mar 2013 13:47:53 +0100 Subject: star by guid hash and feedid to also star an item if it has been updated in the meantime. read still only works on the current version of the item, that means if an item is updated on the server side and an older version is being read on the server it will not be marked as read --- appinfo/routes.php | 4 ++-- bl/itembl.php | 7 ++++--- controller/itemcontroller.php | 5 +++-- js/app/services/persistence.coffee | 10 ++++++---- js/public/app.js | 10 ++++++---- js/tests/services/persistenceSpec.coffee | 10 ++++++---- templates/part.settings.php | 3 ++- tests/bl/ItemBlTest.php | 14 +++++++++----- tests/controller/ItemControllerTest.php | 18 ++++++++++++++---- 9 files changed, 52 insertions(+), 29 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index ac0ecb315..4397b4750 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -151,13 +151,13 @@ $this->create('news_items_unread', '/items/{itemId}/unread')->post()->action( } ); -$this->create('news_items_star', '/items/{itemId}/star')->post()->action( +$this->create('news_items_star', '/items/{feedId}/{guidHash}/star')->post()->action( function($params){ App::main('ItemController', 'star', $params, new DIContainer()); } ); -$this->create('news_items_unstar', '/items/{itemId}/unstar')->post()->action( +$this->create('news_items_unstar', '/items/{feedId}/{guidHash}/unstar')->post()->action( function($params){ App::main('ItemController', 'unstar', $params, new DIContainer()); } diff --git a/bl/itembl.php b/bl/itembl.php index 3c8649201..ee87d373a 100644 --- a/bl/itembl.php +++ b/bl/itembl.php @@ -90,10 +90,11 @@ class ItemBl extends Bl { } - public function star($itemId, $isStarred, $userId){ - $item = $this->find($itemId, $userId); + public function star($feedId, $guidHash, $isStarred, $userId){ + // FIXME: this can throw two possible exceptions + $item = $this->mapper->findByGuidHash($feedId, $guidHash, $userId); if($isStarred){ - $item->setStarred(); + $item->setStarred(); } else { $item->setUnstarred(); } diff --git a/controller/itemcontroller.php b/controller/itemcontroller.php index 2c00fb1bd..2a8aa6725 100644 --- a/controller/itemcontroller.php +++ b/controller/itemcontroller.php @@ -95,9 +95,10 @@ class ItemController extends Controller { private function setStarred($isStarred){ $userId = $this->api->getUserId(); - $itemId = (int) $this->params('itemId'); + $feedId = (int) $this->params('feedId'); + $guidHash = $this->params('guidHash'); - $this->itemBl->star($itemId, $isStarred, $userId); + $this->itemBl->star($feedId, $guidHash, $isStarred, $userId); } /** diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee index 24b371b54..41aa13722 100644 --- a/js/app/services/persistence.coffee +++ b/js/app/services/persistence.coffee @@ -81,25 +81,27 @@ angular.module('News').factory '_Persistence', -> @_request.get 'news_items_starred', params - starItem: (itemId) -> + starItem: (feedId, guidHash) -> ### Stars an item ### params = routeParams: - itemId: itemId + feedId: feedId + guidHash: guidHash @_request.post 'news_items_star', params - unstarItem: (itemId) -> + unstarItem: (feedId, guidHash) -> ### Unstars an item ### params = routeParams: - itemId: itemId + feedId: feedId + guidHash: guidHash @_request.post 'news_items_unstar', params diff --git a/js/public/app.js b/js/public/app.js index e5b6e3cab..06cbb6e3e 100644 --- a/js/public/app.js +++ b/js/public/app.js @@ -1122,7 +1122,7 @@ License along with this library. If not, see . return this._request.get('news_items_starred', params); }; - Persistence.prototype.starItem = function(itemId) { + Persistence.prototype.starItem = function(feedId, guidHash) { /* Stars an item */ @@ -1130,13 +1130,14 @@ License along with this library. If not, see . var params; params = { routeParams: { - itemId: itemId + feedId: feedId, + guidHash: guidHash } }; return this._request.post('news_items_star', params); }; - Persistence.prototype.unstarItem = function(itemId) { + Persistence.prototype.unstarItem = function(feedId, guidHash) { /* Unstars an item */ @@ -1144,7 +1145,8 @@ License along with this library. If not, see . var params; params = { routeParams: { - itemId: itemId + feedId: feedId, + guidHash: guidHash } }; return this._request.post('news_items_unstar', params); diff --git a/js/tests/services/persistenceSpec.coffee b/js/tests/services/persistenceSpec.coffee index 091fcd60c..dc36661a4 100644 --- a/js/tests/services/persistenceSpec.coffee +++ b/js/tests/services/persistenceSpec.coffee @@ -101,10 +101,11 @@ describe '_Persistence', -> it 'send a correct star item request', => params = routeParams: - itemId: 2 + feedId: 2 + guidHash: 'dfdfdf' pers = new @_Persistence(@req, @loading, @config, @active, @$rootScope) - pers.starItem(params.routeParams.itemId) + pers.starItem(params.routeParams.feedId, params.routeParams.guidHash) expect(@req.post).toHaveBeenCalledWith('news_items_star', params) @@ -112,10 +113,11 @@ describe '_Persistence', -> it 'send a correct unstar item request', => params = routeParams: - itemId: 2 + feedId: 2 + guidHash: 'dfdfdf' pers = new @_Persistence(@req, @loading, @config, @active, @$rootScope) - pers.unstarItem(params.routeParams.itemId) + pers.unstarItem(params.routeParams.feedId, params.routeParams.guidHash) expect(@req.post).toHaveBeenCalledWith('news_items_unstar', params) diff --git a/templates/part.settings.php b/templates/part.settings.php index b5860124d..4fd963e8a 100644 --- a/templates/part.settings.php +++ b/templates/part.settings.php @@ -1,7 +1,8 @@
t('Import / Export OPML')); ?> -