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