mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
67 lines
2.1 KiB
Swift
67 lines
2.1 KiB
Swift
//
|
||
// NotificationContentProcessor.swift
|
||
// NotificationServiceExtension
|
||
//
|
||
// Created by huangfeng on 2024/5/29.
|
||
// Copyright © 2024 Fin. All rights reserved.
|
||
//
|
||
|
||
import Foundation
|
||
@_exported import UserNotifications
|
||
|
||
enum NotificationContentProcessorItem {
|
||
case ciphertext
|
||
case level
|
||
case badge
|
||
case autoCopy
|
||
case archive
|
||
case setIcon
|
||
case setImage
|
||
case call
|
||
case mute
|
||
|
||
var processor: NotificationContentProcessor {
|
||
switch self {
|
||
case .ciphertext:
|
||
return CiphertextProcessor()
|
||
case .level:
|
||
return LevelProcessor()
|
||
case .badge:
|
||
return BadgeProcessor()
|
||
case .autoCopy:
|
||
return AutoCopyProcessor()
|
||
case .archive:
|
||
return ArchiveProcessor()
|
||
case .setIcon:
|
||
return IconProcessor()
|
||
case .setImage:
|
||
return ImageProcessor()
|
||
case .call:
|
||
return CallProcessor()
|
||
case .mute:
|
||
return MuteProcessor()
|
||
}
|
||
}
|
||
}
|
||
|
||
enum NotificationContentProcessorError: Swift.Error {
|
||
case error(content: UNMutableNotificationContent)
|
||
}
|
||
|
||
public protocol NotificationContentProcessor {
|
||
/// 处理 UNMutableNotificationContent
|
||
/// - Parameters:
|
||
/// - identifier: request.identifier, 有些 Processor 需要,例如 CallProcessor 需要这个去添加 LocalNotification
|
||
/// - bestAttemptContent: 需要处理的 UNMutableNotificationContent
|
||
/// - Returns: 处理成功后的 UNMutableNotificationContent
|
||
/// - Throws: 处理失败后,应该中断处理
|
||
func process(identifier: String, content bestAttemptContent: UNMutableNotificationContent) async throws -> UNMutableNotificationContent
|
||
|
||
/// serviceExtension 即将终止,不管 processor 是否处理完成,最好立即调用 contentHandler 交付已完成的部分,否则会原样展示服务器传递过来的推送
|
||
func serviceExtensionTimeWillExpire(contentHandler: (UNNotificationContent) -> Void)
|
||
}
|
||
|
||
extension NotificationContentProcessor {
|
||
func serviceExtensionTimeWillExpire(contentHandler: (UNNotificationContent) -> Void) {}
|
||
}
|