mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Clean activities when the associated data is deleted
This commit is contained in:
@@ -41,7 +41,7 @@ class ActivityManager {
|
||||
func selectingFolder(_ folder: Folder) {
|
||||
let localizedText = NSLocalizedString("See articles in “%@”", comment: "See articles in Folder")
|
||||
let title = NSString.localizedStringWithFormat(localizedText as NSString, folder.nameForDisplay) as String
|
||||
selectingActivity = makeSelectingActivity(type: ActivityType.selectFolder, title: title, identifier: "folder.\(folder.nameForDisplay)")
|
||||
selectingActivity = makeSelectingActivity(type: ActivityType.selectFolder, title: title, identifier: identifer(for: folder))
|
||||
|
||||
selectingActivity!.userInfo = [
|
||||
ActivityID.accountID.rawValue: folder.account?.accountID ?? "",
|
||||
@@ -55,7 +55,7 @@ class ActivityManager {
|
||||
func selectingFeed(_ feed: Feed) {
|
||||
let localizedText = NSLocalizedString("See articles in “%@”", comment: "See articles in Feed")
|
||||
let title = NSString.localizedStringWithFormat(localizedText as NSString, feed.nameForDisplay) as String
|
||||
selectingActivity = makeSelectingActivity(type: ActivityType.selectFeed, title: title, identifier: feed.url)
|
||||
selectingActivity = makeSelectingActivity(type: ActivityType.selectFeed, title: title, identifier: identifer(for: feed))
|
||||
|
||||
selectingActivity!.userInfo = [
|
||||
ActivityID.accountID.rawValue: feed.account?.accountID ?? "",
|
||||
@@ -63,6 +63,16 @@ class ActivityManager {
|
||||
ActivityID.feedID.rawValue: feed.feedID
|
||||
]
|
||||
|
||||
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
|
||||
attributeSet.title = feed.nameForDisplay
|
||||
attributeSet.keywords = makeKeywords(feed.nameForDisplay)
|
||||
if let image = appDelegate.feedIconDownloader.icon(for: feed) {
|
||||
attributeSet.thumbnailData = image.pngData()
|
||||
} else if let image = appDelegate.faviconDownloader.faviconAsAvatar(for: feed) {
|
||||
attributeSet.thumbnailData = image.pngData()
|
||||
}
|
||||
selectingActivity!.contentAttributeSet = attributeSet
|
||||
|
||||
selectingActivity!.becomeCurrent()
|
||||
}
|
||||
|
||||
@@ -74,6 +84,37 @@ class ActivityManager {
|
||||
readingActivity?.becomeCurrent()
|
||||
}
|
||||
|
||||
func cleanUp(_ account: Account) {
|
||||
var ids = [String]()
|
||||
|
||||
if let folders = account.folders {
|
||||
for folder in folders {
|
||||
ids.append(identifer(for: folder))
|
||||
}
|
||||
}
|
||||
|
||||
for feed in account.flattenedFeeds() {
|
||||
ids.append(contentsOf: identifers(for: feed))
|
||||
}
|
||||
|
||||
NSUserActivity.deleteSavedUserActivities(withPersistentIdentifiers: ids) {}
|
||||
}
|
||||
|
||||
func cleanUp(_ folder: Folder) {
|
||||
var ids = [String]()
|
||||
ids.append(identifer(for: folder))
|
||||
|
||||
for feed in folder.flattenedFeeds() {
|
||||
ids.append(contentsOf: identifers(for: feed))
|
||||
}
|
||||
|
||||
NSUserActivity.deleteSavedUserActivities(withPersistentIdentifiers: ids) {}
|
||||
}
|
||||
|
||||
func cleanUp(_ feed: Feed) {
|
||||
NSUserActivity.deleteSavedUserActivities(withPersistentIdentifiers: identifers(for: feed)) {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: Private
|
||||
@@ -110,13 +151,13 @@ private extension ActivityManager {
|
||||
activity.isEligibleForSearch = true
|
||||
activity.isEligibleForPrediction = false
|
||||
activity.isEligibleForHandoff = true
|
||||
activity.persistentIdentifier = identifer(for: article)
|
||||
|
||||
// CoreSpotlight
|
||||
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeCompositeContent as String)
|
||||
attributeSet.title = article.title
|
||||
attributeSet.contentDescription = article.summary
|
||||
attributeSet.keywords = keywords
|
||||
attributeSet.relatedUniqueIdentifier = article.url
|
||||
|
||||
if let image = article.avatarImage() {
|
||||
attributeSet.thumbnailData = image.pngData()
|
||||
@@ -131,4 +172,27 @@ private extension ActivityManager {
|
||||
return value?.components(separatedBy: " ").filter { $0.count > 2 } ?? []
|
||||
}
|
||||
|
||||
func identifer(for folder: Folder) -> String {
|
||||
return "account_\(folder.account!.accountID)_folder_\(folder.nameForDisplay)"
|
||||
}
|
||||
|
||||
func identifer(for feed: Feed) -> String {
|
||||
return "account_\(feed.account!.accountID)_feed_\(feed.feedID)"
|
||||
}
|
||||
|
||||
func identifer(for article: Article) -> String {
|
||||
return "account_\(article.accountID)_feed_\(article.feedID)_article_\(article.articleID)"
|
||||
}
|
||||
|
||||
func identifers(for feed: Feed) -> [String] {
|
||||
var ids = [String]()
|
||||
ids.append(identifer(for: feed))
|
||||
|
||||
for article in feed.fetchArticles() {
|
||||
ids.append(identifer(for: article))
|
||||
}
|
||||
|
||||
return ids
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user