Neues Icon, parallele Downloads
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import Foundation
|
||||
import UserNotifications
|
||||
#if canImport(UIKit)
|
||||
import UIKit
|
||||
#endif
|
||||
|
||||
/// Manages local UNUserNotificationCenter notifications for download events.
|
||||
@MainActor
|
||||
final class NotificationManager {
|
||||
static let shared = NotificationManager()
|
||||
private init() {}
|
||||
|
||||
/// Requests notification authorization the first time the app launches.
|
||||
/// Skips the system prompt if permission has already been granted or denied.
|
||||
func requestPermissionIfNeeded() async {
|
||||
let center = UNUserNotificationCenter.current()
|
||||
let settings = await center.notificationSettings()
|
||||
guard settings.authorizationStatus == .notDetermined else { return }
|
||||
_ = try? await center.requestAuthorization(options: [.alert, .sound])
|
||||
}
|
||||
|
||||
/// Fires a local notification when a download fails.
|
||||
/// Suppressed while the app is in the foreground — an in-app alert already
|
||||
/// surfaces the error there, so a notification would be redundant.
|
||||
func sendDownloadFailedNotification(itemTitle: String) async {
|
||||
#if canImport(UIKit)
|
||||
guard UIApplication.shared.applicationState != .active else { return }
|
||||
#endif
|
||||
|
||||
let content = UNMutableNotificationContent()
|
||||
content.title = "Download fehlgeschlagen"
|
||||
content.body = "„\(itemTitle)" konnte nicht heruntergeladen werden."
|
||||
content.sound = .default
|
||||
|
||||
let request = UNNotificationRequest(
|
||||
identifier: "download-failed-\(UUID().uuidString)",
|
||||
content: content,
|
||||
trigger: nil // deliver immediately
|
||||
)
|
||||
try? await UNUserNotificationCenter.current().add(request)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user