mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-01 18:23:03 +00:00
93825c01ad
* Make the UserPreference macro also generate an accessor for the key name. * Initial implementation of AccountSettings. - Add an AccountUserDefaults storage with a userID prefix on the key. - Migrate the 2 values reset by AppSettings.resetSessionSpecificSettings to AccountSettings. * Rename UserSettings.volatile() to UserSettings.mock() Given it now has a userID parameter with a default value..
51 lines
1.3 KiB
Swift
51 lines
1.3 KiB
Swift
//
|
|
// Copyright 2026 Element Creations Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
final nonisolated class TrackedUserDefaults: UserDefaults, UserDefaultsProtocol {
|
|
private let lock = NSLock()
|
|
|
|
private nonisolated(unsafe) var _trackedSuites: [String] = []
|
|
private(set) var trackedSuites: [String] {
|
|
get { lock.withLock { _trackedSuites } }
|
|
set { lock.withLock { _trackedSuites = newValue } }
|
|
}
|
|
|
|
override init?(suiteName suitename: String?) {
|
|
if let suitename {
|
|
lock.lock()
|
|
_trackedSuites = [suitename]
|
|
lock.unlock()
|
|
}
|
|
|
|
super.init(suiteName: suitename)
|
|
}
|
|
|
|
override func addSuite(named suiteName: String) {
|
|
trackedSuites.append(suiteName)
|
|
super.addSuite(named: suiteName)
|
|
}
|
|
|
|
override func removeSuite(named suiteName: String) {
|
|
trackedSuites.removeAll { $0 == suiteName }
|
|
super.removeSuite(named: suiteName)
|
|
}
|
|
|
|
func resetRegisteredDomains() {
|
|
lock.withLock {
|
|
for suite in _trackedSuites {
|
|
removePersistentDomain(forName: suite)
|
|
}
|
|
}
|
|
}
|
|
|
|
func reset() {
|
|
resetRegisteredDomains()
|
|
}
|
|
}
|