1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
###
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 <http://www.gnu.org/licenses/>.
###
angular.module('News').factory 'ItemBusinessLayer',
['ItemModel', 'FeedModel', 'Persistence', 'ActiveFeed', 'FeedType',
'StarredBusinessLayer',
(ItemModel, FeedModel, Persistence, ActiveFeed, FeedType,
StarredBusinessLayer) ->
class ItemBusinessLayer
constructor: (@_itemModel, @_feedModel, @_persistence, @_activeFeed,
@_feedType, @_starredBusinessLayer) ->
getAll: ->
return @_itemModel.getAll()
noFeedActive: ->
return @_activeFeed.getType() != @_feedType.Feed
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()
@_starredBusinessLayer.decreaseCount()
@_persistence.unstarItem(item.feedId, item.guidHash)
else
item.setStarred()
@_starredBusinessLayer.increaseCount()
@_persistence.starItem(item.feedId, item.guidHash)
setRead: (itemId) ->
item = @_itemModel.getById(itemId)
if angular.isDefined(item)
keptUnread = angular.isDefined(item.keptUnread) and
item.keptUnread
if not (item.isRead() or keptUnread)
item.setRead()
@_persistence.readItem(itemId)
feed = @_feedModel.getById(item.feedId)
if angular.isDefined(feed)
feed.unreadCount -= 1
setUnread: (itemId) ->
item = @_itemModel.getById(itemId)
if angular.isDefined(item)
if item.isRead()
item.setUnread()
@_persistence.unreadItem(itemId)
feed = @_feedModel.getById(item.feedId)
if angular.isDefined(feed)
feed.unreadCount += 1
getFeedTitle: (itemId) ->
item = @_itemModel.getById(itemId)
if angular.isDefined(item)
feed = @_feedModel.getById(item.feedId)
if angular.isDefined(feed)
return feed.title
loadNext: (callback) ->
lowestItemId = @_itemModel.getLowestId()
if angular.isDefined(lowestItemId)
@_persistence.getItems @_activeFeed.getType(),
@_activeFeed.getId(), lowestItemId,
callback
loadNew: ->
return new ItemBusinessLayer(ItemModel, FeedModel, Persistence, ActiveFeed,
FeedType, StarredBusinessLayer)
]
|