summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--js/app/services/bl/itembl.coffee53
-rw-r--r--js/app/services/bl/starredbl.coffee7
-rw-r--r--js/app/services/persistence.coffee1
-rw-r--r--js/public/app.js85
-rw-r--r--js/tests/services/bl/itemblSpec.coffee109
-rw-r--r--js/tests/services/bl/starredblSpec.coffee6
-rw-r--r--templates/part.showall.php4
7 files changed, 245 insertions, 20 deletions
diff --git a/js/app/services/bl/itembl.coffee b/js/app/services/bl/itembl.coffee
index 8c718d653..fb9f04623 100644
--- a/js/app/services/bl/itembl.coffee
+++ b/js/app/services/bl/itembl.coffee
@@ -22,12 +22,13 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
angular.module('News').factory 'ItemBl',
-['ItemModel', 'Persistence', 'ActiveFeed', 'FeedType',
-(ItemModel, Persistence, ActiveFeed, FeedType) ->
+['ItemModel', 'FeedModel', 'Persistence', 'ActiveFeed', 'FeedType', 'StarredBl',
+(ItemModel, FeedModel, Persistence, ActiveFeed, FeedType, StarredBl) ->
class ItemBl
- constructor: (@_itemModel, @_persistence, @_activeFeed, @_feedType) ->
+ constructor: (@_itemModel, @_feedModel, @_persistence, @_activeFeed,
+ @_feedType, @_starredBl) ->
getAll: ->
return @_itemModel.getAll()
@@ -38,21 +39,65 @@ angular.module('News').factory 'ItemBl',
isKeptUnread: (itemId) ->
+ item = @_itemModel.getById(itemId)
+ if angular.isDefined(item) and angular.isDefined(item.keptUnread)
+ return item.keptUnread
+ return false
toggleKeepUnread: (itemId) ->
+ item = @_itemModel.getById(itemId)
+ if angular.isDefined(item) and not item.keptUnread
+ item.keptUnread = true
+ if item.isRead()
+ @setUnread(itemId)
+ else
+ item.keptUnread = false
toggleStarred: (itemId) ->
+ item = @_itemModel.getById(itemId)
+ if item.isStarred()
+ item.setUnstarred()
+ @_starredBl.decreaseCount()
+ @_persistence.unstarItem(item.feedId, item.guidHash)
+ else
+ item.setStarred()
+ @_starredBl.increaseCount()
+ @_persistence.starItem(item.feedId, item.guidHash)
setRead: (itemId) ->
+ item = @_itemModel.getById(itemId)
+ if angular.isDefined(item)
+ item.setRead()
+ @_persistence.readItem(itemId)
+
+
+ setUnread: (itemId) ->
+ item = @_itemModel.getById(itemId)
+ if angular.isDefined(item)
+ item.setUnread()
+ @_persistence.unreadItem(itemId)
getFeedTitle: (itemId) ->
+ item = @_itemModel.getById(itemId)
+ if angular.isDefined(item)
+ feed = @_feedModel.getById(item.feedId)
+ if angular.isDefined(feed)
+ return feed.title
+
+
+ loadNext: ->
+
+
+
+ loadNew: ->
- return new ItemBl(ItemModel, Persistence, ActiveFeed, FeedType)
+ return new ItemBl(ItemModel, FeedModel, Persistence, ActiveFeed, FeedType,
+ StarredBl)
] \ No newline at end of file
diff --git a/js/app/services/bl/starredbl.coffee b/js/app/services/bl/starredbl.coffee
index 0b1d45500..176973e04 100644
--- a/js/app/services/bl/starredbl.coffee
+++ b/js/app/services/bl/starredbl.coffee
@@ -42,6 +42,13 @@ angular.module('News').factory 'StarredBl',
return @_starredCount.getStarredCount()
+ increaseCount: ->
+ @_starredCount.setStarredCount(@_starredCount.getStarredCount() + 1)
+
+
+ decreaseCount: ->
+ @_starredCount.setStarredCount(@_starredCount.getStarredCount() - 1)
+
return new StarredBl(StarredCount, FeedType, Persistence,
ActiveFeed, ItemModel)
]
diff --git a/js/app/services/persistence.coffee b/js/app/services/persistence.coffee
index 41aa13722..2231a5b79 100644
--- a/js/app/services/persistence.coffee
+++ b/js/app/services/persistence.coffee
@@ -93,7 +93,6 @@ angular.module('News').factory '_Persistence', ->
@_request.post 'news_items_star', params
-
unstarItem: (feedId, guidHash) ->
###
Unstars an item
diff --git a/js/public/app.js b/js/public/app.js
index 718c89a02..c567e8fee 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -805,15 +805,17 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
(function() {
angular.module('News').factory('ItemBl', [
- 'ItemModel', 'Persistence', 'ActiveFeed', 'FeedType', function(ItemModel, Persistence, ActiveFeed, FeedType) {
+ 'ItemModel', 'FeedModel', 'Persistence', 'ActiveFeed', 'FeedType', 'StarredBl', function(ItemModel, FeedModel, Persistence, ActiveFeed, FeedType, StarredBl) {
var ItemBl;
ItemBl = (function() {
- function ItemBl(_itemModel, _persistence, _activeFeed, _feedType) {
+ function ItemBl(_itemModel, _feedModel, _persistence, _activeFeed, _feedType, _starredBl) {
this._itemModel = _itemModel;
+ this._feedModel = _feedModel;
this._persistence = _persistence;
this._activeFeed = _activeFeed;
this._feedType = _feedType;
+ this._starredBl = _starredBl;
}
ItemBl.prototype.getAll = function() {
@@ -824,20 +826,79 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
return this._activeFeed.getType() !== this._feedType.Feed;
};
- ItemBl.prototype.isKeptUnread = function(itemId) {};
+ ItemBl.prototype.isKeptUnread = function(itemId) {
+ var item;
+ item = this._itemModel.getById(itemId);
+ if (angular.isDefined(item) && angular.isDefined(item.keptUnread)) {
+ return item.keptUnread;
+ }
+ return false;
+ };
- ItemBl.prototype.toggleKeepUnread = function(itemId) {};
+ ItemBl.prototype.toggleKeepUnread = function(itemId) {
+ var item;
+ item = this._itemModel.getById(itemId);
+ if (angular.isDefined(item) && !item.keptUnread) {
+ item.keptUnread = true;
+ if (item.isRead()) {
+ return this.setUnread(itemId);
+ }
+ } else {
+ return item.keptUnread = false;
+ }
+ };
- ItemBl.prototype.toggleStarred = function(itemId) {};
+ ItemBl.prototype.toggleStarred = function(itemId) {
+ var item;
+ item = this._itemModel.getById(itemId);
+ if (item.isStarred()) {
+ item.setUnstarred();
+ this._starredBl.decreaseCount();
+ return this._persistence.unstarItem(item.feedId, item.guidHash);
+ } else {
+ item.setStarred();
+ this._starredBl.increaseCount();
+ return this._persistence.starItem(item.feedId, item.guidHash);
+ }
+ };
- ItemBl.prototype.setRead = function(itemId) {};
+ ItemBl.prototype.setRead = function(itemId) {
+ var item;
+ item = this._itemModel.getById(itemId);
+ if (angular.isDefined(item)) {
+ item.setRead();
+ return this._persistence.readItem(itemId);
+ }
+ };
+
+ ItemBl.prototype.setUnread = function(itemId) {
+ var item;
+ item = this._itemModel.getById(itemId);
+ if (angular.isDefined(item)) {
+ item.setUnread();
+ return this._persistence.unreadItem(itemId);
+ }
+ };
+
+ ItemBl.prototype.getFeedTitle = function(itemId) {
+ var feed, item;
+ item = this._itemModel.getById(itemId);
+ if (angular.isDefined(item)) {
+ feed = this._feedModel.getById(item.feedId);
+ if (angular.isDefined(feed)) {
+ return feed.title;
+ }
+ }
+ };
- ItemBl.prototype.getFeedTitle = function(itemId) {};
+ ItemBl.prototype.loadNext = function() {};
+
+ ItemBl.prototype.loadNew = function() {};
return ItemBl;
})();
- return new ItemBl(ItemModel, Persistence, ActiveFeed, FeedType);
+ return new ItemBl(ItemModel, FeedModel, Persistence, ActiveFeed, FeedType, StarredBl);
}
]);
@@ -895,6 +956,14 @@ License along with this library. If not, see <http://www.gnu.org/licenses/>.
return this._starredCount.getStarredCount();
};
+ StarredBl.prototype.increaseCount = function() {
+ return this._starredCount.setStarredCount(this._starredCount.getStarredCount() + 1);
+ };
+
+ StarredBl.prototype.decreaseCount = function() {
+ return this._starredCount.setStarredCount(this._starredCount.getStarredCount() - 1);
+ };
+
return StarredBl;
})(_Bl);
diff --git a/js/tests/services/bl/itemblSpec.coffee b/js/tests/services/bl/itemblSpec.coffee
index ff2bbd80a..01b02bfb2 100644
--- a/js/tests/services/bl/itemblSpec.coffee
+++ b/js/tests/services/bl/itemblSpec.coffee
@@ -28,13 +28,10 @@ describe 'ItemBl', ->
beforeEach =>
angular.module('News').factory 'Persistence', =>
- @setFeedReadSpy = jasmine.createSpy('setFeedRead')
- @persistence = {
-
- }
+ @persistence = {}
beforeEach inject (@ItemModel, @ItemBl, @StatusFlag, @ActiveFeed
- @FeedType) =>
+ @FeedType, @FeedModel, @StarredBl) =>
it 'should return all items', =>
@@ -69,3 +66,105 @@ describe 'ItemBl', ->
@ActiveFeed.handle({type: @FeedType.Feed, id: 0})
expect(@ItemBl.noFeedActive()).toBe(false)
+
+ it 'should return the correct feed title', =>
+ item1 = {id: 5, title: 'hi', unreadCount:134, urlHash: 'a3', folderId: 3}
+ @FeedModel.add(item1)
+
+ item2 = {id: 2, feedId: 5, guidHash: 'a3'}
+ @ItemModel.add(item2)
+
+ expect(@ItemBl.getFeedTitle(2)).toBe('hi')
+
+
+ it 'should set an item unstarred', =>
+ @persistence.unstarItem = jasmine.createSpy('star item')
+
+ item2 = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item2)
+ item2.setStarred()
+
+ @ItemBl.toggleStarred(2)
+
+ expect(item2.isStarred()).toBe(false)
+ expect(@StarredBl.getUnreadCount()).toBe(-1)
+ expect(@persistence.unstarItem).toHaveBeenCalledWith(5, 'a3')
+
+
+ it 'should set an item starred', =>
+ @persistence.starItem = jasmine.createSpy('unstar item')
+
+ item2 = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item2)
+ item2.setUnstarred()
+
+ @ItemBl.toggleStarred(2)
+
+ expect(item2.isStarred()).toBe(true)
+ expect(@StarredBl.getUnreadCount()).toBe(1)
+ expect(@persistence.starItem).toHaveBeenCalledWith(5, 'a3')
+
+
+ it 'should set an item read', =>
+ @persistence.readItem = jasmine.createSpy('read item')
+
+ item = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item)
+ item.setUnread()
+
+ @ItemBl.setRead(2)
+
+ expect(item.isRead()).toBe(true)
+ expect(@persistence.readItem).toHaveBeenCalledWith(2)
+
+
+ it 'should return false when item kept unread does not exist', =>
+ expect(@ItemBl.isKeptUnread(2)).toBe(false)
+
+
+ it 'should return false if an item is not kept unread', =>
+ item = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item)
+
+ expect(@ItemBl.isKeptUnread(2)).toBe(false)
+
+
+ it 'should toggle an item as kept unread', =>
+ @persistence.unreadItem = jasmine.createSpy('unread item')
+
+ item = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item)
+
+ expect(@ItemBl.isKeptUnread(2)).toBe(false)
+
+ @ItemBl.toggleKeepUnread(2)
+ expect(@ItemBl.isKeptUnread(2)).toBe(true)
+
+ @ItemBl.toggleKeepUnread(2)
+ expect(@ItemBl.isKeptUnread(2)).toBe(false)
+
+
+ it 'should set an item as unread', =>
+ @persistence.unreadItem = jasmine.createSpy('unread item')
+
+ item = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item)
+ item.setRead()
+
+ @ItemBl.setUnread(2)
+
+ expect(item.isRead()).toBe(false)
+ expect(@persistence.unreadItem).toHaveBeenCalledWith(2)
+
+
+ it 'should set item as unread if kept unread is toggled and it is read', =>
+ @persistence.unreadItem = jasmine.createSpy('unread item')
+
+ item = {id: 2, feedId: 5, guidHash: 'a3', status: 0}
+ @ItemModel.add(item)
+ item.setRead()
+
+ @ItemBl.toggleKeepUnread(2)
+
+ expect(item.isRead()).toBe(false)
+ expect(@persistence.unreadItem).toHaveBeenCalledWith(2)
diff --git a/js/tests/services/bl/starredblSpec.coffee b/js/tests/services/bl/starredblSpec.coffee
index 5f4ec7a4f..6115dcf5f 100644
--- a/js/tests/services/bl/starredblSpec.coffee
+++ b/js/tests/services/bl/starredblSpec.coffee
@@ -52,3 +52,9 @@ describe 'StarredBl', ->
expect(@StarredBl.getUnreadCount()).toBe(144)
+ it 'should increase the starred count', =>
+ expect(@StarredBl.increaseCount()).toBe(1)
+
+
+ it 'should decrease the starred count', =>
+ expect(@StarredBl.decreaseCount()).toBe(-1) \ No newline at end of file
diff --git a/templates/part.showall.php b/templates/part.showall.php
index a99e821ee..404950986 100644
--- a/templates/part.showall.php
+++ b/templates/part.showall.php
@@ -1,7 +1,7 @@
-<li ui-if="!feedBl.isShowAll() && subscriptionsBl.isVisible(0)" class="show-all">
+<li ui-if="!feedBl.isShowAll() && feedBl.getNumberOfFeeds() > 0" class="show-all">
<a ng-click="feedBl.setShowAll(true)" href="#"><?php p($l->t('Show all')); ?></a>
</li>
-<li ui-if="feedBl.isShowAll() && subscriptionsBl.isVisible(0)" class="show-all">
+<li ui-if="feedBl.isShowAll() && feedBl.getNumberOfFeeds() > 0" class="show-all">
<a ng-click="feedBl.setShowAll(false)" href="#"><?php p($l->t('Show only unread')); ?></a>
</li>