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
							 | 
						|
								    }
							 | 
						|
								} 
							 |