You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.1 KiB
85 lines
3.1 KiB
/**
|
|
* DailyNotificationConfig.swift
|
|
* Daily Notification Plugin for Capacitor
|
|
*
|
|
* Provides configuration options for the notification plugin
|
|
*/
|
|
|
|
import Foundation
|
|
|
|
/// Configuration options for the DailyNotification plugin
|
|
///
|
|
/// This singleton structure provides configurable options that can be modified
|
|
/// to customize the plugin's behavior.
|
|
public struct DailyNotificationConfig {
|
|
/// Shared instance for singleton access
|
|
public static var shared = DailyNotificationConfig()
|
|
|
|
/// Maximum number of notifications that can be scheduled per day
|
|
public var maxNotificationsPerDay = 10
|
|
|
|
/// Default timezone for notifications when none is specified
|
|
public var defaultTimeZone = TimeZone.current
|
|
|
|
/// Whether debug logging is enabled
|
|
public var loggingEnabled = true
|
|
|
|
/// Number of days to retain delivered notifications
|
|
public var retentionDays = 7
|
|
|
|
/// Whether adaptive scheduling is enabled
|
|
public var adaptiveSchedulingEnabled = true
|
|
|
|
/// Battery level thresholds for adaptive scheduling
|
|
public struct BatteryThresholds {
|
|
public static let critical = 15
|
|
public static let low = 30
|
|
public static let medium = 50
|
|
}
|
|
|
|
/// Time intervals for different battery levels (in seconds)
|
|
public struct SchedulingIntervals {
|
|
public static let critical = TimeInterval(4 * 60 * 60) // 4 hours
|
|
public static let low = TimeInterval(2 * 60 * 60) // 2 hours
|
|
public static let medium = TimeInterval(60 * 60) // 1 hour
|
|
public static let normal = TimeInterval(30 * 60) // 30 minutes
|
|
}
|
|
|
|
/// Wake lock duration based on battery level (in seconds)
|
|
public struct WakeLockDurations {
|
|
public static let critical = TimeInterval(30) // 30 seconds
|
|
public static let low = TimeInterval(45) // 45 seconds
|
|
public static let normal = TimeInterval(60) // 1 minute
|
|
}
|
|
|
|
private init() {}
|
|
|
|
/// Resets all configuration options to their default values
|
|
public mutating func resetToDefaults() {
|
|
maxNotificationsPerDay = 10
|
|
defaultTimeZone = TimeZone.current
|
|
loggingEnabled = true
|
|
retentionDays = 7
|
|
adaptiveSchedulingEnabled = true
|
|
}
|
|
|
|
/// Validates and sets the maximum notifications per day
|
|
/// - Parameter value: The new maximum notifications value
|
|
/// - Throws: DailyNotificationError if the value is invalid
|
|
public mutating func setMaxNotificationsPerDay(_ value: Int) throws {
|
|
guard value > 0 else {
|
|
throw DailyNotificationError.invalidParameters("Max notifications per day must be greater than 0")
|
|
}
|
|
maxNotificationsPerDay = value
|
|
}
|
|
|
|
/// Validates and sets the retention days
|
|
/// - Parameter value: The new retention days value
|
|
/// - Throws: DailyNotificationError if the value is invalid
|
|
public mutating func setRetentionDays(_ value: Int) throws {
|
|
guard value > 0 else {
|
|
throw DailyNotificationError.invalidParameters("Retention days must be greater than 0")
|
|
}
|
|
retentionDays = value
|
|
}
|
|
}
|