### 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 . ### angular.module('News').factory 'FolderBusinessLayer', ['_BusinessLayer', 'FolderModel', 'FeedBusinessLayer', 'Persistence', 'FeedType', 'ActiveFeed', 'ItemModel', 'Settings', '_ExistsError', 'OPMLParser', 'NewestItem', 'FeedModel', '$rootScope', (_BusinessLayer, FolderModel, FeedBusinessLayer, Persistence, FeedType, ActiveFeed, ItemModel, Settings, _ExistsError, OPMLParser, NewestItem, FeedModel, $rootScope) -> class FolderBusinessLayer extends _BusinessLayer constructor: (@_folderModel, @_feedBusinessLayer, @_settings, activeFeed, persistence, @_feedType, itemModel, @_opmlParser, @_newestItem, @_feedModel, $rootScope) -> super(activeFeed, persistence, itemModel, @_feedType.Folder, $rootScope) getById: (folderId) -> return @_folderModel.getById(folderId) delete: (folderId) -> feeds = [] # also delete feeds for feed in @_feedBusinessLayer.getFeedsOfFolder(folderId) feeds.push(@_feedModel.removeById(feed.id)) folder = @_folderModel.removeById(folderId) data = undoCallback: => @_persistence.restoreFolder folderId, => @_persistence.getAllFeeds() @_persistence.getAllFolders() caption: folder.name @_$rootScope.$broadcast 'undoMessage', data @_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) markRead: (folderId) -> newestItemId = @_newestItem.getId() folder = @_folderModel.getById(folderId) if newestItemId != 0 and angular.isDefined(folder) for feed in @_feedBusinessLayer.getFeedsOfFolder(folderId) feed.unreadCount = 0 # also set items in feeds as read for item in @_itemModel.getAll() if item.feedId == feed.id item.setRead() @_persistence.setFolderRead(folderId, newestItemId) getUnreadCount: (folderId) -> return @_feedBusinessLayer.getFolderUnreadCount(folderId) isVisible: (folderId) -> if @_settings.get('showAll') || @_feedBusinessLayer.getFeedsOfFolder(folderId).length == 0 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('Folder name must not be empty') folderName = folderName.trim() if @_folderModel.getByName(folderName) throw new _ExistsError('Exists already') folder = name: folderName opened: true @_folderModel.add(folder) success = (response) -> onSuccess(response) failure = (response) -> folder.error = response.message onFailure() @_persistence.createFolder folderName, 0, success, failure markErrorRead: (folderName) -> @_folderModel.removeByName(folderName) edit: (folderId) -> folder = @_folderModel.getById(folderId) folder.editing = true folder.originalValue = folder.name rename: (folderId, folderName) -> folder = @_folderModel.getById(folderId) folder.editing = false @_persistence.renameFolder(folderId, folderName) cancel: (folderId) -> folder = @_folderModel.getById(folderId) folder.editing = false folder.name = folder.originalValue import: (xml) -> opml = @_opmlParser.parseXML(xml) @_importElement(opml, 0) _importElement: (opml, parentFolderId) -> for item in opml.getItems() do (item) => if item.isFolder() 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 @_feedBusinessLayer.create(item.getUrl(), parentFolderId) catch error if not error instanceof _ExistsError console.info error return new FolderBusinessLayer(FolderModel, FeedBusinessLayer, Settings, ActiveFeed, Persistence, FeedType, ItemModel, OPMLParser, NewestItem, FeedModel, $rootScope) ]