Storage.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // LoopFollow
  2. // Storage.swift
  3. import Foundation
  4. import HealthKit
  5. import UIKit
  6. /*
  7. Observable persistant storage
  8. */
  9. class Storage {
  10. var remoteType = StorageValue<RemoteType>(key: "remoteType", defaultValue: .none)
  11. var deviceToken = StorageValue<String>(key: "deviceToken", defaultValue: "")
  12. var expirationDate = StorageValue<Date?>(key: "expirationDate", defaultValue: nil)
  13. var sharedSecret = StorageValue<String>(key: "sharedSecret", defaultValue: "")
  14. var productionEnvironment = StorageValue<Bool>(key: "productionEnvironment", defaultValue: false)
  15. var apnsKey = StorageValue<String>(key: "apnsKey", defaultValue: "")
  16. var teamId = StorageValue<String?>(key: "teamId", defaultValue: nil)
  17. var keyId = StorageValue<String>(key: "keyId", defaultValue: "")
  18. var bundleId = StorageValue<String>(key: "bundleId", defaultValue: "")
  19. var user = StorageValue<String>(key: "user", defaultValue: "")
  20. var maxBolus = SecureStorageValue<HKQuantity>(key: "maxBolus", defaultValue: HKQuantity(unit: .internationalUnit(), doubleValue: 1.0))
  21. var maxCarbs = SecureStorageValue<HKQuantity>(key: "maxCarbs", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0))
  22. var maxProtein = SecureStorageValue<HKQuantity>(key: "maxProtein", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0))
  23. var maxFat = SecureStorageValue<HKQuantity>(key: "maxFat", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0))
  24. var mealWithBolus = StorageValue<Bool>(key: "mealWithBolus", defaultValue: false)
  25. var mealWithFatProtein = StorageValue<Bool>(key: "mealWithFatProtein", defaultValue: false)
  26. var cachedJWT = StorageValue<String?>(key: "cachedJWT", defaultValue: nil)
  27. var jwtExpirationDate = StorageValue<Date?>(key: "jwtExpirationDate", defaultValue: nil)
  28. var backgroundRefreshType = StorageValue<BackgroundRefreshType>(key: "backgroundRefreshType", defaultValue: .silentTune)
  29. var selectedBLEDevice = StorageValue<BLEDevice?>(key: "selectedBLEDevice", defaultValue: nil)
  30. var debugLogLevel = StorageValue<Bool>(key: "debugLogLevel", defaultValue: false)
  31. var contactTrend = StorageValue<ContactIncludeOption>(key: "contactTrend", defaultValue: .off)
  32. var contactDelta = StorageValue<ContactIncludeOption>(key: "contactDelta", defaultValue: .off)
  33. var contactEnabled = StorageValue<Bool>(key: "contactEnabled", defaultValue: false)
  34. var contactBackgroundColor = StorageValue<String>(key: "contactBackgroundColor", defaultValue: ContactColorOption.black.rawValue)
  35. var contactTextColor = StorageValue<String>(key: "contactTextColor", defaultValue: ContactColorOption.white.rawValue)
  36. var sensorScheduleOffset = StorageValue<Double?>(key: "sensorScheduleOffset", defaultValue: nil)
  37. var alarms = StorageValue<[Alarm]>(key: "alarms", defaultValue: [])
  38. var alarmConfiguration = StorageValue<AlarmConfiguration>(key: "alarmConfiguration", defaultValue: .default)
  39. var lastOverrideStartNotified = StorageValue<TimeInterval?>(key: "lastOverrideStartNotified", defaultValue: nil)
  40. var lastOverrideEndNotified = StorageValue<TimeInterval?>(key: "lastOverrideEndNotified", defaultValue: nil)
  41. var lastTempTargetStartNotified = StorageValue<TimeInterval?>(key: "lastTempTargetStartNotified", defaultValue: nil)
  42. var lastTempTargetEndNotified = StorageValue<TimeInterval?>(key: "lastTempTargetEndNotified", defaultValue: nil)
  43. var lastRecBolusNotified = StorageValue<Double?>(key: "lastRecBolusNotified", defaultValue: nil)
  44. var lastCOBNotified = StorageValue<Double?>(key: "lastCOBNotified", defaultValue: nil)
  45. var lastMissedBolusNotified = StorageValue<Date?>(key: "lastMissedBolusNotified", defaultValue: nil)
  46. // General Settings [BEGIN]
  47. var appBadge = StorageValue<Bool>(key: "appBadge", defaultValue: true)
  48. var colorBGText = StorageValue<Bool>(key: "colorBGText", defaultValue: true)
  49. var forceDarkMode = StorageValue<Bool>(key: "forceDarkMode", defaultValue: true)
  50. var showStats = StorageValue<Bool>(key: "showStats", defaultValue: true)
  51. var useIFCC = StorageValue<Bool>(key: "useIFCC", defaultValue: false)
  52. var showSmallGraph = StorageValue<Bool>(key: "showSmallGraph", defaultValue: true)
  53. var screenlockSwitchState = StorageValue<Bool>(key: "screenlockSwitchState", defaultValue: true)
  54. var showDisplayName = StorageValue<Bool>(key: "showDisplayName", defaultValue: false)
  55. var snoozerEmoji = StorageValue<Bool>(key: "snoozerEmoji", defaultValue: false)
  56. var forcePortraitMode = StorageValue<Bool>(key: "forcePortraitMode", defaultValue: false)
  57. var speakBG = StorageValue<Bool>(key: "speakBG", defaultValue: false)
  58. var speakBGAlways = StorageValue<Bool>(key: "speakBGAlways", defaultValue: true)
  59. var speakLowBG = StorageValue<Bool>(key: "speakLowBG", defaultValue: false)
  60. var speakProactiveLowBG = StorageValue<Bool>(key: "speakProactiveLowBG", defaultValue: false)
  61. var speakFastDropDelta = StorageValue<Double>(key: "speakFastDropDelta", defaultValue: 10.0)
  62. var speakLowBGLimit = StorageValue<Double>(key: "speakLowBGLimit", defaultValue: 72.0)
  63. var speakHighBGLimit = StorageValue<Double>(key: "speakHighBGLimit", defaultValue: 180.0)
  64. var speakHighBG = StorageValue<Bool>(key: "speakHighBG", defaultValue: false)
  65. var speakLanguage = StorageValue<String>(key: "speakLanguage", defaultValue: "en")
  66. // General Settings [END]
  67. // Graph Settings [BEGIN]
  68. var showDots = StorageValue<Bool>(key: "showDots", defaultValue: true)
  69. var showLines = StorageValue<Bool>(key: "showLines", defaultValue: true)
  70. var showValues = StorageValue<Bool>(key: "showValues", defaultValue: true)
  71. var showAbsorption = StorageValue<Bool>(key: "showAbsorption", defaultValue: true)
  72. var showDIALines = StorageValue<Bool>(key: "showDIAMarkers", defaultValue: true)
  73. var show30MinLine = StorageValue<Bool>(key: "show30MinLine", defaultValue: false)
  74. var show90MinLine = StorageValue<Bool>(key: "show90MinLine", defaultValue: false)
  75. var showMidnightLines = StorageValue<Bool>(key: "showMidnightMarkers", defaultValue: false)
  76. var smallGraphTreatments = StorageValue<Bool>(key: "smallGraphTreatments", defaultValue: true)
  77. var smallGraphHeight = StorageValue<Int>(key: "smallGraphHeight", defaultValue: 40)
  78. var predictionToLoad = StorageValue<Double>(key: "predictionToLoad", defaultValue: 1.0)
  79. var minBasalScale = StorageValue<Double>(key: "minBasalScale", defaultValue: 5.0)
  80. var minBGScale = StorageValue<Double>(key: "minBGScale", defaultValue: 250.0)
  81. var lowLine = StorageValue<Double>(key: "lowLine", defaultValue: 70.0)
  82. var highLine = StorageValue<Double>(key: "highLine", defaultValue: 180.0)
  83. var downloadDays = StorageValue<Int>(key: "downloadDays", defaultValue: 1)
  84. // Graph Settings [END]
  85. // Calendar entries [BEGIN]
  86. var writeCalendarEvent = StorageValue<Bool>(key: "writeCalendarEvent", defaultValue: false)
  87. var calendarIdentifier = StorageValue<String>(key: "calendarIdentifier", defaultValue: "")
  88. var watchLine1 = StorageValue<String>(key: "watchLine1", defaultValue: "%BG% %DIRECTION% %DELTA% %MINAGO%")
  89. var watchLine2 = StorageValue<String>(key: "watchLine2", defaultValue: "C:%COB% I:%IOB% B:%BASAL%")
  90. // Calendar entries [END]
  91. // MARK: - Dexcom Share --------------------------------------------------------
  92. var shareUserName = StorageValue<String>(key: "shareUserName", defaultValue: "")
  93. var sharePassword = StorageValue<String>(key: "sharePassword", defaultValue: "")
  94. var shareServer = StorageValue<String>(key: "shareServer", defaultValue: "US")
  95. // MARK: - Graph ---------------------------------------------------------------
  96. var chartScaleX = StorageValue<Double>(key: "chartScaleX", defaultValue: 18.0)
  97. // MARK: - Advanced settings ---------------------------------------------------
  98. var downloadTreatments = StorageValue<Bool>(key: "downloadTreatments", defaultValue: true)
  99. var downloadPrediction = StorageValue<Bool>(key: "downloadPrediction", defaultValue: true)
  100. var graphOtherTreatments = StorageValue<Bool>(key: "graphOtherTreatments", defaultValue: true)
  101. var graphBasal = StorageValue<Bool>(key: "graphBasal", defaultValue: true)
  102. var graphBolus = StorageValue<Bool>(key: "graphBolus", defaultValue: true)
  103. var graphCarbs = StorageValue<Bool>(key: "graphCarbs", defaultValue: true)
  104. var bgUpdateDelay = StorageValue<Int>(key: "bgUpdateDelay", defaultValue: 10)
  105. // MARK: - Insert times (sensor / pump) ---------------------------------------
  106. var cageInsertTime = StorageValue<TimeInterval>(key: "cageInsertTime", defaultValue: 0)
  107. var sageInsertTime = StorageValue<TimeInterval>(key: "sageInsertTime", defaultValue: 0)
  108. // MARK: - Version-info ---------------------------
  109. var cachedForVersion = StorageValue<String?>(key: "cachedForVersion", defaultValue: nil)
  110. var latestVersion = StorageValue<String?>(key: "latestVersion", defaultValue: nil)
  111. var latestVersionChecked = StorageValue<Date?>(key: "latestVersionChecked", defaultValue: nil)
  112. var currentVersionBlackListed = StorageValue<Bool>(key: "currentVersionBlackListed", defaultValue: false)
  113. var lastBlacklistNotificationShown = StorageValue<Date?>(key: "lastBlacklistNotificationShown", defaultValue: nil)
  114. var lastVersionUpdateNotificationShown = StorageValue<Date?>(key: "lastVersionUpdateNotificationShown", defaultValue: nil)
  115. var lastExpirationNotificationShown = StorageValue<Date?>(key: "lastExpirationNotificationShown", defaultValue: nil)
  116. var hideInfoTable = StorageValue<Bool>(key: "hideInfoTable", defaultValue: false)
  117. var token = StorageValue<String>(key: "token", defaultValue: "")
  118. var units = StorageValue<String>(key: "units", defaultValue: "mg/dL")
  119. var infoSort = StorageValue<[Int]>(key: "infoSort", defaultValue: InfoType.allCases.map { $0.sortOrder })
  120. var infoVisible = StorageValue<[Bool]>(key: "infoVisible", defaultValue: InfoType.allCases.map { $0.defaultVisible })
  121. var url = StorageValue<String>(key: "url", defaultValue: "")
  122. var device = StorageValue<String>(key: "device", defaultValue: "")
  123. var nsWriteAuth = StorageValue<Bool>(key: "nsWriteAuth", defaultValue: false)
  124. var nsAdminAuth = StorageValue<Bool>(key: "nsAdminAuth", defaultValue: false)
  125. var migrationStep = StorageValue<Int>(key: "migrationStep", defaultValue: 0)
  126. var persistentNotification = StorageValue<Bool>(key: "persistentNotification", defaultValue: false)
  127. var persistentNotificationLastBGTime = StorageValue<Date>(key: "persistentNotificationLastBGTime", defaultValue: .distantPast)
  128. var lastLoopingChecked = StorageValue<Date?>(key: "lastLoopingChecked", defaultValue: nil)
  129. var alarmsPosition = StorageValue<TabPosition>(key: "alarmsPosition", defaultValue: .position2)
  130. var remotePosition = StorageValue<TabPosition>(key: "remotePosition", defaultValue: .more)
  131. var nightscoutPosition = StorageValue<TabPosition>(key: "nightscoutPosition", defaultValue: .position4)
  132. var loopAPNSQrCodeURL = StorageValue<String>(key: "loopAPNSQrCodeURL", defaultValue: "")
  133. static let shared = Storage()
  134. private init() {}
  135. }