From ddccbdf61004988843f689fefea8a3c350556264 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Tue, 5 Feb 2019 21:48:32 -0800 Subject: [PATCH] Add addFeed and addFeeds to the Container protocol. This was confusing before. Now you can add directly to a Folder or Account. --- Frameworks/Account/Account.swift | 26 +++---------------- Frameworks/Account/Container.swift | 17 +++++++++++- Frameworks/Account/Folder.swift | 20 -------------- Importers/DefaultFeedsImporter.swift | 2 +- .../AddFeed/AddFeedController.swift | 5 ++-- .../Sidebar/SidebarOutlineDataSource.swift | 2 +- .../Scriptability/Feed+Scriptability.swift | 7 +++-- 7 files changed, 27 insertions(+), 52 deletions(-) diff --git a/Frameworks/Account/Account.swift b/Frameworks/Account/Account.swift index 942abc46c..365e10cf2 100644 --- a/Frameworks/Account/Account.swift +++ b/Frameworks/Account/Account.swift @@ -251,30 +251,13 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, return true // TODO } - @discardableResult - public func addFeed(_ feed: Feed, to folder: Folder?) -> Bool { - - // Return false if it couldn’t be added. - // If it already existed in that folder, return true. - - var didAddFeed = false - + public func addFeed(_ feed: Feed, to folder: Folder?) { if let folder = folder { - didAddFeed = folder.addFeed(feed) + folder.addFeed(feed) } else { - if !topLevelFeeds.contains(feed) { - topLevelFeeds.insert(feed) - postChildrenDidChangeNotification() - didAddFeed = true - } + addFeed(feed) } - - if didAddFeed { - structureDidChange() - } - - return didAddFeed } public func addFeeds(_ feeds: Set, to folder: Folder?) { @@ -282,9 +265,8 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, folder.addFeeds(feeds) } else { - topLevelFeeds.formUnion(feeds) + addFeeds(feeds) } - structureDidChange() } public func createFeed(with name: String?, editedName: String?, url: String) -> Feed? { diff --git a/Frameworks/Account/Container.swift b/Frameworks/Account/Container.swift index a29f2de4b..0ecd7f6d7 100644 --- a/Frameworks/Account/Container.swift +++ b/Frameworks/Account/Container.swift @@ -29,7 +29,10 @@ public protocol Container: class { func deleteFeed(_ feed: Feed) func deleteFolder(_ folder: Folder) - + + func addFeed(_ feed: Feed) + func addFeeds(_ feeds: Set) + //Recursive — checks subfolders func flattenedFeeds() -> Set func hasFeed(with feedID: String) -> Bool @@ -44,6 +47,18 @@ public protocol Container: class { public extension Container { + func addFeed(_ feed: Feed) { + addFeeds(Set([feed])) + } + + func addFeeds(_ feeds: Set) { + let feedCount = topLevelFeeds.count + topLevelFeeds.formUnion(feeds) + if feedCount != topLevelFeeds.count { + postChildrenDidChangeNotification() + } + } + func hasAtLeastOneFeed() -> Bool { return topLevelFeeds.count > 0 } diff --git a/Frameworks/Account/Folder.swift b/Frameworks/Account/Folder.swift index a20206f06..49286d007 100644 --- a/Frameworks/Account/Folder.swift +++ b/Frameworks/Account/Folder.swift @@ -81,26 +81,6 @@ public final class Folder: DisplayNameProvider, Renamable, Container, UnreadCoun } } - // MARK: Feeds - - /// Add a single feed. Return true if number of feeds in folder changes. - func addFeed(_ feed: Feed) -> Bool { - return addFeeds(Set([feed])) - } - - /// Add one or more feeds. Return true if number of feeds in folder changes. - @discardableResult - func addFeeds(_ feedsToAdd: Set) -> Bool { - let feedCount = topLevelFeeds.count - topLevelFeeds.formUnion(feedsToAdd) - - if feedCount != topLevelFeeds.count { - postChildrenDidChangeNotification() - return true - } - return false - } - // MARK: - Notifications @objc func unreadCountDidChange(_ note: Notification) { diff --git a/Importers/DefaultFeedsImporter.swift b/Importers/DefaultFeedsImporter.swift index 3177564f9..905266045 100644 --- a/Importers/DefaultFeedsImporter.swift +++ b/Importers/DefaultFeedsImporter.swift @@ -45,7 +45,7 @@ struct FeedsImporter { let feedsToImport = feeds(with: feedDictionaries, account: account) BatchUpdate.shared.perform { - feedsToImport.forEach{ account.addFeed($0, to: nil) } + feedsToImport.forEach{ account.addFeed($0) } } account.structureDidChange() } diff --git a/NetNewsWire/MainWindow/AddFeed/AddFeedController.swift b/NetNewsWire/MainWindow/AddFeed/AddFeedController.swift index a713e28f5..5b41430ba 100644 --- a/NetNewsWire/MainWindow/AddFeed/AddFeedController.swift +++ b/NetNewsWire/MainWindow/AddFeed/AddFeedController.swift @@ -181,9 +181,8 @@ private extension AddFeedController { account.update(feed, with: parsedFeed, {}) } - if account.addFeed(feed, to: userEnteredFolder) { - NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.feed: feed]) - } + account.addFeed(feed, to: userEnteredFolder) + NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.feed: feed]) } // MARK: Find Feeds diff --git a/NetNewsWire/MainWindow/Sidebar/SidebarOutlineDataSource.swift b/NetNewsWire/MainWindow/Sidebar/SidebarOutlineDataSource.swift index d7c4e5c70..8370a5ff6 100644 --- a/NetNewsWire/MainWindow/Sidebar/SidebarOutlineDataSource.swift +++ b/NetNewsWire/MainWindow/Sidebar/SidebarOutlineDataSource.swift @@ -230,8 +230,8 @@ private extension SidebarOutlineDataSource { } BatchUpdate.shared.perform { - account.addFeed(feed, to: destinationFolder) sourceContainer?.deleteFeed(feed) + account.addFeed(feed, to: destinationFolder) } return true diff --git a/NetNewsWire/Scriptability/Feed+Scriptability.swift b/NetNewsWire/Scriptability/Feed+Scriptability.swift index e2fedad4f..7e0ce5e71 100644 --- a/NetNewsWire/Scriptability/Feed+Scriptability.swift +++ b/NetNewsWire/Scriptability/Feed+Scriptability.swift @@ -121,10 +121,9 @@ class ScriptableFeed: NSObject, UniqueIdScriptingObject, ScriptingObjectContaine account.update(feed, with:parsedFeed, {}) // add the feed, putting it in a folder if needed - if account.addFeed(feed, to:folder) { - NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.feed: feed]) - } - + account.addFeed(feed, to:folder) + NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.feed: feed]) + let scriptableFeed = self.scriptableFeed(feed, account:account, folder:folder) command.resumeExecution(withResult:scriptableFeed.objectSpecifier) } else {