Files
element-x-ios/ElementX/Sources/Application/Settings/Storage/TrackedUserDefaults.swift
T
Doug 93825c01ad Initial implementation of AccountSettings. (#6275)
* 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..
2026-10-06 17:52:24 +01:00

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