Some checks failed
integration tests / run-integration-tests (windows-latest) (push) Has been cancelled
Test Rust / test (push) Has been cancelled
test plugins e2e (mobile) / ios (push) Has been cancelled
test plugins e2e / test (map[name:Windows os:windows-latest]) (push) Has been cancelled
test plugins e2e / test (map[name:macOS os:macos-latest]) (push) Has been cancelled
integration tests / run-integration-tests (macos-latest) (push) Has been cancelled
version or publish / version-or-publish (push) Failing after 0s
integration tests / run-integration-tests (ubuntu-22.04) (push) Failing after 0s
Lint JavaScript / eslint (push) Failing after 0s
Sync / sync-to-mirrors (push) Failing after 0s
test plugins e2e (mobile) / android (push) Failing after 0s
test plugins e2e / test (map[name:Linux os:ubuntu-latest]) (push) Failing after 0s
Test Rust / changes (push) Failing after 0s
Lint Rust / changes (push) Failing after 0s
Lint Rust / clippy (push) Has been skipped
Audit Rust / audit-rust (push) Failing after 1s
Audit JavaScript / audit-js (push) Failing after 1s
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)
|
|
}
|