From 588dbb0ce530efca707e9e07bf4a514d60a109d6 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 18 Aug 2019 16:07:37 -0700 Subject: [PATCH] =?UTF-8?q?Add=20prefs=20to=20Advanced=20prefs=20pane=20to?= =?UTF-8?q?=201)=20check=20for=20updates=20automatically,=20and=202)=20cho?= =?UTF-8?q?ose=20to=20download=20test=20or=20release=20builds.=20The=20def?= =?UTF-8?q?ault=20will=20be=20release=20builds=20only,=20since=20most=20pe?= =?UTF-8?q?ople=20don=E2=80=99t=20want=20test=20builds.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mac/Base.lproj/Preferences.storyboard | 133 ++++++++++++------ .../AdvancedPreferencesViewController.swift | 51 +++++++ 2 files changed, 141 insertions(+), 43 deletions(-) diff --git a/Mac/Base.lproj/Preferences.storyboard b/Mac/Base.lproj/Preferences.storyboard index ee3005c13..725aafbbe 100644 --- a/Mac/Base.lproj/Preferences.storyboard +++ b/Mac/Base.lproj/Preferences.storyboard @@ -177,54 +177,91 @@ - + - - + + + + + + + + + + - - + + - + - + + - + @@ -232,7 +269,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + diff --git a/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift b/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift index 8e8909f25..296f2c876 100644 --- a/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift +++ b/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift @@ -10,5 +10,56 @@ import AppKit final class AdvancedPreferencesViewController: NSViewController { + @IBOutlet var releaseBuildsButton: NSButton! + @IBOutlet var testBuildsButton: NSButton! + + let releaseBuildsURL = Bundle.main.infoDictionary!["SUFeedURL"]! as! String + let testBuildsURL = Bundle.main.infoDictionary!["FeedURLForTestBuilds"]! as! String + let appcastDefaultsKey = "SUFeedURL" + + var didRegisterForNotification = false + var wantsTestBuilds: Bool { + get { + return currentAppcastURL() == testBuildsURL + } + set { + UserDefaults.standard.set(newValue ? testBuildsURL : releaseBuildsURL, forKey: appcastDefaultsKey) + } + } + + override func viewWillAppear() { + super.viewWillAppear() + updateUI() + if !didRegisterForNotification { + NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: UserDefaults.didChangeNotification, object: nil) + didRegisterForNotification = true + } + } + + @IBAction func updateTypeButtonClicked(_ sender: Any?) { + guard let button = sender as? NSButton else { + return + } + wantsTestBuilds = (button === testBuildsButton) + } + + @objc func userDefaultsDidChange(_ sender: Any?) { + updateUI() + } } +private extension AdvancedPreferencesViewController { + + func updateUI() { + if wantsTestBuilds { + testBuildsButton.state = .on + } + else { + releaseBuildsButton.state = .on + } + } + + func currentAppcastURL() -> String { + return UserDefaults.standard.string(forKey: appcastDefaultsKey) ?? "" + } +}