mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-04-21 11:26:15 +02:00
98 lines
2.8 KiB
Swift
98 lines
2.8 KiB
Swift
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import Tauri
|
|
import UserNotifications
|
|
|
|
internal func makeCategories(_ actionTypes: [ActionType]) {
|
|
var createdCategories = [UNNotificationCategory]()
|
|
|
|
let generalCategory = UNNotificationCategory(
|
|
identifier: "GENERAL",
|
|
actions: [],
|
|
intentIdentifiers: [],
|
|
options: .customDismissAction)
|
|
|
|
createdCategories.append(generalCategory)
|
|
for type in actionTypes {
|
|
let newActions = makeActions(type.actions)
|
|
|
|
// Create the custom actions for the TIMER_EXPIRED category.
|
|
var newCategory: UNNotificationCategory?
|
|
|
|
newCategory = UNNotificationCategory(
|
|
identifier: type.id,
|
|
actions: newActions,
|
|
intentIdentifiers: [],
|
|
hiddenPreviewsBodyPlaceholder: type.hiddenBodyPlaceholder ?? "",
|
|
options: makeCategoryOptions(type))
|
|
|
|
createdCategories.append(newCategory!)
|
|
}
|
|
|
|
let center = UNUserNotificationCenter.current()
|
|
center.setNotificationCategories(Set(createdCategories))
|
|
}
|
|
|
|
func makeActions(_ actions: [Action]) -> [UNNotificationAction] {
|
|
var createdActions = [UNNotificationAction]()
|
|
|
|
for action in actions {
|
|
var newAction: UNNotificationAction
|
|
if action.input ?? false {
|
|
if action.inputButtonTitle != nil {
|
|
newAction = UNTextInputNotificationAction(
|
|
identifier: action.id,
|
|
title: action.title,
|
|
options: makeActionOptions(action),
|
|
textInputButtonTitle: action.inputButtonTitle ?? "",
|
|
textInputPlaceholder: action.inputPlaceholder ?? "")
|
|
} else {
|
|
newAction = UNTextInputNotificationAction(
|
|
identifier: action.id, title: action.title, options: makeActionOptions(action))
|
|
}
|
|
} else {
|
|
// Create the custom actions for the TIMER_EXPIRED category.
|
|
newAction = UNNotificationAction(
|
|
identifier: action.id,
|
|
title: action.title,
|
|
options: makeActionOptions(action))
|
|
}
|
|
createdActions.append(newAction)
|
|
}
|
|
|
|
return createdActions
|
|
}
|
|
|
|
func makeActionOptions(_ action: Action) -> UNNotificationActionOptions {
|
|
if action.foreground ?? false {
|
|
return .foreground
|
|
}
|
|
if action.destructive ?? false {
|
|
return .destructive
|
|
}
|
|
if action.requiresAuthentication ?? false {
|
|
return .authenticationRequired
|
|
}
|
|
return UNNotificationActionOptions(rawValue: 0)
|
|
}
|
|
|
|
func makeCategoryOptions(_ type: ActionType) -> UNNotificationCategoryOptions {
|
|
if type.customDismissAction ?? false {
|
|
return .customDismissAction
|
|
}
|
|
if type.allowInCarPlay ?? false {
|
|
return .allowInCarPlay
|
|
}
|
|
|
|
if type.hiddenPreviewsShowTitle ?? false {
|
|
return .hiddenPreviewsShowTitle
|
|
}
|
|
if type.hiddenPreviewsShowSubtitle ?? false {
|
|
return .hiddenPreviewsShowSubtitle
|
|
}
|
|
|
|
return UNNotificationCategoryOptions(rawValue: 0)
|
|
}
|