summaryrefslogtreecommitdiffstats
path: root/js/app/services/businesslayer/itembusinesslayer.coffee
blob: 0563ff0966a5380b6726a1d44fc92e47bafbe97f (plain)
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
125
126
127
###

ownCloud - News

@author Bernhard Posselt
@copyright 2012 Bernhard Posselt dev@bernhard-posselt.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', 'NewestItem',
(ItemModel, FeedModel, Persistence, ActiveFeed, FeedType,
StarredBusinessLayer, NewestItem) ->

	class ItemBusinessLayer

		constructor: (@_itemModel, @_feedModel, @_persistence, @_activeFeed,
		              @_feedType, @_starredBusinessLayer, @_newestItem) ->

		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 lowestItemId != 0
				@_persistence.getItems @_activeFeed.getType(),
				                       @_activeFeed.getId(),
				                       lowestItemId,
				                       callback
			else
				callback()



		loadNew: ->



	return new ItemBusinessLayer(ItemModel, FeedModel, Persistence, ActiveFeed,
	                             FeedType, StarredBusinessLayer, NewestItem)

]