mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Converts AppDefaults to singleton
This commit is contained in:
@@ -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 {
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import SwiftUI
|
||||
|
||||
struct AdvancedPreferencesView: View {
|
||||
|
||||
@StateObject var preferences: MacPreferences
|
||||
@EnvironmentObject private var preferences: AppDefaults
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user