// // SettingsView.swift // Multiplatform iOS // // Created by Stuart Breckenridge on 30/6/20. // Copyright © 2020 Ranchero Software. All rights reserved. // import SwiftUI import Account class SettingsViewModel: ObservableObject { enum HelpSites { case netNewsWireHelp, netNewsWire, supportNetNewsWire, github, bugTracker, technotes, netNewsWireSlack, none var url: URL? { switch self { case .netNewsWireHelp: return URL(string: "https://ranchero.com/netnewswire/help/ios/5.0/en/")! case .netNewsWire: return URL(string: "https://ranchero.com/netnewswire/")! case .supportNetNewsWire: return URL(string: "https://github.com/brentsimmons/NetNewsWire/blob/master/Technotes/HowToSupportNetNewsWire.markdown")! case .github: return URL(string: "https://github.com/brentsimmons/NetNewsWire")! case .bugTracker: return URL(string: "https://github.com/brentsimmons/NetNewsWire/issues")! case .technotes: return URL(string: "https://github.com/brentsimmons/NetNewsWire/tree/master/Technotes")! case .netNewsWireSlack: return URL(string: "https://ranchero.com/netnewswire/slack")! case .none: return nil } } } @Published var presentSheet: Bool = false var selectedWebsite: HelpSites = .none { didSet { if selectedWebsite == .none { presentSheet = false } else { presentSheet = true } } } } struct SettingsView: View { let sortedAccounts = AccountManager.shared.sortedAccounts @Environment(\.presentationMode) var presentationMode @StateObject private var viewModel = SettingsViewModel() @StateObject private var settings = AppDefaults.shared var body: some View { NavigationView { List { systemSettings accounts importExport timeline articles appearance help } .listStyle(InsetGroupedListStyle()) .navigationBarTitle("Settings", displayMode: .inline) .navigationBarItems(leading: HStack { Button("Done") { presentationMode.wrappedValue.dismiss() } } ) } .sheet(isPresented: $viewModel.presentSheet, content: { SafariView(url: viewModel.selectedWebsite.url!) }) } var systemSettings: some View { Section(header: Text("Notifications, Badge, Data, & More"), content: { Button(action: { UIApplication.shared.open(URL(string: "\(UIApplication.openSettingsURLString)")!) }, label: { Text("Open System Settings").foregroundColor(.primary) }) }) } var accounts: some View { Section(header: Text("Accounts"), content: { ForEach(0.. String { let dict = NSDictionary(contentsOf: Bundle.main.url(forResource: "Info", withExtension: "plist")!) let version = dict?.object(forKey: "CFBundleShortVersionString") as? String ?? "" let build = dict?.object(forKey: "CFBundleVersion") as? String ?? "" return "NetNewsWire \(version) (Build \(build))" } } struct SettingsView_Previews: PreviewProvider { static var previews: some View { SettingsView() } }