mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-19 11:43:24 +01:00
Presents Local Notifications when new NewsItem is fetched in background
This commit is contained in:
@@ -210,12 +210,21 @@ private extension AppDelegate
|
|||||||
previousUpdatesFetchRequest.resultType = .dictionaryResultType
|
previousUpdatesFetchRequest.resultType = .dictionaryResultType
|
||||||
previousUpdatesFetchRequest.propertiesToFetch = [#keyPath(InstalledApp.bundleIdentifier)]
|
previousUpdatesFetchRequest.propertiesToFetch = [#keyPath(InstalledApp.bundleIdentifier)]
|
||||||
|
|
||||||
|
let previousNewsItemsFetchRequest = NewsItem.fetchRequest() as NSFetchRequest<NSFetchRequestResult>
|
||||||
|
previousNewsItemsFetchRequest.includesPendingChanges = false
|
||||||
|
previousNewsItemsFetchRequest.resultType = .dictionaryResultType
|
||||||
|
previousNewsItemsFetchRequest.propertiesToFetch = [#keyPath(NewsItem.identifier)]
|
||||||
|
|
||||||
let previousUpdates = try context.fetch(previousUpdatesFetchRequest) as! [[String: String]]
|
let previousUpdates = try context.fetch(previousUpdatesFetchRequest) as! [[String: String]]
|
||||||
|
let previousNewsItems = try context.fetch(previousNewsItemsFetchRequest) as! [[String: String]]
|
||||||
|
|
||||||
try context.save()
|
try context.save()
|
||||||
|
|
||||||
let updatesFetchRequest = InstalledApp.updatesFetchRequest()
|
let updatesFetchRequest = InstalledApp.updatesFetchRequest()
|
||||||
|
let newsItemsFetchRequest = NewsItem.fetchRequest() as NSFetchRequest<NewsItem>
|
||||||
|
|
||||||
let updates = try context.fetch(updatesFetchRequest)
|
let updates = try context.fetch(updatesFetchRequest)
|
||||||
|
let newsItems = try context.fetch(newsItemsFetchRequest)
|
||||||
|
|
||||||
for update in updates
|
for update in updates
|
||||||
{
|
{
|
||||||
@@ -229,6 +238,28 @@ private extension AppDelegate
|
|||||||
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
||||||
UNUserNotificationCenter.current().add(request)
|
UNUserNotificationCenter.current().add(request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for newsItem in newsItems
|
||||||
|
{
|
||||||
|
guard !previousNewsItems.contains(where: { $0[#keyPath(NewsItem.identifier)] == newsItem.identifier }) else { continue }
|
||||||
|
guard !newsItem.isSilent else { continue }
|
||||||
|
|
||||||
|
let content = UNMutableNotificationContent()
|
||||||
|
|
||||||
|
if let app = newsItem.storeApp
|
||||||
|
{
|
||||||
|
content.title = String(format: NSLocalizedString("%@ News", comment: ""), app.name)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
content.title = NSLocalizedString("AltStore News", comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
content.body = newsItem.title
|
||||||
|
|
||||||
|
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
|
||||||
|
UNUserNotificationCenter.current().add(request)
|
||||||
|
}
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
UIApplication.shared.applicationIconBadgeNumber = updates.count
|
UIApplication.shared.applicationIconBadgeNumber = updates.count
|
||||||
|
|||||||
Reference in New Issue
Block a user