Files
damus/damus/Features/Settings/Models/GlobalSettingsStore.swift
T
Daniel D’Aquino 3c98282f95 Sentry integration
Changelog-Added: Added Sentry error and diagnostics reporting to aid
future quality improvements
Closes: #3731
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
2026-05-11 11:30:20 -07:00

54 lines
1.8 KiB
Swift

//
// GlobalSettingsStore.swift
// damus
//
// Created for device-level settings that apply globally across all accounts
//
import Foundation
import Combine
/// A property wrapper for global (non-pubkey-scoped) settings.
/// Use this for device-level preferences that should apply regardless of which account is logged in.
@propertyWrapper struct GlobalSetting<T: Equatable> {
private let key: String
private var value: T
init(key: String, default_value: T) {
if T.self == Bool.self {
GlobalSettingsStore.bool_options.insert(key)
}
self.key = key
self.value = DamusUserDefaults.standard.object(forKey: key) as? T ?? default_value
}
var wrappedValue: T {
get { return value }
set {
guard value != newValue else { return }
self.value = newValue
DamusUserDefaults.standard.set(newValue, forKey: key)
DispatchQueue.main.async {
GlobalSettingsStore.shared.objectWillChange.send()
}
}
}
}
/// Store for global (device-level) settings that apply regardless of which account is logged in.
///
/// Unlike `UserSettingsStore`, these settings are not scoped to a specific pubkey.
/// Use this for device preferences like privacy settings, accessibility options, etc.
class GlobalSettingsStore: ObservableObject {
static let shared = GlobalSettingsStore()
static var bool_options = Set<String>()
private init() {}
/// Controls whether Sentry telemetry and error reporting is enabled.
/// When disabled, no data is sent to Sentry for crash reporting or diagnostics.
/// This is a global setting that applies to all accounts on this device.
@GlobalSetting(key: "enable_sentry_telemetry", default_value: false)
var enable_sentry_telemetry: Bool
}