summaryrefslogtreecommitdiffstats
path: root/js/app/services/businesslayer/folderbusinesslayer.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'js/app/services/businesslayer/folderbusinesslayer.coffee')
-rw-r--r--js/app/services/businesslayer/folderbusinesslayer.coffee160
1 files changed, 160 insertions, 0 deletions
diff --git a/js/app/services/businesslayer/folderbusinesslayer.coffee b/js/app/services/businesslayer/folderbusinesslayer.coffee
new file mode 100644
index 000000000..969783222
--- /dev/null
+++ b/js/app/services/businesslayer/folderbusinesslayer.coffee
@@ -0,0 +1,160 @@
+###
+
+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 'FolderBusinessLayer',
+['_BusinessLayer', 'FolderModel', 'FeedBusinessLayer', 'Persistence',
+'FeedType', 'ActiveFeed', 'ItemModel', 'ShowAll', '_ExistsError', 'OPMLParser',
+(_BusinessLayer, FolderModel, FeedBusinessLayer, Persistence, FeedType,
+ActiveFeed, ItemModel, ShowAll, _ExistsError, OPMLParser) ->
+
+ class FolderBusinessLayer extends _BusinessLayer
+
+ constructor: (@_folderModel, @_feedBusinessLayer, @_showAll, activeFeed,
+ persistence, @_feedType, itemModel, @_opmlParser) ->
+ super(activeFeed, persistence, itemModel, @_feedType.Folder)
+
+
+ getById: (folderId) ->
+ return @_folderModel.getById(folderId)
+
+ delete: (folderId) ->
+ @_folderModel.removeById(folderId)
+ @_persistence.deleteFolder(folderId)
+
+
+ hasFeeds: (folderId) ->
+ return @_feedBusinessLayer.getFeedsOfFolder(folderId).length
+
+
+ open: (folderId) ->
+ folder = @_folderModel.getById(folderId)
+ if angular.isDefined(folder)
+ if not folder.opened
+ folder.opened = true
+ @_persistence.openFolder(folder.id)
+
+
+ toggleFolder: (folderId) ->
+ folder = @_folderModel.getById(folderId)
+
+ if angular.isDefined(folder)
+ folder.opened = !folder.opened
+ if folder.opened
+ @_persistence.openFolder(folder.id)
+ else
+ @_persistence.collapseFolder(folder.id)
+
+
+ markFolderRead: (folderId) ->
+ for feed in @_feedBusinessLayer.getFeedsOfFolder(folderId)
+ @_feedBusinessLayer.markFeedRead(feed.id)
+
+
+ getUnreadCount: (folderId) ->
+ return @_feedBusinessLayer.getFolderUnreadCount(folderId)
+
+
+ isVisible: (folderId) ->
+ if @_showAll.getShowAll()
+ return true
+ else
+ if @isActive(folderId) or
+ @_feedBusinessLayer.getFolderUnreadCount(folderId) > 0
+ return true
+ if @_activeFeed.getType() == @_feedType.Feed
+ for feed in @_feedBusinessLayer.getFeedsOfFolder(folderId)
+ if feed.id == @_activeFeed.getId()
+ return true
+ return false
+
+
+ getAll: ->
+ return @_folderModel.getAll()
+
+
+ create: (folderName, onSuccess=null, onFailure=null) ->
+ onSuccess or= ->
+ onFailure or= ->
+
+ if angular.isUndefined(folderName) or folderName.trim() == ''
+ throw new Error()
+
+ folderName = folderName.trim()
+
+ if @_folderModel.getByName(folderName)
+ throw new _ExistsError()
+
+ folder =
+ name: folderName
+ opened: true
+
+ @_folderModel.add(folder)
+
+ success = (response) =>
+ if response.status == 'error'
+ folder.error = response.msg
+ onFailure()
+ else
+ onSuccess(response.data)
+
+ @_persistence.createFolder folderName, 0, success
+
+
+ markErrorRead: (folderName) ->
+ @_folderModel.removeByName(folderName)
+
+
+ import: (xml) ->
+ opml = @_opmlParser.parseXML(xml)
+ @_importElement(opml, 0)
+
+
+ _importElement: (opml, parentFolderId) ->
+ for item in opml.getItems()
+ if item.isFolder()
+ do (item) =>
+ try
+ @create item.getName(), (data) =>
+ @_importElement(item, data.folders[0].id)
+ catch error
+ if error instanceof _ExistsError
+ folder = @_folderModel.getByName(item.getName())
+ @open(folder.id)
+ @_importElement(item, folder.id)
+ else
+ console.info error
+ else
+ try
+ do (item) =>
+ @_feedBusinessLayer.create(item.getUrl(),
+ parentFolderId)
+ catch error
+ if not error instanceof _ExistsError
+ console.info error
+
+
+ return new FolderBusinessLayer(FolderModel, FeedBusinessLayer, ShowAll,
+ ActiveFeed, Persistence, FeedType, ItemModel,
+ OPMLParser)
+
+] \ No newline at end of file