diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index 8f385dc12..f7792d310 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -117,14 +117,16 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { func handle(_ response: UNNotificationResponse) { let userInfo = response.notification.request.content.userInfo - sidebarViewController?.deepLinkRevealAndSelect(for: userInfo) - currentTimelineViewController?.goToDeepLink(for: userInfo) + guard let articlePathUserInfo = userInfo[UserInfoKey.articlePath] as? [AnyHashable : Any] else { return } + sidebarViewController?.deepLinkRevealAndSelect(for: articlePathUserInfo) + currentTimelineViewController?.goToDeepLink(for: articlePathUserInfo) } func handle(_ activity: NSUserActivity) { guard let userInfo = activity.userInfo else { return } - sidebarViewController?.deepLinkRevealAndSelect(for: userInfo) - currentTimelineViewController?.goToDeepLink(for: userInfo) + guard let articlePathUserInfo = userInfo[UserInfoKey.articlePath] as? [AnyHashable : Any] else { return } + sidebarViewController?.deepLinkRevealAndSelect(for: articlePathUserInfo) + currentTimelineViewController?.goToDeepLink(for: articlePathUserInfo) } // MARK: - Notifications @@ -479,7 +481,7 @@ extension MainWindowController: TimelineContainerViewControllerDelegate { let detailState: DetailState if let articles = articles { if articles.count == 1 { - activityManager.reading(articles.first!) + activityManager.reading(fetcher: nil, article: articles.first) if articles.first?.feed?.isArticleExtractorAlwaysOn ?? false { detailState = .loading startArticleExtractorForCurrentLink() diff --git a/Mac/MainWindow/Sidebar/SidebarViewController.swift b/Mac/MainWindow/Sidebar/SidebarViewController.swift index 02dd187ce..f1d19437f 100644 --- a/Mac/MainWindow/Sidebar/SidebarViewController.swift +++ b/Mac/MainWindow/Sidebar/SidebarViewController.swift @@ -484,7 +484,7 @@ private extension SidebarViewController { } func findAccountNode(_ userInfo: [AnyHashable : Any]?) -> Node? { - guard let accountID = userInfo?[DeepLinkKey.accountID.rawValue] as? String else { + guard let accountID = userInfo?[ArticlePathKey.accountID] as? String else { return nil } @@ -492,7 +492,7 @@ private extension SidebarViewController { return node } - guard let accountName = userInfo?[DeepLinkKey.accountName.rawValue] as? String else { + guard let accountName = userInfo?[ArticlePathKey.accountName] as? String else { return nil } @@ -504,7 +504,7 @@ private extension SidebarViewController { } func findFeedNode(_ userInfo: [AnyHashable : Any]?, beginningAt startingNode: Node) -> Node? { - guard let feedID = userInfo?[DeepLinkKey.feedID.rawValue] as? String else { + guard let feedID = userInfo?[ArticlePathKey.feedID] as? String else { return nil } if let node = startingNode.descendantNode(where: { ($0.representedObject as? Feed)?.feedID == feedID }) { diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index 9f4bba8b1..f4ab509e8 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -388,7 +388,7 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr // MARK: - Navigation func goToDeepLink(for userInfo: [AnyHashable : Any]) { - guard let articleID = userInfo[DeepLinkKey.articleID.rawValue] as? String else { return } + guard let articleID = userInfo[ArticlePathKey.articleID] as? String else { return } guard let ix = articles.firstIndex(where: { $0.articleID == articleID }) else { return } NSCursor.setHiddenUntilMouseMoves(true) diff --git a/Mac/Resources/Info.plist b/Mac/Resources/Info.plist index d761dde8e..29185b54b 100644 --- a/Mac/Resources/Info.plist +++ b/Mac/Resources/Info.plist @@ -45,7 +45,7 @@ NSUserActivityTypes - com.ranchero.NetNewsWire.ReadArticle + ReadArticle NSAppleEventsUsageDescription NetNewsWire communicates with other apps on your Mac when you choose to share an article. diff --git a/Shared/Activity/ActivityManager.swift b/Shared/Activity/ActivityManager.swift index 62ecd72a2..276dc46e8 100644 --- a/Shared/Activity/ActivityManager.swift +++ b/Shared/Activity/ActivityManager.swift @@ -80,7 +80,7 @@ class ActivityManager { invalidateReading() invalidateNextUnread() - guard let fetcher = fetcher, let article = article else { return } + guard let article = article else { return } readingActivity = makeReadArticleActivity(fetcher: fetcher, article: article) #if os(iOS) @@ -176,13 +176,17 @@ private extension ActivityManager { return activity } - func makeReadArticleActivity(fetcher: ArticleFetcher, article: Article) -> NSUserActivity { + func makeReadArticleActivity(fetcher: ArticleFetcher?, article: Article) -> NSUserActivity { let activity = NSUserActivity(activityType: ActivityType.readArticle.rawValue) activity.title = ArticleStringFormatter.truncatedTitle(article) - let articleFetcherIdentifierUserInfo = fetcher.articleFetcherType?.userInfo ?? [AnyHashable: Any]() - let articlePathUserInfo = article.pathUserInfo - activity.userInfo = [UserInfoKey.feedIdentifier: articleFetcherIdentifierUserInfo, UserInfoKey.articlePath: articlePathUserInfo] + if let fetcher = fetcher { + let articleFetcherIdentifierUserInfo = fetcher.articleFetcherType?.userInfo ?? [AnyHashable: Any]() + let articlePathUserInfo = article.pathUserInfo + activity.userInfo = [UserInfoKey.feedIdentifier: articleFetcherIdentifierUserInfo, UserInfoKey.articlePath: articlePathUserInfo] + } else { + activity.userInfo = [UserInfoKey.articlePath: article.pathUserInfo] + } activity.requiredUserInfoKeys = Set(activity.userInfo!.keys.map { $0 as! String }) activity.isEligibleForHandoff = true