Converts AppDefaults to singleton

This commit is contained in:
Stuart Breckenridge
2020-07-02 09:57:36 +08:00
parent 4e8e792471
commit c2149579c9
19 changed files with 336 additions and 707 deletions

View File

@@ -32,19 +32,19 @@ struct MacPreferenceViewModel {
struct MacPreferencesView: View {
@EnvironmentObject var preferences: MacPreferences
@EnvironmentObject var defaults: AppDefaults
@State private var viewModel = MacPreferenceViewModel()
var body: some View {
VStack {
if viewModel.currentPreferencePane == .general {
AnyView(GeneralPreferencesView())
AnyView(GeneralPreferencesView().environmentObject(defaults))
}
else if viewModel.currentPreferencePane == .accounts {
AnyView(AccountsPreferencesView())
AnyView(AccountsPreferencesView().environmentObject(defaults))
}
else {
AnyView(AdvancedPreferencesView(preferences: preferences))
AnyView(AdvancedPreferencesView().environmentObject(defaults))
}
}
.toolbar {

View File

@@ -1,96 +0,0 @@
//
// MacPreferences.swift
// macOS
//
// Created by Stuart Breckenridge on 27/6/20.
//
import SwiftUI
enum FontSize: Int {
case small = 0
case medium = 1
case large = 2
case veryLarge = 3
}
/// The `MacPreferences` object stores all macOS specific user preferences.
class MacPreferences: ObservableObject {
private struct AppKeys {
static let refreshInterval = "refreshInterval"
static let openInBackground = "openInBrowserInBackground"
static let showUnreadCountInDock = "showUnreadCountInDock"
static let checkForUpdatesAutomatically = "checkForAppUpdates"
static let downloadTestBuilds = "downloadTestBuilds"
static let sendCrashLogs = "sendCrashLogs"
}
// Refresh Interval
public let refreshIntervals:[String] = RefreshFrequencies.allCases.map({ $0.description })
@AppStorage(wrappedValue: 0, AppKeys.refreshInterval) var refreshFrequency {
didSet {
objectWillChange.send()
}
}
// Open in background
@AppStorage(wrappedValue: false, AppKeys.openInBackground) var openInBackground {
didSet {
objectWillChange.send()
}
}
// Unread Count in Dock
@AppStorage(wrappedValue: true, AppKeys.showUnreadCountInDock) var showUnreadCountInDock {
didSet {
objectWillChange.send()
}
}
// Check for App Updates
@AppStorage(wrappedValue: true, AppKeys.checkForUpdatesAutomatically) var checkForUpdatesAutomatically {
didSet {
objectWillChange.send()
}
}
// Test builds
@AppStorage(wrappedValue: false, AppKeys.downloadTestBuilds) var downloadTestBuilds {
didSet {
objectWillChange.send()
}
}
// Crash Logs
@AppStorage(wrappedValue: false, AppKeys.sendCrashLogs) var sendCrashLogs {
didSet {
objectWillChange.send()
}
}
}
enum RefreshFrequencies: CaseIterable, CustomStringConvertible {
case refreshEvery10Mins, refreshEvery20Mins, refreshHourly, refreshEvery2Hours, refreshEvery4Hours, refreshEvery8Hours, none
var description: String {
switch self {
case .refreshEvery10Mins:
return "Every 10 minutes"
case .refreshEvery20Mins:
return "Every 20 minutes"
case .refreshHourly:
return "Every hour"
case .refreshEvery2Hours:
return "Every 2 hours"
case .refreshEvery4Hours:
return "Every 4 hours"
case .refreshEvery8Hours:
return "Every 8 hours"
case .none:
return "Manually"
}
}
}

View File

@@ -9,7 +9,7 @@ import SwiftUI
struct AdvancedPreferencesView: View {
@StateObject var preferences: MacPreferences
@EnvironmentObject private var preferences: AppDefaults
var body: some View {
VStack {

View File

@@ -0,0 +1,33 @@
//
// GeneralPreferencesView.swift
// macOS
//
// Created by Stuart Breckenridge on 27/6/20.
//
import SwiftUI
struct GeneralPreferencesView: View {
@EnvironmentObject private var defaults: AppDefaults
var body: some View {
VStack {
Form {
Picker("Refresh Feeds",
selection: $defaults.interval,
content: {
ForEach(RefreshInterval.allCases, content: { interval in
Text(interval.description()).tag(interval.rawValue)
})
}).frame(width: 300, alignment: .center)
Toggle("Open webpages in background in browser", isOn: $defaults.openInBrowserInBackground)
Toggle("Hide Unread Count in Dock", isOn: $defaults.hideDockUnreadCount)
}
Spacer()
}.frame(width: 300, alignment: .center)
}
}

View File

@@ -1,33 +0,0 @@
//
// GeneralPreferencesView.swift
// macOS
//
// Created by Stuart Breckenridge on 27/6/20.
//
import SwiftUI
struct GeneralPreferencesView: View {
@ObservedObject private var preferences = MacPreferences()
var body: some View {
VStack {
Form {
Picker("Refresh Feeds",
selection: $preferences.refreshFrequency,
content: {
ForEach(0..<preferences.refreshIntervals.count, content: {
Text(preferences.refreshIntervals[$0])
})
}).frame(width: 300, alignment: .center)
Toggle("Open webpages in background in browser", isOn: $preferences.openInBackground)
Toggle("Show Unread Count in Dock", isOn: $preferences.showUnreadCountInDock)
}
Spacer()
}.frame(width: 300, alignment: .center)
}
}