diff --git a/Account/Sources/Account/Account.swift b/Account/Sources/Account/Account.swift index cd1f578c4..f68c8ef67 100644 --- a/Account/Sources/Account/Account.swift +++ b/Account/Sources/Account/Account.swift @@ -143,7 +143,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, } } - public var topLevelWebFeeds = Set() + public var topLevelFeeds = Set() public var folders: Set? = Set() public var externalID: String? { @@ -179,7 +179,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, } var flattenedWebFeedURLs: Set { - return Set(flattenedWebFeeds().map({ $0.url })) + return Set(flattenedFeeds().map({ $0.url })) } var username: String? { @@ -339,7 +339,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, self.metadata.performedApril2020RetentionPolicyChange = true } - self.database.cleanupDatabaseAtStartup(subscribedToWebFeedIDs: self.flattenedWebFeeds().webFeedIDs()) + self.database.cleanupDatabaseAtStartup(subscribedToWebFeedIDs: self.flattenedFeeds().webFeedIDs()) self.fetchAllUnreadCounts() } @@ -537,11 +537,11 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, func existingContainers(withWebFeed webFeed: Feed) -> [Container] { var containers = [Container]() - if topLevelWebFeeds.contains(webFeed) { + if topLevelFeeds.contains(webFeed) { containers.append(self) } folders?.forEach { folder in - if folder.topLevelWebFeeds.contains(webFeed) { + if folder.topLevelFeeds.contains(webFeed) { containers.append(folder) } } @@ -588,7 +588,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, func newWebFeed(with opmlFeedSpecifier: RSOPMLFeedSpecifier) -> Feed { let feedURL = opmlFeedSpecifier.feedURL - let metadata = webFeedMetadata(feedURL: feedURL, webFeedID: feedURL) + let metadata = webFeedMetadata(feedURL: feedURL, feedID: feedURL) let feed = Feed(account: self, url: opmlFeedSpecifier.feedURL, metadata: metadata) if let feedTitle = opmlFeedSpecifier.title { if feed.name == nil { @@ -598,16 +598,16 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, return feed } - public func addWebFeed(_ feed: Feed, to container: Container, completion: @escaping (Result) -> Void) { + public func addFeed(_ feed: Feed, to container: Container, completion: @escaping (Result) -> Void) { delegate.addWebFeed(for: self, with: feed, to: container, completion: completion) } - public func createWebFeed(url: String, name: String?, container: Container, validateFeed: Bool, completion: @escaping (Result) -> Void) { + public func createFeed(url: String, name: String?, container: Container, validateFeed: Bool, completion: @escaping (Result) -> Void) { delegate.createWebFeed(for: self, url: url, name: name, container: container, validateFeed: validateFeed, completion: completion) } func createWebFeed(with name: String?, url: String, webFeedID: String, homePageURL: String?) -> Feed { - let metadata = webFeedMetadata(feedURL: url, webFeedID: webFeedID) + let metadata = webFeedMetadata(feedURL: url, feedID: webFeedID) let feed = Feed(account: self, url: url, metadata: metadata) feed.name = name feed.homePageURL = homePageURL @@ -618,7 +618,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, delegate.removeWebFeed(for: self, with: feed, from: container, completion: completion) } - public func moveWebFeed(_ feed: Feed, from: Container, to: Container, completion: @escaping (Result) -> Void) { + public func moveFeed(_ feed: Feed, from: Container, to: Container, completion: @escaping (Result) -> Void) { delegate.moveWebFeed(for: self, with: feed, from: from, to: to, completion: completion) } @@ -711,15 +711,15 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, } public func fetchUnreadCountForToday(_ completion: @escaping SingleUnreadCountCompletionBlock) { - database.fetchUnreadCountForToday(for: flattenedWebFeeds().webFeedIDs(), completion: completion) + database.fetchUnreadCountForToday(for: flattenedFeeds().webFeedIDs(), completion: completion) } public func fetchUnreadCountForStarredArticles(_ completion: @escaping SingleUnreadCountCompletionBlock) { - database.fetchStarredAndUnreadCount(for: flattenedWebFeeds().webFeedIDs(), completion: completion) + database.fetchStarredAndUnreadCount(for: flattenedFeeds().webFeedIDs(), completion: completion) } public func fetchCountForStarredArticles() throws -> Int { - return try database.fetchStarredArticlesCount(flattenedWebFeeds().webFeedIDs()) + return try database.fetchStarredArticlesCount(flattenedFeeds().webFeedIDs()) } public func fetchUnreadArticleIDs(_ completion: @escaping ArticleIDsCompletionBlock) { @@ -736,11 +736,11 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, } public func unreadCount(for webFeed: Feed) -> Int { - return unreadCounts[webFeed.webFeedID] ?? 0 + return unreadCounts[webFeed.feedID] ?? 0 } public func setUnreadCount(_ unreadCount: Int, for webFeed: Feed) { - unreadCounts[webFeed.webFeedID] = unreadCount + unreadCounts[webFeed.feedID] = unreadCount } public func structureDidChange() { @@ -763,7 +763,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, return } - update(webFeed.webFeedID, with: parsedItems, completion: completion) + update(webFeed.feedID, with: parsedItems, completion: completion) } func update(_ webFeedID: String, with parsedItems: Set, deleteOlder: Bool = true, completion: @escaping UpdateArticlesCompletionBlock) { @@ -899,7 +899,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, // MARK: - Container - public func flattenedWebFeeds() -> Set { + public func flattenedFeeds() -> Set { assert(Thread.isMainThread) if flattenedWebFeedsNeedUpdate { updateFlattenedWebFeeds() @@ -908,7 +908,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, } public func removeWebFeed(_ webFeed: Feed) { - topLevelWebFeeds.remove(webFeed) + topLevelFeeds.remove(webFeed) structureDidChange() postChildrenDidChangeNotification() } @@ -917,19 +917,19 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, guard !webFeeds.isEmpty else { return } - topLevelWebFeeds.subtract(webFeeds) + topLevelFeeds.subtract(webFeeds) structureDidChange() postChildrenDidChangeNotification() } public func addWebFeed(_ webFeed: Feed) { - topLevelWebFeeds.insert(webFeed) + topLevelFeeds.insert(webFeed) structureDidChange() postChildrenDidChangeNotification() } func addFeedIfNotInAnyFolder(_ webFeed: Feed) { - if !flattenedWebFeeds().contains(webFeed) { + if !flattenedFeeds().contains(webFeed) { addWebFeed(webFeed) } } @@ -944,7 +944,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container, public func debugDropConditionalGetInfo() { #if DEBUG - flattenedWebFeeds().forEach{ $0.dropConditionalGetInfo() } + flattenedFeeds().forEach{ $0.dropConditionalGetInfo() } #endif } @@ -1027,7 +1027,7 @@ extension Account: WebFeedMetadataDelegate { func valueDidChange(_ feedMetadata: WebFeedMetadata, key: WebFeedMetadata.CodingKeys) { webFeedMetadataFile.markAsDirty() - guard let feed = existingWebFeed(withWebFeedID: feedMetadata.webFeedID) else { + guard let feed = existingWebFeed(withWebFeedID: feedMetadata.feedID) else { return } feed.postFeedSettingDidChangeNotification(key) @@ -1039,11 +1039,11 @@ extension Account: WebFeedMetadataDelegate { private extension Account { func fetchStarredArticles(limit: Int?) throws -> Set
{ - return try database.fetchStarredArticles(flattenedWebFeeds().webFeedIDs(), limit) + return try database.fetchStarredArticles(flattenedFeeds().webFeedIDs(), limit) } func fetchStarredArticlesAsync(limit: Int?, _ completion: @escaping ArticleSetResultBlock) { - database.fetchedStarredArticlesAsync(flattenedWebFeeds().webFeedIDs(), limit, completion) + database.fetchedStarredArticlesAsync(flattenedFeeds().webFeedIDs(), limit, completion) } func fetchUnreadArticles(limit: Int?) throws -> Set
{ @@ -1055,11 +1055,11 @@ private extension Account { } func fetchTodayArticles(limit: Int?) throws -> Set
{ - return try database.fetchTodayArticles(flattenedWebFeeds().webFeedIDs(), limit) + return try database.fetchTodayArticles(flattenedFeeds().webFeedIDs(), limit) } func fetchTodayArticlesAsync(limit: Int?, _ completion: @escaping ArticleSetResultBlock) { - database.fetchTodayArticlesAsync(flattenedWebFeeds().webFeedIDs(), limit, completion) + database.fetchTodayArticlesAsync(flattenedFeeds().webFeedIDs(), limit, completion) } func fetchArticles(folder: Folder) throws -> Set
{ @@ -1079,13 +1079,13 @@ private extension Account { } func fetchArticles(webFeed: Feed) throws -> Set
{ - let articles = try database.fetchArticles(webFeed.webFeedID) + let articles = try database.fetchArticles(webFeed.feedID) validateUnreadCount(webFeed, articles) return articles } func fetchArticlesAsync(webFeed: Feed, _ completion: @escaping ArticleSetResultBlock) { - database.fetchArticlesAsync(webFeed.webFeedID) { [weak self] articleSetResult in + database.fetchArticlesAsync(webFeed.feedID) { [weak self] articleSetResult in switch articleSetResult { case .success(let articles): self?.validateUnreadCount(webFeed, articles) @@ -1097,7 +1097,7 @@ private extension Account { } func fetchArticlesMatching(_ searchString: String) throws -> Set
{ - return try database.fetchArticlesMatching(searchString, flattenedWebFeeds().webFeedIDs()) + return try database.fetchArticlesMatching(searchString, flattenedFeeds().webFeedIDs()) } func fetchArticlesMatchingWithArticleIDs(_ searchString: String, _ articleIDs: Set) throws -> Set
{ @@ -1105,7 +1105,7 @@ private extension Account { } func fetchArticlesMatchingAsync(_ searchString: String, _ completion: @escaping ArticleSetResultBlock) { - database.fetchArticlesMatchingAsync(searchString, flattenedWebFeeds().webFeedIDs(), completion) + database.fetchArticlesMatchingAsync(searchString, flattenedFeeds().webFeedIDs(), completion) } func fetchArticlesMatchingWithArticleIDsAsync(_ searchString: String, _ articleIDs: Set, _ completion: @escaping ArticleSetResultBlock) { @@ -1121,20 +1121,20 @@ private extension Account { } func fetchUnreadArticles(webFeed: Feed) throws -> Set
{ - let articles = try database.fetchUnreadArticles(Set([webFeed.webFeedID]), nil) + let articles = try database.fetchUnreadArticles(Set([webFeed.feedID]), nil) validateUnreadCount(webFeed, articles) return articles } func fetchArticles(forContainer container: Container) throws -> Set
{ - let feeds = container.flattenedWebFeeds() + let feeds = container.flattenedFeeds() let articles = try database.fetchArticles(feeds.webFeedIDs()) validateUnreadCountsAfterFetchingUnreadArticles(feeds, articles) return articles } func fetchArticlesAsync(forContainer container: Container, _ completion: @escaping ArticleSetResultBlock) { - let webFeeds = container.flattenedWebFeeds() + let webFeeds = container.flattenedFeeds() database.fetchArticlesAsync(webFeeds.webFeedIDs()) { [weak self] (articleSetResult) in switch articleSetResult { case .success(let articles): @@ -1147,7 +1147,7 @@ private extension Account { } func fetchUnreadArticles(forContainer container: Container, limit: Int?) throws -> Set
{ - let feeds = container.flattenedWebFeeds() + let feeds = container.flattenedFeeds() let articles = try database.fetchUnreadArticles(feeds.webFeedIDs(), limit) // We don't validate limit queries because they, by definition, won't correctly match the @@ -1160,7 +1160,7 @@ private extension Account { } func fetchUnreadArticlesAsync(forContainer container: Container, limit: Int?, _ completion: @escaping ArticleSetResultBlock) { - let webFeeds = container.flattenedWebFeeds() + let webFeeds = container.flattenedFeeds() database.fetchUnreadArticlesAsync(webFeeds.webFeedIDs(), limit) { [weak self] (articleSetResult) in switch articleSetResult { case .success(let articles): @@ -1189,7 +1189,7 @@ private extension Account { unreadCountStorage[article.webFeedID, default: 0] += 1 } webFeeds.forEach { (webFeed) in - let unreadCount = unreadCountStorage[webFeed.webFeedID, default: 0] + let unreadCount = unreadCountStorage[webFeed.feedID, default: 0] webFeed.unreadCount = unreadCount } } @@ -1213,12 +1213,12 @@ private extension Account { private extension Account { - func webFeedMetadata(feedURL: String, webFeedID: String) -> WebFeedMetadata { + func webFeedMetadata(feedURL: String, feedID: String) -> WebFeedMetadata { if let d = webFeedMetadata[feedURL] { assert(d.delegate === self) return d } - let d = WebFeedMetadata(webFeedID: webFeedID) + let d = WebFeedMetadata(feedID: feedID) d.delegate = self webFeedMetadata[feedURL] = d return d @@ -1226,9 +1226,9 @@ private extension Account { func updateFlattenedWebFeeds() { var feeds = Set() - feeds.formUnion(topLevelWebFeeds) + feeds.formUnion(topLevelFeeds) for folder in folders! { - feeds.formUnion(folder.flattenedWebFeeds()) + feeds.formUnion(folder.flattenedFeeds()) } _flattenedWebFeeds = feeds @@ -1239,8 +1239,8 @@ private extension Account { var idDictionary = [String: Feed]() var externalIDDictionary = [String: Feed]() - flattenedWebFeeds().forEach { (feed) in - idDictionary[feed.webFeedID] = feed + flattenedFeeds().forEach { (feed) in + idDictionary[feed.feedID] = feed if let externalID = feed.externalID { externalIDDictionary[externalID] = feed } @@ -1256,7 +1256,7 @@ private extension Account { return } var updatedUnreadCount = 0 - for feed in flattenedWebFeeds() { + for feed in flattenedFeeds() { updatedUnreadCount += feed.unreadCount } unreadCount = updatedUnreadCount @@ -1304,7 +1304,7 @@ private extension Account { } func fetchUnreadCount(_ feed: Feed, _ completion: VoidCompletionBlock?) { - database.fetchUnreadCount(feed.webFeedID) { result in + database.fetchUnreadCount(feed.feedID) { result in if let unreadCount = try? result.get() { feed.unreadCount = unreadCount } @@ -1313,7 +1313,7 @@ private extension Account { } func fetchUnreadCounts(_ feeds: Set, _ completion: VoidCompletionBlock?) { - let webFeedIDs = Set(feeds.map { $0.webFeedID }) + let webFeedIDs = Set(feeds.map { $0.feedID }) database.fetchUnreadCounts(for: webFeedIDs) { result in if let unreadCountDictionary = try? result.get() { self.processUnreadCounts(unreadCountDictionary: unreadCountDictionary, feeds: feeds) @@ -1329,7 +1329,7 @@ private extension Account { completion?() return } - self.processUnreadCounts(unreadCountDictionary: unreadCountDictionary, feeds: self.flattenedWebFeeds()) + self.processUnreadCounts(unreadCountDictionary: unreadCountDictionary, feeds: self.flattenedFeeds()) self.fetchingAllUnreadCounts = false self.updateUnreadCount() @@ -1345,7 +1345,7 @@ private extension Account { func processUnreadCounts(unreadCountDictionary: UnreadCountDictionary, feeds: Set) { for feed in feeds { // When the unread count is zero, it won’t appear in unreadCountDictionary. - let unreadCount = unreadCountDictionary[feed.webFeedID] ?? 0 + let unreadCount = unreadCountDictionary[feed.feedID] ?? 0 feed.unreadCount = unreadCount } } @@ -1410,7 +1410,7 @@ extension Account: OPMLRepresentable { public func OPMLString(indentLevel: Int, allowCustomAttributes: Bool) -> String { var s = "" - for feed in topLevelWebFeeds.sorted() { + for feed in topLevelFeeds.sorted() { s += feed.OPMLString(indentLevel: indentLevel + 1, allowCustomAttributes: allowCustomAttributes) } for folder in folders!.sorted() { diff --git a/Account/Sources/Account/AccountManager.swift b/Account/Sources/Account/AccountManager.swift index 53a271881..2491fdefc 100644 --- a/Account/Sources/Account/AccountManager.swift +++ b/Account/Sources/Account/AccountManager.swift @@ -344,7 +344,7 @@ public final class AccountManager: UnreadCountProvider { public func anyAccountHasFeedWithURL(_ urlString: String) -> Bool { for account in activeAccounts { - if let _ = account.existingWebFeed(withURL: urlString) { + if let _ = account.existingFeed(withURL: urlString) { return true } } diff --git a/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift index 44ef69fc9..d78dcdde1 100644 --- a/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift @@ -358,7 +358,7 @@ final class CloudKitAccountDelegate: AccountDelegate { return } - let feedsToRestore = folder.topLevelWebFeeds + let feedsToRestore = folder.topLevelFeeds refreshProgress.addToNumberOfTasksAndRemaining(1 + feedsToRestore.count) accountZone.createFolder(name: name) { result in @@ -371,7 +371,7 @@ final class CloudKitAccountDelegate: AccountDelegate { let group = DispatchGroup() for feed in feedsToRestore { - folder.topLevelWebFeeds.remove(feed) + folder.topLevelFeeds.remove(feed) group.enter() self.restoreWebFeed(for: account, feed: feed, container: folder) { result in @@ -485,7 +485,7 @@ private extension CloudKitAccountDelegate { accountZone.fetchChangesInZone() { result in self.refreshProgress.completeTask() - let webFeeds = account.flattenedWebFeeds() + let webFeeds = account.flattenedFeeds() self.refreshProgress.addToNumberOfTasksAndRemaining(webFeeds.count) switch result { @@ -518,7 +518,7 @@ private extension CloudKitAccountDelegate { func standardRefreshAll(for account: Account, completion: @escaping (Result) -> Void) { - let intialWebFeedsCount = account.flattenedWebFeeds().count + let intialWebFeedsCount = account.flattenedFeeds().count refreshProgress.addToNumberOfTasksAndRemaining(3 + intialWebFeedsCount) func fail(_ error: Error) { @@ -532,7 +532,7 @@ private extension CloudKitAccountDelegate { case .success: self.refreshProgress.completeTask() - let webFeeds = account.flattenedWebFeeds() + let webFeeds = account.flattenedFeeds() self.refreshProgress.addToNumberOfTasksAndRemaining(webFeeds.count - intialWebFeedsCount) self.refreshArticleStatus(for: account) { result in @@ -617,7 +617,7 @@ private extension CloudKitAccountDelegate { return } - if account.hasWebFeed(withURL: bestFeedSpecifier.urlString) { + if account.hasFeed(withURL: bestFeedSpecifier.urlString) { self.refreshProgress.completeTasks(4) completion(.failure(AccountError.createErrorAlreadySubscribed)) return @@ -706,7 +706,7 @@ private extension CloudKitAccountDelegate { func processAccountError(_ account: Account, _ error: Error) { if case CloudKitZoneError.userDeletedZone = error { - account.removeFeeds(account.topLevelWebFeeds) + account.removeFeeds(account.topLevelFeeds) for folder in account.folders ?? Set() { account.removeFolder(folder) } diff --git a/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift b/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift index 6592ae7c1..ff1ddb344 100644 --- a/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift +++ b/Account/Sources/Account/CloudKit/CloudKitSendStatusOperation.swift @@ -171,7 +171,7 @@ private extension CloudKitSendStatusOperation { func processAccountError(_ account: Account, _ error: Error) { if case CloudKitZoneError.userDeletedZone = error { - account.removeFeeds(account.topLevelWebFeeds) + account.removeFeeds(account.topLevelFeeds) for folder in account.folders ?? Set() { account.removeFolder(folder) } diff --git a/Account/Sources/Account/Container.swift b/Account/Sources/Account/Container.swift index fdd6d5f26..abe1a56bb 100644 --- a/Account/Sources/Account/Container.swift +++ b/Account/Sources/Account/Container.swift @@ -19,7 +19,7 @@ extension Notification.Name { public protocol Container: AnyObject, ContainerIdentifiable { var account: Account? { get } - var topLevelWebFeeds: Set { get set } + var topLevelFeeds: Set { get set } var folders: Set? { get set } var externalID: String? { get set } @@ -33,12 +33,12 @@ public protocol Container: AnyObject, ContainerIdentifiable { func addWebFeed(_ webFeed: Feed) //Recursive — checks subfolders - func flattenedWebFeeds() -> Set + func flattenedFeeds() -> Set func has(_ webFeed: Feed) -> Bool func hasWebFeed(with webFeedID: String) -> Bool - func hasWebFeed(withURL url: String) -> Bool + func hasFeed(withURL url: String) -> Bool func existingWebFeed(withWebFeedID: String) -> Feed? - func existingWebFeed(withURL url: String) -> Feed? + func existingFeed(withURL url: String) -> Feed? func existingWebFeed(withExternalID externalID: String) -> Feed? func existingFolder(with name: String) -> Folder? func existingFolder(withID: Int) -> Folder? @@ -49,7 +49,7 @@ public protocol Container: AnyObject, ContainerIdentifiable { public extension Container { func hasAtLeastOneWebFeed() -> Bool { - return topLevelWebFeeds.count > 0 + return topLevelFeeds.count > 0 } func hasChildFolder(with name: String) -> Bool { @@ -70,7 +70,7 @@ public extension Container { func objectIsChild(_ object: AnyObject) -> Bool { if let feed = object as? Feed { - return topLevelWebFeeds.contains(feed) + return topLevelFeeds.contains(feed) } if let folder = object as? Folder { return folders?.contains(folder) ?? false @@ -78,12 +78,12 @@ public extension Container { return false } - func flattenedWebFeeds() -> Set { + func flattenedFeeds() -> Set { var feeds = Set() - feeds.formUnion(topLevelWebFeeds) + feeds.formUnion(topLevelFeeds) if let folders = folders { for folder in folders { - feeds.formUnion(folder.flattenedWebFeeds()) + feeds.formUnion(folder.flattenedFeeds()) } } return feeds @@ -93,25 +93,25 @@ public extension Container { return existingWebFeed(withWebFeedID: webFeedID) != nil } - func hasWebFeed(withURL url: String) -> Bool { - return existingWebFeed(withURL: url) != nil + func hasFeed(withURL url: String) -> Bool { + return existingFeed(withURL: url) != nil } - func has(_ webFeed: Feed) -> Bool { - return flattenedWebFeeds().contains(webFeed) + func has(_ feed: Feed) -> Bool { + return flattenedFeeds().contains(feed) } func existingWebFeed(withWebFeedID webFeedID: String) -> Feed? { - for feed in flattenedWebFeeds() { - if feed.webFeedID == webFeedID { + for feed in flattenedFeeds() { + if feed.feedID == webFeedID { return feed } } return nil } - func existingWebFeed(withURL url: String) -> Feed? { - for feed in flattenedWebFeeds() { + func existingFeed(withURL url: String) -> Feed? { + for feed in flattenedFeeds() { if feed.url == url { return feed } @@ -120,7 +120,7 @@ public extension Container { } func existingWebFeed(withExternalID externalID: String) -> Feed? { - for feed in flattenedWebFeeds() { + for feed in flattenedFeeds() { if feed.externalID == externalID { return feed } diff --git a/Account/Sources/Account/Feed.swift b/Account/Sources/Account/Feed.swift index df100a5e8..093b37a45 100644 --- a/Account/Sources/Account/Feed.swift +++ b/Account/Sources/Account/Feed.swift @@ -22,18 +22,18 @@ public final class Feed: SidebarItem, Renamable, Hashable { assertionFailure("Expected feed.account, but got nil.") return nil } - return SidebarItemIdentifier.webFeed(accountID, webFeedID) + return SidebarItemIdentifier.webFeed(accountID, feedID) } public weak var account: Account? public let url: String - public var webFeedID: String { + public var feedID: String { get { - return metadata.webFeedID + return metadata.feedID } set { - metadata.webFeedID = newValue + metadata.feedID = newValue } } @@ -264,13 +264,13 @@ public final class Feed: SidebarItem, Renamable, Hashable { // MARK: - Hashable public func hash(into hasher: inout Hasher) { - hasher.combine(webFeedID) + hasher.combine(feedID) } // MARK: - Equatable public class func ==(lhs: Feed, rhs: Feed) -> Bool { - return lhs.webFeedID == rhs.webFeedID && lhs.accountID == rhs.accountID + return lhs.feedID == rhs.feedID && lhs.accountID == rhs.accountID } } @@ -307,7 +307,7 @@ extension Feed: OPMLRepresentable { extension Set where Element == Feed { func webFeedIDs() -> Set { - return Set(map { $0.webFeedID }) + return Set(map { $0.feedID }) } func sorted() -> Array { diff --git a/Account/Sources/Account/FeedWrangler/FeedWranglerAPICaller.swift b/Account/Sources/Account/FeedWrangler/FeedWranglerAPICaller.swift index 008e21742..c28d1116c 100644 --- a/Account/Sources/Account/FeedWrangler/FeedWranglerAPICaller.swift +++ b/Account/Sources/Account/FeedWrangler/FeedWranglerAPICaller.swift @@ -173,7 +173,7 @@ final class FeedWranglerAPICaller: NSObject { let queryItems = [ URLQueryItem(name: "read", value: "false"), URLQueryItem(name: "offset", value: String(page * FeedWranglerConfig.pageSize)), - feed.map { URLQueryItem(name: "feed_id", value: $0.webFeedID) } + feed.map { URLQueryItem(name: "feed_id", value: $0.feedID) } ].compactMap { $0 } let url = FeedWranglerConfig.clientURL .appendingPathComponent("feed_items/list") diff --git a/Account/Sources/Account/FeedWrangler/FeedWranglerAccountDelegate.swift b/Account/Sources/Account/FeedWrangler/FeedWranglerAccountDelegate.swift index 5086fad8f..b4902771a 100644 --- a/Account/Sources/Account/FeedWrangler/FeedWranglerAccountDelegate.swift +++ b/Account/Sources/Account/FeedWrangler/FeedWranglerAccountDelegate.swift @@ -340,7 +340,7 @@ final class FeedWranglerAccountDelegate: AccountDelegate { DispatchQueue.main.async { let feed = account.createWebFeed(with: sub.title, url: sub.feedURL, webFeedID: String(sub.feedID), homePageURL: sub.siteURL) - account.addWebFeed(feed, to: container) { result in + account.addFeed(feed, to: container) { result in switch result { case .success: if let name = name { @@ -388,7 +388,7 @@ final class FeedWranglerAccountDelegate: AccountDelegate { self.refreshCredentials(for: account) { self.refreshProgress.completeTask() - self.caller.renameSubscription(feedID: feed.webFeedID, newName: name) { result in + self.caller.renameSubscription(feedID: feed.feedID, newName: name) { result in self.refreshProgress.completeTask() switch result { @@ -421,7 +421,7 @@ final class FeedWranglerAccountDelegate: AccountDelegate { self.refreshCredentials(for: account) { self.refreshProgress.completeTask() - self.caller.removeSubscription(feedID: feed.webFeedID) { result in + self.caller.removeSubscription(feedID: feed.feedID) { result in self.refreshProgress.completeTask() switch result { @@ -447,8 +447,8 @@ final class FeedWranglerAccountDelegate: AccountDelegate { } func restoreWebFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result) -> Void) { - if let existingFeed = account.existingWebFeed(withURL: feed.url) { - account.addWebFeed(existingFeed, to: container) { result in + if let existingFeed = account.existingFeed(withURL: feed.url) { + account.addFeed(existingFeed, to: container) { result in switch result { case .success: completion(.success(())) @@ -533,7 +533,7 @@ private extension FeedWranglerAccountDelegate { assert(Thread.isMainThread) let feedIds = subscriptions.map { String($0.feedID) } - let feedsToRemove = account.topLevelWebFeeds.filter { !feedIds.contains($0.webFeedID) } + let feedsToRemove = account.topLevelFeeds.filter { !feedIds.contains($0.feedID) } account.removeFeeds(feedsToRemove) var subscriptionsToAdd = Set() diff --git a/Account/Sources/Account/Feedbin/FeedbinAccountDelegate.swift b/Account/Sources/Account/Feedbin/FeedbinAccountDelegate.swift index da4dca147..ec042825c 100644 --- a/Account/Sources/Account/Feedbin/FeedbinAccountDelegate.swift +++ b/Account/Sources/Account/Feedbin/FeedbinAccountDelegate.swift @@ -336,7 +336,7 @@ final class FeedbinAccountDelegate: AccountDelegate { let group = DispatchGroup() - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { if feed.folderRelationship?.count ?? 0 > 1 { @@ -472,7 +472,7 @@ final class FeedbinAccountDelegate: AccountDelegate { func addWebFeed(for account: Account, with feed: Feed, to container: Container, completion: @escaping (Result) -> Void) { - if let folder = container as? Folder, let webFeedID = Int(feed.webFeedID) { + if let folder = container as? Folder, let webFeedID = Int(feed.feedID) { refreshProgress.addToNumberOfTasksAndRemaining(1) caller.createTagging(webFeedID: webFeedID, name: folder.name ?? "") { result in self.refreshProgress.completeTask() @@ -504,8 +504,8 @@ final class FeedbinAccountDelegate: AccountDelegate { func restoreWebFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result) -> Void) { - if let existingFeed = account.existingWebFeed(withURL: feed.url) { - account.addWebFeed(existingFeed, to: container) { result in + if let existingFeed = account.existingFeed(withURL: feed.url) { + account.addFeed(existingFeed, to: container) { result in switch result { case .success: completion(.success(())) @@ -530,9 +530,9 @@ final class FeedbinAccountDelegate: AccountDelegate { let group = DispatchGroup() - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { - folder.topLevelWebFeeds.remove(feed) + folder.topLevelFeeds.remove(feed) group.enter() restoreWebFeed(for: account, feed: feed, container: folder) { result in @@ -780,7 +780,7 @@ private extension FeedbinAccountDelegate { if let folders = account.folders { folders.forEach { folder in if !tagNames.contains(folder.name ?? "") { - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { account.addWebFeed(feed) clearFolderRelationship(for: feed, withFolderName: folder.name ?? "") } @@ -818,16 +818,16 @@ private extension FeedbinAccountDelegate { // Remove any feeds that are no longer in the subscriptions if let folders = account.folders { for folder in folders { - for feed in folder.topLevelWebFeeds { - if !subFeedIds.contains(feed.webFeedID) { + for feed in folder.topLevelFeeds { + if !subFeedIds.contains(feed.feedID) { folder.removeWebFeed(feed) } } } } - for feed in account.topLevelWebFeeds { - if !subFeedIds.contains(feed.webFeedID) { + for feed in account.topLevelFeeds { + if !subFeedIds.contains(feed.feedID) { account.removeWebFeed(feed) } } @@ -888,8 +888,8 @@ private extension FeedbinAccountDelegate { let taggingFeedIDs = groupedTaggings.map { String($0.feedID) } // Move any feeds not in the folder to the account - for feed in folder.topLevelWebFeeds { - if !taggingFeedIDs.contains(feed.webFeedID) { + for feed in folder.topLevelFeeds { + if !taggingFeedIDs.contains(feed.feedID) { folder.removeWebFeed(feed) clearFolderRelationship(for: feed, withFolderName: folder.name ?? "") account.addWebFeed(feed) @@ -897,7 +897,7 @@ private extension FeedbinAccountDelegate { } // Add any feeds not in the folder - let folderFeedIds = folder.topLevelWebFeeds.map { $0.webFeedID } + let folderFeedIds = folder.topLevelFeeds.map { $0.feedID } for tagging in groupedTaggings { let taggingFeedID = String(tagging.feedID) @@ -915,8 +915,8 @@ private extension FeedbinAccountDelegate { let taggedFeedIDs = Set(taggings.map { String($0.feedID) }) // Remove all feeds from the account container that have a tag - for feed in account.topLevelWebFeeds { - if taggedFeedIDs.contains(feed.webFeedID) { + for feed in account.topLevelFeeds { + if taggedFeedIDs.contains(feed.feedID) { account.removeWebFeed(feed) } } @@ -980,7 +980,7 @@ private extension FeedbinAccountDelegate { } func renameFolderRelationship(for account: Account, fromName: String, toName: String) { - for feed in account.flattenedWebFeeds() { + for feed in account.flattenedFeeds() { if var folderRelationship = feed.folderRelationship { let relationship = folderRelationship[fromName] folderRelationship[fromName] = nil @@ -1034,7 +1034,7 @@ private extension FeedbinAccountDelegate { feed.iconURL = sub.jsonFeed?.icon feed.faviconURL = sub.jsonFeed?.favicon - account.addWebFeed(feed, to: container) { result in + account.addFeed(feed, to: container) { result in switch result { case .success: if let name = name { @@ -1064,7 +1064,7 @@ private extension FeedbinAccountDelegate { refreshProgress.addToNumberOfTasksAndRemaining(4) // Download the initial articles - self.caller.retrieveEntries(feedID: feed.webFeedID) { result in + self.caller.retrieveEntries(feedID: feed.feedID) { result in self.refreshProgress.completeTask() switch result { diff --git a/Account/Sources/Account/Feedly/FeedlyAccountDelegate.swift b/Account/Sources/Account/Feedly/FeedlyAccountDelegate.swift index abd8585cd..441a2a1bf 100644 --- a/Account/Sources/Account/Feedly/FeedlyAccountDelegate.swift +++ b/Account/Sources/Account/Feedly/FeedlyAccountDelegate.swift @@ -354,7 +354,7 @@ final class FeedlyAccountDelegate: AccountDelegate { return } - let feedId = FeedlyFeedResourceId(id: feed.webFeedID) + let feedId = FeedlyFeedResourceId(id: feed.feedID) let editedNameBefore = feed.editedName // Adding an existing feed updates it. @@ -381,7 +381,7 @@ final class FeedlyAccountDelegate: AccountDelegate { throw FeedlyAccountDelegateError.notLoggedIn } - let resource = FeedlyFeedResourceId(id: feed.webFeedID) + let resource = FeedlyFeedResourceId(id: feed.feedID) let addExistingFeed = try FeedlyAddExistingFeedOperation(account: account, credentials: credentials, resource: resource, @@ -412,7 +412,7 @@ final class FeedlyAccountDelegate: AccountDelegate { } } - caller.removeFeed(feed.webFeedID, fromCollectionWith: collectionId) { result in + caller.removeFeed(feed.feedID, fromCollectionWith: collectionId) { result in switch result { case .success: completion(.success(())) @@ -459,8 +459,8 @@ final class FeedlyAccountDelegate: AccountDelegate { } func restoreWebFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result) -> Void) { - if let existingFeed = account.existingWebFeed(withURL: feed.url) { - account.addWebFeed(existingFeed, to: container) { result in + if let existingFeed = account.existingFeed(withURL: feed.url) { + account.addFeed(existingFeed, to: container) { result in switch result { case .success: completion(.success(())) @@ -483,9 +483,9 @@ final class FeedlyAccountDelegate: AccountDelegate { func restoreFolder(for account: Account, folder: Folder, completion: @escaping (Result) -> Void) { let group = DispatchGroup() - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { - folder.topLevelWebFeeds.remove(feed) + folder.topLevelFeeds.remove(feed) group.enter() restoreWebFeed(for: account, feed: feed, container: folder) { result in diff --git a/Account/Sources/Account/Feedly/Operations/FeedlyCreateFeedsForCollectionFoldersOperation.swift b/Account/Sources/Account/Feedly/Operations/FeedlyCreateFeedsForCollectionFoldersOperation.swift index 965a8f9b0..149311f1f 100644 --- a/Account/Sources/Account/Feedly/Operations/FeedlyCreateFeedsForCollectionFoldersOperation.swift +++ b/Account/Sources/Account/Feedly/Operations/FeedlyCreateFeedsForCollectionFoldersOperation.swift @@ -31,13 +31,13 @@ final class FeedlyCreateFeedsForCollectionFoldersOperation: FeedlyOperation { let feedsBefore = Set(pairs .map { $0.1 } - .flatMap { $0.topLevelWebFeeds }) + .flatMap { $0.topLevelFeeds }) // Remove feeds in a folder which are not in the corresponding collection. for (collectionFeeds, folder) in pairs { - let feedsInFolder = folder.topLevelWebFeeds + let feedsInFolder = folder.topLevelFeeds let feedsInCollection = Set(collectionFeeds.map { $0.id }) - let feedsToRemove = feedsInFolder.filter { !feedsInCollection.contains($0.webFeedID) } + let feedsToRemove = feedsInFolder.filter { !feedsInCollection.contains($0.feedID) } if !feedsToRemove.isEmpty { folder.removeFeeds(feedsToRemove) // os_log(.debug, log: log, "\"%@\" - removed: %@", collection.label, feedsToRemove.map { $0.feedID }, feedsInCollection) @@ -76,7 +76,7 @@ final class FeedlyCreateFeedsForCollectionFoldersOperation: FeedlyOperation { return (feed, folder) } else { // find an existing feed we created below in an earlier value - for feed in feedsAdded where feed.webFeedID == collectionFeed.id { + for feed in feedsAdded where feed.feedID == collectionFeed.id { return (feed, folder) } } diff --git a/Account/Sources/Account/Folder.swift b/Account/Sources/Account/Folder.swift index 3a4c6aa17..09bb68718 100644 --- a/Account/Sources/Account/Folder.swift +++ b/Account/Sources/Account/Folder.swift @@ -33,7 +33,7 @@ public final class Folder: SidebarItem, Renamable, Container, Hashable { } public weak var account: Account? - public var topLevelWebFeeds: Set = Set() + public var topLevelFeeds: Set = Set() public var folders: Set? = nil // subfolders are not supported, so this is always nil public var name: String? { @@ -100,9 +100,9 @@ public final class Folder: SidebarItem, Renamable, Container, Hashable { // MARK: Container - public func flattenedWebFeeds() -> Set { + public func flattenedFeeds() -> Set { // Since sub-folders are not supported, it’s always the top-level feeds. - return topLevelWebFeeds + return topLevelFeeds } public func objectIsChild(_ object: AnyObject) -> Bool { @@ -110,11 +110,11 @@ public final class Folder: SidebarItem, Renamable, Container, Hashable { guard let feed = object as? Feed else { return false } - return topLevelWebFeeds.contains(feed) + return topLevelFeeds.contains(feed) } public func addWebFeed(_ feed: Feed) { - topLevelWebFeeds.insert(feed) + topLevelFeeds.insert(feed) postChildrenDidChangeNotification() } @@ -122,12 +122,12 @@ public final class Folder: SidebarItem, Renamable, Container, Hashable { guard !feeds.isEmpty else { return } - topLevelWebFeeds.formUnion(feeds) + topLevelFeeds.formUnion(feeds) postChildrenDidChangeNotification() } public func removeWebFeed(_ feed: Feed) { - topLevelWebFeeds.remove(feed) + topLevelFeeds.remove(feed) postChildrenDidChangeNotification() } @@ -135,7 +135,7 @@ public final class Folder: SidebarItem, Renamable, Container, Hashable { guard !feeds.isEmpty else { return } - topLevelWebFeeds.subtract(feeds) + topLevelFeeds.subtract(feeds) postChildrenDidChangeNotification() } @@ -158,14 +158,14 @@ private extension Folder { func updateUnreadCount() { var updatedUnreadCount = 0 - for feed in topLevelWebFeeds { + for feed in topLevelFeeds { updatedUnreadCount += feed.unreadCount } unreadCount = updatedUnreadCount } func childrenContain(_ feed: Feed) -> Bool { - return topLevelWebFeeds.contains(feed) + return topLevelFeeds.contains(feed) } } @@ -189,7 +189,7 @@ extension Folder: OPMLRepresentable { var hasAtLeastOneChild = false - for feed in topLevelWebFeeds.sorted() { + for feed in topLevelFeeds.sorted() { s += feed.OPMLString(indentLevel: indentLevel + 1, allowCustomAttributes: allowCustomAttributes) hasAtLeastOneChild = true } diff --git a/Account/Sources/Account/LocalAccount/LocalAccountDelegate.swift b/Account/Sources/Account/LocalAccount/LocalAccountDelegate.swift index 12caea46a..077b58e2e 100644 --- a/Account/Sources/Account/LocalAccount/LocalAccountDelegate.swift +++ b/Account/Sources/Account/LocalAccount/LocalAccountDelegate.swift @@ -50,7 +50,7 @@ final class LocalAccountDelegate: AccountDelegate { return } - let webFeeds = account.flattenedWebFeeds() + let webFeeds = account.flattenedFeeds() refreshProgress.addToNumberOfTasksAndRemaining(webFeeds.count) let group = DispatchGroup() @@ -250,7 +250,7 @@ private extension LocalAccountDelegate { return } - if account.hasWebFeed(withURL: bestFeedSpecifier.urlString) { + if account.hasFeed(withURL: bestFeedSpecifier.urlString) { self.refreshProgress.completeTask() BatchUpdate.shared.end() completion(.failure(AccountError.createErrorAlreadySubscribed)) diff --git a/Account/Sources/Account/NewsBlur/Internals/NewsBlurAccountDelegate+Internal.swift b/Account/Sources/Account/NewsBlur/Internals/NewsBlurAccountDelegate+Internal.swift index f4c22bbed..193f936bf 100644 --- a/Account/Sources/Account/NewsBlur/Internals/NewsBlurAccountDelegate+Internal.swift +++ b/Account/Sources/Account/NewsBlur/Internals/NewsBlurAccountDelegate+Internal.swift @@ -47,7 +47,7 @@ extension NewsBlurAccountDelegate { if let folders = account.folders { folders.forEach { folder in if !folderNames.contains(folder.name ?? "") { - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { account.addWebFeed(feed) clearFolderRelationship(for: feed, withFolderName: folder.name ?? "") } @@ -84,16 +84,16 @@ extension NewsBlurAccountDelegate { // Remove any feeds that are no longer in the subscriptions if let folders = account.folders { for folder in folders { - for feed in folder.topLevelWebFeeds { - if !newsBlurFeedIds.contains(feed.webFeedID) { + for feed in folder.topLevelFeeds { + if !newsBlurFeedIds.contains(feed.feedID) { folder.removeWebFeed(feed) } } } } - for feed in account.topLevelWebFeeds { - if !newsBlurFeedIds.contains(feed.webFeedID) { + for feed in account.topLevelFeeds { + if !newsBlurFeedIds.contains(feed.feedID) { account.removeWebFeed(feed) } } @@ -155,8 +155,8 @@ extension NewsBlurAccountDelegate { guard let folder = folderDict[folderName] else { return } // Move any feeds not in the folder to the account - for feed in folder.topLevelWebFeeds { - if !newsBlurFolderFeedIDs.contains(feed.webFeedID) { + for feed in folder.topLevelFeeds { + if !newsBlurFolderFeedIDs.contains(feed.feedID) { folder.removeWebFeed(feed) clearFolderRelationship(for: feed, withFolderName: folder.name ?? "") account.addWebFeed(feed) @@ -164,7 +164,7 @@ extension NewsBlurAccountDelegate { } // Add any feeds not in the folder - let folderFeedIds = folder.topLevelWebFeeds.map { $0.webFeedID } + let folderFeedIds = folder.topLevelFeeds.map { $0.feedID } for relationship in folderRelationships { let folderFeedID = String(relationship.feedID) @@ -182,13 +182,13 @@ extension NewsBlurAccountDelegate { // in folders and we need to remove them all from the account level. if let folderRelationships = newsBlurFolderDict[" "] { let newsBlurFolderFeedIDs = folderRelationships.map { String($0.feedID) } - for feed in account.topLevelWebFeeds { - if !newsBlurFolderFeedIDs.contains(feed.webFeedID) { + for feed in account.topLevelFeeds { + if !newsBlurFolderFeedIDs.contains(feed.feedID) { account.removeWebFeed(feed) } } } else { - for feed in account.topLevelWebFeeds { + for feed in account.topLevelFeeds { account.removeWebFeed(feed) } } @@ -423,7 +423,7 @@ extension NewsBlurAccountDelegate { webFeed.externalID = String(feed.feedID) webFeed.faviconURL = feed.faviconURL - account.addWebFeed(webFeed, to: container) { result in + account.addFeed(webFeed, to: container) { result in switch result { case .success: if let name = name { @@ -448,7 +448,7 @@ extension NewsBlurAccountDelegate { func downloadFeed(account: Account, feed: Feed, page: Int, completion: @escaping (Result) -> Void) { refreshProgress.addToNumberOfTasksAndRemaining(1) - caller.retrieveStories(feedID: feed.webFeedID, page: page) { result in + caller.retrieveStories(feedID: feed.feedID, page: page) { result in switch result { case .success((let stories, _)): // No more stories @@ -529,7 +529,7 @@ extension NewsBlurAccountDelegate { switch result { case .success: DispatchQueue.main.async { - let feedID = feed.webFeedID + let feedID = feed.feedID if folderName == nil { account.removeWebFeed(feed) diff --git a/Account/Sources/Account/NewsBlur/NewsBlurAccountDelegate.swift b/Account/Sources/Account/NewsBlur/NewsBlurAccountDelegate.swift index bb5faf7cf..7e3938799 100644 --- a/Account/Sources/Account/NewsBlur/NewsBlurAccountDelegate.swift +++ b/Account/Sources/Account/NewsBlur/NewsBlurAccountDelegate.swift @@ -400,7 +400,7 @@ final class NewsBlurAccountDelegate: AccountDelegate { } var feedIDs: [String] = [] - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { if (feed.folderRelationship?.count ?? 0) > 1 { clearFolderRelationship(for: feed, withFolderName: folderToRemove) } else if let feedID = feed.externalID { @@ -520,8 +520,8 @@ final class NewsBlurAccountDelegate: AccountDelegate { } func restoreWebFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result) -> ()) { - if let existingFeed = account.existingWebFeed(withURL: feed.url) { - account.addWebFeed(existingFeed, to: container) { result in + if let existingFeed = account.existingFeed(withURL: feed.url) { + account.addFeed(existingFeed, to: container) { result in switch result { case .success: completion(.success(())) @@ -548,9 +548,9 @@ final class NewsBlurAccountDelegate: AccountDelegate { } var feedsToRestore: [Feed] = [] - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { feedsToRestore.append(feed) - folder.topLevelWebFeeds.remove(feed) + folder.topLevelFeeds.remove(feed) } let group = DispatchGroup() diff --git a/Account/Sources/Account/ReaderAPI/ReaderAPIAccountDelegate.swift b/Account/Sources/Account/ReaderAPI/ReaderAPIAccountDelegate.swift index c271e02ec..1c59dea3f 100644 --- a/Account/Sources/Account/ReaderAPI/ReaderAPIAccountDelegate.swift +++ b/Account/Sources/Account/ReaderAPI/ReaderAPIAccountDelegate.swift @@ -326,7 +326,7 @@ final class ReaderAPIAccountDelegate: AccountDelegate { let group = DispatchGroup() - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { if feed.folderRelationship?.count ?? 0 > 1 { @@ -556,8 +556,8 @@ final class ReaderAPIAccountDelegate: AccountDelegate { func restoreWebFeed(for account: Account, feed: Feed, container: Container, completion: @escaping (Result) -> Void) { - if let existingFeed = account.existingWebFeed(withURL: feed.url) { - account.addWebFeed(existingFeed, to: container) { result in + if let existingFeed = account.existingFeed(withURL: feed.url) { + account.addFeed(existingFeed, to: container) { result in switch result { case .success: completion(.success(())) @@ -582,9 +582,9 @@ final class ReaderAPIAccountDelegate: AccountDelegate { let group = DispatchGroup() - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { - folder.topLevelWebFeeds.remove(feed) + folder.topLevelFeeds.remove(feed) group.enter() restoreWebFeed(for: account, feed: feed, container: folder) { result in @@ -719,7 +719,7 @@ private extension ReaderAPIAccountDelegate { if let folders = account.folders { folders.forEach { folder in if !readerFolderExternalIDs.contains(folder.externalID ?? "") { - for feed in folder.topLevelWebFeeds { + for feed in folder.topLevelFeeds { account.addWebFeed(feed) clearFolderRelationship(for: feed, folderExternalID: folder.externalID) } @@ -758,16 +758,16 @@ private extension ReaderAPIAccountDelegate { // Remove any feeds that are no longer in the subscriptions if let folders = account.folders { for folder in folders { - for feed in folder.topLevelWebFeeds { - if !subFeedIds.contains(feed.webFeedID) { + for feed in folder.topLevelFeeds { + if !subFeedIds.contains(feed.feedID) { folder.removeWebFeed(feed) } } } } - for feed in account.topLevelWebFeeds { - if !subFeedIds.contains(feed.webFeedID) { + for feed in account.topLevelFeeds { + if !subFeedIds.contains(feed.feedID) { account.clearWebFeedMetadata(feed) account.removeWebFeed(feed) } @@ -818,8 +818,8 @@ private extension ReaderAPIAccountDelegate { let taggingFeedIDs = groupedTaggings.map { $0.feedID } // Move any feeds not in the folder to the account - for feed in folder.topLevelWebFeeds { - if !taggingFeedIDs.contains(feed.webFeedID) { + for feed in folder.topLevelFeeds { + if !taggingFeedIDs.contains(feed.feedID) { folder.removeWebFeed(feed) clearFolderRelationship(for: feed, folderExternalID: folder.externalID) account.addWebFeed(feed) @@ -827,7 +827,7 @@ private extension ReaderAPIAccountDelegate { } // Add any feeds not in the folder - let folderFeedIds = folder.topLevelWebFeeds.map { $0.webFeedID } + let folderFeedIds = folder.topLevelFeeds.map { $0.feedID } for subscription in groupedTaggings { let taggingFeedID = subscription.feedID @@ -845,8 +845,8 @@ private extension ReaderAPIAccountDelegate { let taggedFeedIDs = Set(subscriptions.filter({ !$0.categories.isEmpty }).map { String($0.feedID) }) // Remove all feeds from the account container that have a tag - for feed in account.topLevelWebFeeds { - if taggedFeedIDs.contains(feed.webFeedID) { + for feed in account.topLevelFeeds { + if taggedFeedIDs.contains(feed.feedID) { account.removeWebFeed(feed) } } @@ -924,7 +924,7 @@ private extension ReaderAPIAccountDelegate { let feed = account.createWebFeed(with: sub.name, url: sub.url, webFeedID: String(sub.feedID), homePageURL: sub.homePageURL) feed.externalID = String(sub.feedID) - account.addWebFeed(feed, to: container) { result in + account.addFeed(feed, to: container) { result in switch result { case .success: if let name = name { @@ -952,7 +952,7 @@ private extension ReaderAPIAccountDelegate { refreshProgress.addToNumberOfTasksAndRemaining(5) // Download the initial articles - self.caller.retrieveItemIDs(type: .allForFeed, webFeedID: feed.webFeedID) { result in + self.caller.retrieveItemIDs(type: .allForFeed, webFeedID: feed.feedID) { result in self.refreshProgress.completeTask() switch result { case .success(let articleIDs): diff --git a/Account/Sources/Account/WebFeedMetadata.swift b/Account/Sources/Account/WebFeedMetadata.swift index aa381709f..0f3af38a2 100644 --- a/Account/Sources/Account/WebFeedMetadata.swift +++ b/Account/Sources/Account/WebFeedMetadata.swift @@ -17,7 +17,7 @@ protocol WebFeedMetadataDelegate: AnyObject { final class WebFeedMetadata: Codable { enum CodingKeys: String, CodingKey { - case webFeedID = "feedID" + case feedID case homePageURL case iconURL case faviconURL @@ -32,10 +32,10 @@ final class WebFeedMetadata: Codable { case folderRelationship } - var webFeedID: String { + var feedID: String { didSet { - if webFeedID != oldValue { - valueDidChange(.webFeedID) + if feedID != oldValue { + valueDidChange(.feedID) } } } @@ -139,8 +139,8 @@ final class WebFeedMetadata: Codable { weak var delegate: WebFeedMetadataDelegate? - init(webFeedID: String) { - self.webFeedID = webFeedID + init(feedID: String) { + self.feedID = feedID } func valueDidChange(_ key: CodingKeys) { diff --git a/Account/Sources/Account/WebFeedMetadataFile.swift b/Account/Sources/Account/WebFeedMetadataFile.swift index be04530d7..7bfceea5d 100644 --- a/Account/Sources/Account/WebFeedMetadataFile.swift +++ b/Account/Sources/Account/WebFeedMetadataFile.swift @@ -75,7 +75,7 @@ private extension WebFeedMetadataFile { private func metadataForOnlySubscribedToFeeds() -> Account.WebFeedMetadataDictionary { let webFeedIDs = account.idToWebFeedDictionary.keys return account.webFeedMetadata.filter { (feedID: String, metadata: WebFeedMetadata) -> Bool in - return webFeedIDs.contains(metadata.webFeedID) + return webFeedIDs.contains(metadata.feedID) } } diff --git a/Mac/MainWindow/AddFeed/AddFeedController.swift b/Mac/MainWindow/AddFeed/AddFeedController.swift index 0f448ca69..5d8980703 100644 --- a/Mac/MainWindow/AddFeed/AddFeedController.swift +++ b/Mac/MainWindow/AddFeed/AddFeedController.swift @@ -56,12 +56,12 @@ class AddFeedController: AddFeedWindowControllerDelegate { } let account = accountAndFolderSpecifier.account - if account.hasWebFeed(withURL: url.absoluteString) { + if account.hasFeed(withURL: url.absoluteString) { showAlreadySubscribedError(url.absoluteString) return } - account.createWebFeed(url: url.absoluteString, name: title, container: container, validateFeed: true) { result in + account.createFeed(url: url.absoluteString, name: title, container: container, validateFeed: true) { result in DispatchQueue.main.async { self.endShowingProgress() @@ -69,7 +69,7 @@ class AddFeedController: AddFeedWindowControllerDelegate { switch result { case .success(let feed): - NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.webFeed: feed]) + NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.feed: feed]) case .failure(let error): switch error { case AccountError.createErrorAlreadySubscribed: diff --git a/Mac/MainWindow/Sidebar/PasteboardFeed.swift b/Mac/MainWindow/Sidebar/PasteboardFeed.swift index cacf25124..074dc32b2 100644 --- a/Mac/MainWindow/Sidebar/PasteboardFeed.swift +++ b/Mac/MainWindow/Sidebar/PasteboardFeed.swift @@ -70,11 +70,11 @@ struct PasteboardFeed: Hashable { init?(pasteboardItem: NSPasteboardItem) { var pasteboardType: NSPasteboard.PasteboardType? - if pasteboardItem.types.contains(WebFeedPasteboardWriter.webFeedUTIInternalType) { - pasteboardType = WebFeedPasteboardWriter.webFeedUTIInternalType + if pasteboardItem.types.contains(FeedPasteboardWriter.feedUTIInternalType) { + pasteboardType = FeedPasteboardWriter.feedUTIInternalType } - else if pasteboardItem.types.contains(WebFeedPasteboardWriter.webFeedUTIType) { - pasteboardType = WebFeedPasteboardWriter.webFeedUTIType + else if pasteboardItem.types.contains(FeedPasteboardWriter.feedUTIType) { + pasteboardType = FeedPasteboardWriter.feedUTIType } if let foundType = pasteboardType { if let feedDictionary = pasteboardItem.propertyList(forType: foundType) as? PasteboardFeedDictionary { @@ -107,8 +107,8 @@ struct PasteboardFeed: Hashable { guard let items = pasteboard.pasteboardItems else { return nil } - let webFeeds = items.compactMap { PasteboardFeed(pasteboardItem: $0) } - return webFeeds.isEmpty ? nil : Set(webFeeds) + let feeds = items.compactMap { PasteboardFeed(pasteboardItem: $0) } + return feeds.isEmpty ? nil : Set(feeds) } // MARK: - Writing @@ -149,28 +149,28 @@ struct PasteboardFeed: Hashable { extension Feed: @retroactive PasteboardWriterOwner { public var pasteboardWriter: NSPasteboardWriting { - return WebFeedPasteboardWriter(webFeed: self) + return FeedPasteboardWriter(feed: self) } } -@objc final class WebFeedPasteboardWriter: NSObject, NSPasteboardWriting { +@objc final class FeedPasteboardWriter: NSObject, NSPasteboardWriting { - private let webFeed: Feed - static let webFeedUTI = "com.ranchero.webFeed" - static let webFeedUTIType = NSPasteboard.PasteboardType(rawValue: webFeedUTI) - static let webFeedUTIInternal = "com.ranchero.NetNewsWire-Evergreen.internal.webFeed" - static let webFeedUTIInternalType = NSPasteboard.PasteboardType(rawValue: webFeedUTIInternal) + private let feed: Feed + static let feedUTI = "com.ranchero.feed" + static let feedUTIType = NSPasteboard.PasteboardType(rawValue: feedUTI) + static let feedUTIInternal = "com.ranchero.NetNewsWire-Evergreen.internal.feed" + static let feedUTIInternalType = NSPasteboard.PasteboardType(rawValue: feedUTIInternal) - init(webFeed: Feed) { - self.webFeed = webFeed + init(feed: Feed) { + self.feed = feed } // MARK: - NSPasteboardWriting func writableTypes(for pasteboard: NSPasteboard) -> [NSPasteboard.PasteboardType] { - return [WebFeedPasteboardWriter.webFeedUTIType, .URL, .string, WebFeedPasteboardWriter.webFeedUTIInternalType] + return [FeedPasteboardWriter.feedUTIType, .URL, .string, FeedPasteboardWriter.feedUTIInternalType] } func pasteboardPropertyList(forType type: NSPasteboard.PasteboardType) -> Any? { @@ -179,12 +179,12 @@ extension Feed: @retroactive PasteboardWriterOwner { switch type { case .string: - plist = webFeed.nameForDisplay + plist = feed.nameForDisplay case .URL: - plist = webFeed.url - case WebFeedPasteboardWriter.webFeedUTIType: + plist = feed.url + case FeedPasteboardWriter.feedUTIType: plist = exportDictionary - case WebFeedPasteboardWriter.webFeedUTIInternalType: + case FeedPasteboardWriter.feedUTIInternalType: plist = internalDictionary default: plist = nil @@ -194,10 +194,10 @@ extension Feed: @retroactive PasteboardWriterOwner { } } -private extension WebFeedPasteboardWriter { +private extension FeedPasteboardWriter { var pasteboardFeed: PasteboardFeed { - return PasteboardFeed(url: webFeed.url, feedID: webFeed.webFeedID, homePageURL: webFeed.homePageURL, name: webFeed.name, editedName: webFeed.editedName, accountID: webFeed.account?.accountID, accountType: webFeed.account?.type) + return PasteboardFeed(url: feed.url, feedID: feed.feedID, homePageURL: feed.homePageURL, name: feed.name, editedName: feed.editedName, accountID: feed.account?.accountID, accountType: feed.account?.type) } var exportDictionary: PasteboardFeedDictionary { diff --git a/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift b/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift index af8984c01..a07545fa5 100644 --- a/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift +++ b/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift @@ -308,12 +308,12 @@ private extension SidebarOutlineDataSource { return localDragOperation(parentNode: parentNode) } - func copyWebFeedInAccount(node: Node, to parentNode: Node) { + func copyFeedInAccount(node: Node, to parentNode: Node) { guard let feed = node.representedObject as? Feed, let destination = parentNode.representedObject as? Container else { return } - destination.account?.addWebFeed(feed, to: destination) { result in + destination.account?.addFeed(feed, to: destination) { result in switch result { case .success: break @@ -323,7 +323,7 @@ private extension SidebarOutlineDataSource { } } - func moveWebFeedInAccount(node: Node, to parentNode: Node) { + func moveFeedInAccount(node: Node, to parentNode: Node) { guard let feed = node.representedObject as? Feed, let source = node.parent?.representedObject as? Container, let destination = parentNode.representedObject as? Container else { @@ -331,7 +331,7 @@ private extension SidebarOutlineDataSource { } BatchUpdate.shared.start() - source.account?.moveWebFeed(feed, from: source, to: destination) { result in + source.account?.moveFeed(feed, from: source, to: destination) { result in BatchUpdate.shared.end() switch result { case .success: @@ -342,15 +342,15 @@ private extension SidebarOutlineDataSource { } } - func copyWebFeedBetweenAccounts(node: Node, to parentNode: Node) { + func copyFeedBetweenAccounts(node: Node, to parentNode: Node) { guard let feed = node.representedObject as? Feed, let destinationAccount = nodeAccount(parentNode), let destinationContainer = parentNode.representedObject as? Container else { return } - if let existingFeed = destinationAccount.existingWebFeed(withURL: feed.url) { - destinationAccount.addWebFeed(existingFeed, to: destinationContainer) { result in + if let existingFeed = destinationAccount.existingFeed(withURL: feed.url) { + destinationAccount.addFeed(existingFeed, to: destinationContainer) { result in switch result { case .success: break @@ -359,7 +359,7 @@ private extension SidebarOutlineDataSource { } } } else { - destinationAccount.createWebFeed(url: feed.url, name: feed.nameForDisplay, container: destinationContainer, validateFeed: false) { result in + destinationAccount.createFeed(url: feed.url, name: feed.nameForDisplay, container: destinationContainer, validateFeed: false) { result in switch result { case .success: break @@ -378,12 +378,12 @@ private extension SidebarOutlineDataSource { draggedNodes.forEach { node in if sameAccount(node, parentNode) { if NSApplication.shared.currentEvent?.modifierFlags.contains(.option) ?? false { - copyWebFeedInAccount(node: node, to: parentNode) + copyFeedInAccount(node: node, to: parentNode) } else { - moveWebFeedInAccount(node: node, to: parentNode) + moveFeedInAccount(node: node, to: parentNode) } } else { - copyWebFeedBetweenAccounts(node: node, to: parentNode) + copyFeedBetweenAccounts(node: node, to: parentNode) } } @@ -431,9 +431,9 @@ private extension SidebarOutlineDataSource { destinationAccount.addFolder(folder.name ?? "") { result in switch result { case .success(let destinationFolder): - for feed in folder.topLevelWebFeeds { - if let existingFeed = destinationAccount.existingWebFeed(withURL: feed.url) { - destinationAccount.addWebFeed(existingFeed, to: destinationFolder) { result in + for feed in folder.topLevelFeeds { + if let existingFeed = destinationAccount.existingFeed(withURL: feed.url) { + destinationAccount.addFeed(existingFeed, to: destinationFolder) { result in switch result { case .success: break @@ -442,7 +442,7 @@ private extension SidebarOutlineDataSource { } } } else { - destinationAccount.createWebFeed(url: feed.url, name: feed.nameForDisplay, container: destinationFolder, validateFeed: false) { result in + destinationAccount.createFeed(url: feed.url, name: feed.nameForDisplay, container: destinationFolder, validateFeed: false) { result in switch result { case .success: break @@ -520,8 +520,8 @@ private extension SidebarOutlineDataSource { return account } else if let folder = node.representedObject as? Folder { return folder.account - } else if let webFeed = node.representedObject as? Feed { - return webFeed.account + } else if let feed = node.representedObject as? Feed { + return feed.account } else { return nil } @@ -602,7 +602,7 @@ private extension SidebarOutlineDataSource { return true } } else { - if dropTargetAccount.hasWebFeed(withURL: draggedFeed.url) { + if dropTargetAccount.hasFeed(withURL: draggedFeed.url) { return true } } diff --git a/Mac/MainWindow/Sidebar/SidebarViewController.swift b/Mac/MainWindow/Sidebar/SidebarViewController.swift index bcdaf3fda..77249f789 100644 --- a/Mac/MainWindow/Sidebar/SidebarViewController.swift +++ b/Mac/MainWindow/Sidebar/SidebarViewController.swift @@ -29,7 +29,7 @@ protocol SidebarDelegate: AnyObject { weak var delegate: SidebarDelegate? private let rebuildTreeAndRestoreSelectionQueue = CoalescingQueue(name: "Rebuild Tree Queue", interval: 1.0) - let treeControllerDelegate = WebFeedTreeControllerDelegate() + let treeControllerDelegate = FeedTreeControllerDelegate() lazy var treeController: TreeController = { return TreeController(delegate: treeControllerDelegate) }() @@ -64,7 +64,7 @@ protocol SidebarDelegate: AnyObject { outlineView.dataSource = dataSource outlineView.doubleAction = #selector(doubleClickedSidebar(_:)) outlineView.setDraggingSourceOperationMask([.move, .copy], forLocal: true) - outlineView.registerForDraggedTypes([WebFeedPasteboardWriter.webFeedUTIInternalType, WebFeedPasteboardWriter.webFeedUTIType, .URL, .string]) + outlineView.registerForDraggedTypes([FeedPasteboardWriter.feedUTIInternalType, FeedPasteboardWriter.feedUTIType, .URL, .string]) NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidInitialize(_:)), name: .UnreadCountDidInitialize, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil) @@ -75,8 +75,8 @@ protocol SidebarDelegate: AnyObject { NotificationCenter.default.addObserver(self, selector: #selector(userDidAddFeed(_:)), name: .UserDidAddFeed, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(batchUpdateDidPerform(_:)), name: .BatchUpdateDidPerform, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(faviconDidBecomeAvailable(_:)), name: .FaviconDidBecomeAvailable, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(webFeedIconDidBecomeAvailable(_:)), name: .FeedIconDidBecomeAvailable, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(webFeedSettingDidChange(_:)), name: .FeedSettingDidChange, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(feedIconDidBecomeAvailable(_:)), name: .FeedIconDidBecomeAvailable, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(feedSettingDidChange(_:)), name: .FeedSettingDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil) DistributedNotificationCenter.default().addObserver(self, selector: #selector(appleSideBarDefaultIconSizeChanged(_:)), name: .appleSideBarDefaultIconSizeChanged, object: nil) @@ -183,7 +183,7 @@ protocol SidebarDelegate: AnyObject { } @objc func userDidAddFeed(_ notification: Notification) { - guard let feed = notification.userInfo?[UserInfoKey.webFeed] else { + guard let feed = notification.userInfo?[UserInfoKey.feed] else { return } revealAndSelectRepresentedObject(feed as AnyObject) @@ -193,17 +193,17 @@ protocol SidebarDelegate: AnyObject { applyToAvailableCells(configureFavicon) } - @objc func webFeedIconDidBecomeAvailable(_ note: Notification) { - guard let webFeed = note.userInfo?[UserInfoKey.webFeed] as? Feed else { return } - configureCellsForRepresentedObject(webFeed) + @objc func feedIconDidBecomeAvailable(_ note: Notification) { + guard let feed = note.userInfo?[UserInfoKey.feed] as? Feed else { return } + configureCellsForRepresentedObject(feed) } - @objc func webFeedSettingDidChange(_ note: Notification) { - guard let webFeed = note.object as? Feed, let key = note.userInfo?[Feed.FeedSettingUserInfoKey] as? String else { + @objc func feedSettingDidChange(_ note: Notification) { + guard let feed = note.object as? Feed, let key = note.userInfo?[Feed.FeedSettingUserInfoKey] as? String else { return } if key == Feed.FeedSettingKey.homePageURL || key == Feed.FeedSettingKey.faviconURL { - configureCellsForRepresentedObject(webFeed) + configureCellsForRepresentedObject(feed) } } @@ -255,7 +255,7 @@ protocol SidebarDelegate: AnyObject { guard outlineView.clickedRow == outlineView.selectedRow else { return } - if AppDefaults.shared.feedDoubleClickMarkAsRead, let articles = try? singleSelectedWebFeed?.fetchUnreadArticles() { + if AppDefaults.shared.feedDoubleClickMarkAsRead, let articles = try? singleSelectedFeed?.fetchUnreadArticles() { if let undoManager = undoManager, let markReadCommand = MarkStatusCommand(initialArticles: Array(articles), markingRead: true, undoManager: undoManager) { runCommand(markReadCommand) } @@ -264,7 +264,7 @@ protocol SidebarDelegate: AnyObject { } @IBAction func openInBrowser(_ sender: Any?) { - guard let feed = singleSelectedWebFeed, let homePageURL = feed.homePageURL else { + guard let feed = singleSelectedFeed, let homePageURL = feed.homePageURL else { return } Browser.open(homePageURL, invertPreference: NSApp.currentEvent?.modifierFlags.contains(.shift) ?? false) @@ -272,7 +272,7 @@ protocol SidebarDelegate: AnyObject { @objc func openInAppBrowser(_ sender: Any?) { // There is no In-App Browser for mac - so we use safari - guard let feed = singleSelectedWebFeed, let homePageURL = feed.homePageURL else { + guard let feed = singleSelectedFeed, let homePageURL = feed.homePageURL else { return } Browser.open(homePageURL, invertPreference: NSApp.currentEvent?.modifierFlags.contains(.shift) ?? false) @@ -521,7 +521,7 @@ private extension SidebarViewController { return selectedNodes.first! } - var singleSelectedWebFeed: Feed? { + var singleSelectedFeed: Feed? { guard let node = singleSelectedNode else { return nil } @@ -541,7 +541,7 @@ private extension SidebarViewController { treeControllerDelegate.addFilterException(feedID) } } else if let webFeed = feed as? Feed { - if webFeed.account?.existingWebFeed(withWebFeedID: webFeed.webFeedID) != nil { + if webFeed.account?.existingWebFeed(withWebFeedID: webFeed.feedID) != nil { treeControllerDelegate.addFilterException(feedID) addParentFolderToFilterExceptions(webFeed) } @@ -741,7 +741,7 @@ private extension SidebarViewController { guard let webFeedID = userInfo?[ArticlePathKey.webFeedID] as? String else { return nil } - if let node = startingNode.descendantNode(where: { ($0.representedObject as? Feed)?.webFeedID == webFeedID }) { + if let node = startingNode.descendantNode(where: { ($0.representedObject as? Feed)?.feedID == webFeedID }) { return node } return nil diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index 616ad1ff3..48b739ddf 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -594,7 +594,7 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr } @objc func webFeedIconDidBecomeAvailable(_ note: Notification) { - guard showIcons, let feed = note.userInfo?[UserInfoKey.webFeed] as? Feed else { + guard showIcons, let feed = note.userInfo?[UserInfoKey.feed] as? Feed else { return } let indexesToReload = tableView.indexesOfAvailableRowsPassingTest { (row) -> Bool in @@ -1235,14 +1235,14 @@ private extension TimelineViewController { for representedObject in representedObjects { if let feed = representedObject as? Feed { for oneFeed in webFeeds { - if feed.webFeedID == oneFeed.webFeedID || feed.url == oneFeed.url { + if feed.feedID == oneFeed.feedID || feed.url == oneFeed.url { return true } } } else if let folder = representedObject as? Folder { for oneFeed in webFeeds { - if folder.hasWebFeed(with: oneFeed.webFeedID) || folder.hasWebFeed(withURL: oneFeed.url) { + if folder.hasWebFeed(with: oneFeed.feedID) || folder.hasFeed(withURL: oneFeed.url) { return true } } diff --git a/Mac/Scriptability/Account+Scriptability.swift b/Mac/Scriptability/Account+Scriptability.swift index 7e97dd88b..d0102f30a 100644 --- a/Mac/Scriptability/Account+Scriptability.swift +++ b/Mac/Scriptability/Account+Scriptability.swift @@ -96,7 +96,7 @@ class ScriptableAccount: NSObject, UniqueIdScriptingObject, ScriptingObjectConta @objc(webFeeds) var webFeeds:NSArray { - return account.topLevelWebFeeds.map { ScriptableWebFeed($0, container:self) } as NSArray + return account.topLevelFeeds.map { ScriptableWebFeed($0, container:self) } as NSArray } @objc(valueInWebFeedsWithUniqueID:) @@ -107,7 +107,7 @@ class ScriptableAccount: NSObject, UniqueIdScriptingObject, ScriptingObjectConta @objc(valueInWebFeedsWithName:) func valueInWebFeeds(withName name:String) -> ScriptableWebFeed? { - let feeds = Array(account.flattenedWebFeeds()) + let feeds = Array(account.flattenedFeeds()) guard let feed = feeds.first(where:{$0.name == name}) else { return nil } return ScriptableWebFeed(feed, container:self) } @@ -133,13 +133,13 @@ class ScriptableAccount: NSObject, UniqueIdScriptingObject, ScriptingObjectConta @objc(allWebFeeds) var allWebFeeds: NSArray { var webFeeds = [ScriptableWebFeed]() - for webFeed in account.topLevelWebFeeds { + for webFeed in account.topLevelFeeds { webFeeds.append(ScriptableWebFeed(webFeed, container: self)) } if let folders = account.folders { for folder in folders { let scriptableFolder = ScriptableFolder(folder, container: self) - for webFeed in folder.topLevelWebFeeds { + for webFeed in folder.topLevelFeeds { webFeeds.append(ScriptableWebFeed(webFeed, container: scriptableFolder)) } } diff --git a/Mac/Scriptability/Folder+Scriptability.swift b/Mac/Scriptability/Folder+Scriptability.swift index 9e25698d4..776a5bc61 100644 --- a/Mac/Scriptability/Folder+Scriptability.swift +++ b/Mac/Scriptability/Folder+Scriptability.swift @@ -97,7 +97,7 @@ class ScriptableFolder: NSObject, UniqueIdScriptingObject, ScriptingObjectContai @objc(webFeeds) var webFeeds:NSArray { - let feeds = Array(folder.topLevelWebFeeds) + let feeds = Array(folder.topLevelFeeds) return feeds.map { ScriptableWebFeed($0, container:self) } as NSArray } diff --git a/Mac/Scriptability/NSApplication+Scriptability.swift b/Mac/Scriptability/NSApplication+Scriptability.swift index 9af3e45d7..2321e5ee8 100644 --- a/Mac/Scriptability/NSApplication+Scriptability.swift +++ b/Mac/Scriptability/NSApplication+Scriptability.swift @@ -77,7 +77,7 @@ extension NSApplication : ScriptingObjectContainer { let accounts = AccountManager.shared.activeAccounts let emptyFeeds:[Feed] = [] return accounts.reduce(emptyFeeds) { (result, nthAccount) -> [Feed] in - let accountFeeds = Array(nthAccount.topLevelWebFeeds) + let accountFeeds = Array(nthAccount.topLevelFeeds) return result + accountFeeds } } @@ -91,7 +91,7 @@ extension NSApplication : ScriptingObjectContainer { @objc(valueInWebFeedsWithUniqueID:) func valueInWebFeeds(withUniqueID id:String) -> ScriptableWebFeed? { let webFeeds = self.allWebFeeds() - guard let webFeed = webFeeds.first(where:{$0.webFeedID == id}) else { return nil } + guard let webFeed = webFeeds.first(where:{$0.feedID == id}) else { return nil } return ScriptableWebFeed(webFeed, container:self) } } diff --git a/Mac/Scriptability/WebFeed+Scriptability.swift b/Mac/Scriptability/WebFeed+Scriptability.swift index e7dae29cc..e77740da7 100644 --- a/Mac/Scriptability/WebFeed+Scriptability.swift +++ b/Mac/Scriptability/WebFeed+Scriptability.swift @@ -45,7 +45,7 @@ class ScriptableWebFeed: NSObject, UniqueIdScriptingObject, ScriptingObjectConta // but in either case it seems like the accountID would be used as the keydata, so I chose ID @objc(uniqueId) var scriptingUniqueId:Any { - return webFeed.webFeedID + return webFeed.feedID } // MARK: --- ScriptingObjectContainer protocol --- @@ -88,7 +88,7 @@ class ScriptableWebFeed: NSObject, UniqueIdScriptingObject, ScriptingObjectConta let (account, folder) = command.accountAndFolderForNewChild() guard let url = self.urlForNewFeed(arguments:arguments) else {return nil} - if let existingFeed = account.existingWebFeed(withURL:url) { + if let existingFeed = account.existingFeed(withURL:url) { return scriptableFeed(existingFeed, account:account, folder:folder).objectSpecifier } @@ -102,10 +102,10 @@ class ScriptableWebFeed: NSObject, UniqueIdScriptingObject, ScriptingObjectConta // suspendExecution(). When we get the callback, we supply the event result and call resumeExecution(). command.suspendExecution() - account.createWebFeed(url: url, name: titleFromArgs, container: container, validateFeed: true) { result in + account.createFeed(url: url, name: titleFromArgs, container: container, validateFeed: true) { result in switch result { case .success(let feed): - NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.webFeed: feed]) + 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) case .failure: diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 2cf597842..e00e42db5 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -111,7 +111,7 @@ 512D554423C804DE0023FFFA /* OpenInSafariActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512D554323C804DE0023FFFA /* OpenInSafariActivity.swift */; }; 512DD4C92430086400C17B1F /* CloudKitAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512DD4C82430086400C17B1F /* CloudKitAccountViewController.swift */; }; 512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97A11ED9F180007D329B /* FolderTreeControllerDelegate.swift */; }; - 512E08E72268801200BDCFDD /* WebFeedTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97611ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift */; }; + 512E08E72268801200BDCFDD /* FeedTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97611ED9EB96007D329B /* FeedTreeControllerDelegate.swift */; }; 512E09012268907400BDCFDD /* MasterFeedTableViewSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */; }; 512E094D2268B8AB00BDCFDD /* DeleteCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C9C1FAE83C600ECDEDB /* DeleteCommand.swift */; }; 5131463E235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 51314637235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -447,7 +447,7 @@ 849A975C1ED9EB0D007D329B /* DefaultFeedsImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97591ED9EB0D007D329B /* DefaultFeedsImporter.swift */; }; 849A975E1ED9EB72007D329B /* MainWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A975D1ED9EB72007D329B /* MainWindowController.swift */; }; 849A97641ED9EB96007D329B /* SidebarOutlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97601ED9EB96007D329B /* SidebarOutlineView.swift */; }; - 849A97651ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97611ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift */; }; + 849A97651ED9EB96007D329B /* FeedTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97611ED9EB96007D329B /* FeedTreeControllerDelegate.swift */; }; 849A97661ED9EB96007D329B /* SidebarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97621ED9EB96007D329B /* SidebarViewController.swift */; }; 849A97671ED9EB96007D329B /* UnreadCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97631ED9EB96007D329B /* UnreadCountView.swift */; }; 849A976C1ED9EBC8007D329B /* TimelineTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97691ED9EBC8007D329B /* TimelineTableRowView.swift */; }; @@ -1089,7 +1089,7 @@ 849A97591ED9EB0D007D329B /* DefaultFeedsImporter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultFeedsImporter.swift; sourceTree = ""; }; 849A975D1ED9EB72007D329B /* MainWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainWindowController.swift; sourceTree = ""; }; 849A97601ED9EB96007D329B /* SidebarOutlineView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SidebarOutlineView.swift; sourceTree = ""; }; - 849A97611ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebFeedTreeControllerDelegate.swift; sourceTree = ""; }; + 849A97611ED9EB96007D329B /* FeedTreeControllerDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedTreeControllerDelegate.swift; sourceTree = ""; }; 849A97621ED9EB96007D329B /* SidebarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SidebarViewController.swift; sourceTree = ""; }; 849A97631ED9EB96007D329B /* UnreadCountView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnreadCountView.swift; sourceTree = ""; }; 849A97691ED9EBC8007D329B /* TimelineTableRowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TimelineTableRowView.swift; sourceTree = ""; }; @@ -1446,7 +1446,7 @@ 512E08DD22687FA000BDCFDD /* Tree */ = { isa = PBXGroup; children = ( - 849A97611ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift */, + 849A97611ED9EB96007D329B /* FeedTreeControllerDelegate.swift */, 849A97A11ED9F180007D329B /* FolderTreeControllerDelegate.swift */, ); path = Tree; @@ -3111,7 +3111,7 @@ 512DD4C92430086400C17B1F /* CloudKitAccountViewController.swift in Sources */, 840D617F2029031C009BC708 /* AppDelegate.swift in Sources */, 51236339236915B100951F16 /* RoundedProgressView.swift in Sources */, - 512E08E72268801200BDCFDD /* WebFeedTreeControllerDelegate.swift in Sources */, + 512E08E72268801200BDCFDD /* FeedTreeControllerDelegate.swift in Sources */, 51C452A422650A2D00C03939 /* ArticleUtilities.swift in Sources */, 51EF0F79227716380050506E /* ColorHash.swift in Sources */, 51F9F3FB23DFB25700A314FD /* Animations.swift in Sources */, @@ -3319,7 +3319,7 @@ 8405DD9C22153BD7008CE1BF /* NSView-Extensions.swift in Sources */, 849A979F1ED9F130007D329B /* SidebarCell.swift in Sources */, 51E595A5228CC36500FCC42B /* ArticleStatusSyncTimer.swift in Sources */, - 849A97651ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift in Sources */, + 849A97651ED9EB96007D329B /* FeedTreeControllerDelegate.swift in Sources */, 849A97671ED9EB96007D329B /* UnreadCountView.swift in Sources */, 510C418024E5D1AE008226FD /* ExtensionFeedAddRequestFile.swift in Sources */, 51FE10092346739D0056195D /* ActivityType.swift in Sources */, diff --git a/Shared/Activity/ActivityManager.swift b/Shared/Activity/ActivityManager.swift index efb7f73e1..b7e11c49e 100644 --- a/Shared/Activity/ActivityManager.swift +++ b/Shared/Activity/ActivityManager.swift @@ -116,7 +116,7 @@ class ActivityManager { } } - for webFeed in account.flattenedWebFeeds() { + for webFeed in account.flattenedFeeds() { ids.append(contentsOf: identifiers(for: webFeed)) } @@ -127,7 +127,7 @@ class ActivityManager { var ids = [String]() ids.append(identifier(for: folder)) - for webFeed in folder.flattenedWebFeeds() { + for webFeed in folder.flattenedFeeds() { ids.append(contentsOf: identifiers(for: webFeed)) } @@ -140,7 +140,7 @@ class ActivityManager { #endif @objc func webFeedIconDidBecomeAvailable(_ note: Notification) { - guard let webFeed = note.userInfo?[UserInfoKey.webFeed] as? Feed, let activityFeedId = selectingActivity?.userInfo?[ArticlePathKey.webFeedID] as? String else { + guard let webFeed = note.userInfo?[UserInfoKey.feed] as? Feed, let activityFeedId = selectingActivity?.userInfo?[ArticlePathKey.webFeedID] as? String else { return } @@ -150,7 +150,7 @@ class ActivityManager { } #endif - if activityFeedId == webFeed.webFeedID { + if activityFeedId == webFeed.feedID { updateSelectingActivityFeedSearchAttributes(with: webFeed) } } @@ -278,7 +278,7 @@ private extension ActivityManager { } static func identifier(for feed: Feed) -> String { - return "account_\(feed.account!.accountID)_feed_\(feed.webFeedID)" + return "account_\(feed.account!.accountID)_feed_\(feed.feedID)" } static func identifier(for article: Article) -> String { diff --git a/Shared/Extensions/ArticleUtilities.swift b/Shared/Extensions/ArticleUtilities.swift index b47718e07..bf8a527f8 100644 --- a/Shared/Extensions/ArticleUtilities.swift +++ b/Shared/Extensions/ArticleUtilities.swift @@ -125,7 +125,7 @@ extension Article { if let image = iconImage() { let fm = FileManager.default var path = fm.urls(for: .cachesDirectory, in: .userDomainMask)[0] - let feedID = webFeed.webFeedID.replacingOccurrences(of: "/", with: "_") + let feedID = webFeed.feedID.replacingOccurrences(of: "/", with: "_") #if os(macOS) path.appendPathComponent(feedID + "_smallIcon.tiff") #else diff --git a/Shared/Images/FeedIconDownloader.swift b/Shared/Images/FeedIconDownloader.swift index 341905032..c18b179ff 100644 --- a/Shared/Images/FeedIconDownloader.swift +++ b/Shared/Images/FeedIconDownloader.swift @@ -180,7 +180,7 @@ private extension FeedIconDownloader { func postFeedIconDidBecomeAvailableNotification(_ feed: Feed) { DispatchQueue.main.async { - let userInfo: [AnyHashable: Any] = [UserInfoKey.webFeed: feed] + let userInfo: [AnyHashable: Any] = [UserInfoKey.feed: feed] NotificationCenter.default.post(name: .FeedIconDidBecomeAvailable, object: self, userInfo: userInfo) } } diff --git a/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift b/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift index 6ac0dd2e4..f23038645 100644 --- a/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift +++ b/Shared/ShareExtension/ExtensionFeedAddRequestFile.swift @@ -154,7 +154,7 @@ private extension ExtensionFeedAddRequestFile { guard let container = destinationContainer else { return } - account.createWebFeed(url: request.feedURL.absoluteString, name: request.name, container: container, validateFeed: true) { _ in } + account.createFeed(url: request.feedURL.absoluteString, name: request.name, container: container, validateFeed: true) { _ in } } } diff --git a/Shared/Tree/WebFeedTreeControllerDelegate.swift b/Shared/Tree/FeedTreeControllerDelegate.swift similarity index 96% rename from Shared/Tree/WebFeedTreeControllerDelegate.swift rename to Shared/Tree/FeedTreeControllerDelegate.swift index d7c35fc24..242a8bd43 100644 --- a/Shared/Tree/WebFeedTreeControllerDelegate.swift +++ b/Shared/Tree/FeedTreeControllerDelegate.swift @@ -11,7 +11,7 @@ import RSTree import Articles import Account -final class WebFeedTreeControllerDelegate: TreeControllerDelegate { +final class FeedTreeControllerDelegate: TreeControllerDelegate { private var filterExceptions = Set() var isReadFiltered = false @@ -39,7 +39,7 @@ final class WebFeedTreeControllerDelegate: TreeControllerDelegate { } } -private extension WebFeedTreeControllerDelegate { +private extension FeedTreeControllerDelegate { func childNodesForRootNode(_ rootNode: Node) -> [Node]? { var topLevelNodes = [Node]() @@ -66,7 +66,7 @@ private extension WebFeedTreeControllerDelegate { var children = [AnyObject]() - for webFeed in container.topLevelWebFeeds { + for webFeed in container.topLevelFeeds { if let feedID = webFeed.sidebarItemID, !(!filterExceptions.contains(feedID) && isReadFiltered && webFeed.unreadCount == 0) { children.append(webFeed) } diff --git a/Shared/UserInfoKey.swift b/Shared/UserInfoKey.swift index f46f5ca8b..35a392f25 100644 --- a/Shared/UserInfoKey.swift +++ b/Shared/UserInfoKey.swift @@ -10,7 +10,7 @@ import Foundation struct UserInfoKey { - static let webFeed = "webFeed" + static let feed = "feed" static let url = "url" static let articlePath = "articlePath" static let feedIdentifier = "feedIdentifier" diff --git a/Shared/UserNotifications/UserNotificationManager.swift b/Shared/UserNotifications/UserNotificationManager.swift index bbb3f982f..dbf2009e9 100644 --- a/Shared/UserNotifications/UserNotificationManager.swift +++ b/Shared/UserNotifications/UserNotificationManager.swift @@ -61,7 +61,7 @@ private extension UserNotificationManager { content.subtitle = ArticleStringFormatter.truncatedTitle(article) } content.body = ArticleStringFormatter.truncatedSummary(article) - content.threadIdentifier = webFeed.webFeedID + content.threadIdentifier = webFeed.feedID content.summaryArgument = "\(webFeed.nameForDisplay)" content.summaryArgumentCount = 1 content.sound = UNNotificationSound.default @@ -83,7 +83,7 @@ private extension UserNotificationManager { /// - Warning: In certain scenarios, this will return the `faviconTemplateImage`. func thumbnailAttachment(for article: Article, webFeed: Feed) -> UNNotificationAttachment? { if let imageURL = article.iconImageUrl(webFeed: webFeed) { - let thumbnail = try? UNNotificationAttachment(identifier: webFeed.webFeedID, url: imageURL, options: nil) + let thumbnail = try? UNNotificationAttachment(identifier: webFeed.feedID, url: imageURL, options: nil) return thumbnail } return nil diff --git a/iOS/Add/AddFeedViewController.swift b/iOS/Add/AddFeedViewController.swift index 39f513efb..d2880d3e1 100644 --- a/iOS/Add/AddFeedViewController.swift +++ b/iOS/Add/AddFeedViewController.swift @@ -99,7 +99,7 @@ class AddFeedViewController: UITableViewController { account = containerAccount } - if account!.hasWebFeed(withURL: url.absoluteString) { + if account!.hasFeed(withURL: url.absoluteString) { presentError(AccountError.createErrorAlreadySubscribed) return } @@ -112,14 +112,14 @@ class AddFeedViewController: UITableViewController { BatchUpdate.shared.start() - account!.createWebFeed(url: url.absoluteString, name: feedName, container: container, validateFeed: true) { result in + account!.createFeed(url: url.absoluteString, name: feedName, container: container, validateFeed: true) { result in BatchUpdate.shared.end() switch result { case .success(let feed): self.dismiss(animated: true) - NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.webFeed: feed]) + NotificationCenter.default.post(name: .UserDidAddFeed, object: self, userInfo: [UserInfoKey.feed: feed]) case .failure(let error): self.addButton.isEnabled = true self.activityIndicator.isHidden = true diff --git a/iOS/MasterFeed/MasterFeedViewController+Drop.swift b/iOS/MasterFeed/MasterFeedViewController+Drop.swift index b242d7da5..62a9cb56c 100644 --- a/iOS/MasterFeed/MasterFeedViewController+Drop.swift +++ b/iOS/MasterFeed/MasterFeedViewController+Drop.swift @@ -32,7 +32,7 @@ extension MasterFeedViewController: UITableViewDropDelegate { if destAccount.behaviors.contains(.disallowFeedInMultipleFolders), let sourceNode = session.localDragSession?.items.first?.localObject as? Node, let sourceWebFeed = sourceNode.representedObject as? Feed, - sourceWebFeed.account?.accountID != destAccount.accountID && destAccount.hasWebFeed(withURL: sourceWebFeed.url) { + sourceWebFeed.account?.accountID != destAccount.accountID && destAccount.hasFeed(withURL: sourceWebFeed.url) { return UITableViewDropProposal(operation: .forbidden) } @@ -104,7 +104,7 @@ extension MasterFeedViewController: UITableViewDropDelegate { guard sourceContainer !== destinationContainer else { return } BatchUpdate.shared.start() - sourceContainer.account?.moveWebFeed(feed, from: sourceContainer, to: destinationContainer) { result in + sourceContainer.account?.moveFeed(feed, from: sourceContainer, to: destinationContainer) { result in BatchUpdate.shared.end() switch result { case .success: @@ -117,10 +117,10 @@ extension MasterFeedViewController: UITableViewDropDelegate { func moveWebFeedBetweenAccounts(feed: Feed, sourceContainer: Container, destinationContainer: Container) { - if let existingFeed = destinationContainer.account?.existingWebFeed(withURL: feed.url) { + if let existingFeed = destinationContainer.account?.existingFeed(withURL: feed.url) { BatchUpdate.shared.start() - destinationContainer.account?.addWebFeed(existingFeed, to: destinationContainer) { result in + destinationContainer.account?.addFeed(existingFeed, to: destinationContainer) { result in switch result { case .success: sourceContainer.account?.removeWebFeed(feed, from: sourceContainer) { result in @@ -141,7 +141,7 @@ extension MasterFeedViewController: UITableViewDropDelegate { } else { BatchUpdate.shared.start() - destinationContainer.account?.createWebFeed(url: feed.url, name: feed.editedName, container: destinationContainer, validateFeed: false) { result in + destinationContainer.account?.createFeed(url: feed.url, name: feed.editedName, container: destinationContainer, validateFeed: false) { result in switch result { case .success: sourceContainer.account?.removeWebFeed(feed, from: sourceContainer) { result in diff --git a/iOS/MasterFeed/MasterFeedViewController.swift b/iOS/MasterFeed/MasterFeedViewController.swift index 6425baade..56b8ce97a 100644 --- a/iOS/MasterFeed/MasterFeedViewController.swift +++ b/iOS/MasterFeed/MasterFeedViewController.swift @@ -130,7 +130,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { } @objc func webFeedIconDidBecomeAvailable(_ note: Notification) { - guard let webFeed = note.userInfo?[UserInfoKey.webFeed] as? Feed else { + guard let webFeed = note.userInfo?[UserInfoKey.feed] as? Feed else { return } applyToCellsForRepresentedObject(webFeed, configureIcon(_:_:)) diff --git a/iOS/MasterTimeline/MasterTimelineViewController.swift b/iOS/MasterTimeline/MasterTimelineViewController.swift index f635b0a75..0e9a75cac 100644 --- a/iOS/MasterTimeline/MasterTimelineViewController.swift +++ b/iOS/MasterTimeline/MasterTimelineViewController.swift @@ -453,7 +453,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner titleView.iconView.iconImage = coordinator.timelineIconImage } - guard let feed = note.userInfo?[UserInfoKey.webFeed] as? Feed else { + guard let feed = note.userInfo?[UserInfoKey.feed] as? Feed else { return } tableView.indexPathsForVisibleRows?.forEach { indexPath in diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index afd8b11b0..f7a120bb7 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -127,7 +127,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { var prefersStatusBarHidden = false - private let treeControllerDelegate = WebFeedTreeControllerDelegate() + private let treeControllerDelegate = FeedTreeControllerDelegate() private let treeController: TreeController var stateRestorationActivity: NSUserActivity { @@ -545,7 +545,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { } @objc func userDidAddFeed(_ notification: Notification) { - guard let webFeed = notification.userInfo?[UserInfoKey.webFeed] as? Feed else { + guard let webFeed = notification.userInfo?[UserInfoKey.feed] as? Feed else { return } discloseWebFeed(webFeed, animations: [.scroll, .navigation]) @@ -1477,7 +1477,7 @@ private extension SceneCoordinator { treeControllerDelegate.addFilterException(feedID) } } else if let webFeed = feed as? Feed { - if webFeed.account?.existingWebFeed(withWebFeedID: webFeed.webFeedID) != nil { + if webFeed.account?.existingWebFeed(withWebFeedID: webFeed.feedID) != nil { treeControllerDelegate.addFilterException(feedID) addParentFolderToFilterExceptions(webFeed) } @@ -2080,13 +2080,13 @@ private extension SceneCoordinator { if let feed = timelineFeed as? Feed { for oneFeed in feeds { - if feed.webFeedID == oneFeed.webFeedID || feed.url == oneFeed.url { + if feed.feedID == oneFeed.feedID || feed.url == oneFeed.url { return true } } } else if let folder = timelineFeed as? Folder { for oneFeed in feeds { - if folder.hasWebFeed(with: oneFeed.webFeedID) || folder.hasWebFeed(withURL: oneFeed.url) { + if folder.hasWebFeed(with: oneFeed.feedID) || folder.hasFeed(withURL: oneFeed.url) { return true } } @@ -2379,7 +2379,7 @@ private extension SceneCoordinator { } func findWebFeedNode(webFeedID: String, beginningAt startingNode: Node) -> Node? { - if let node = startingNode.descendantNode(where: { ($0.representedObject as? Feed)?.webFeedID == webFeedID }) { + if let node = startingNode.descendantNode(where: { ($0.representedObject as? Feed)?.feedID == webFeedID }) { return node } return nil