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) ?? "" + } +}