mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
- ReleaseTracks: Added in-app ReleaseTracks switching support
This commit is contained in:
@@ -75,6 +75,8 @@ extension SettingsViewController
|
||||
case refreshSideJITServer
|
||||
case resetPairingFile
|
||||
case anisetteServers
|
||||
case betaUpdates
|
||||
case betaTrack
|
||||
// case hiddenSettings
|
||||
}
|
||||
|
||||
@@ -86,7 +88,7 @@ extension SettingsViewController
|
||||
case exportDatabase
|
||||
case deleteDatabase
|
||||
case operationsLoggingControl
|
||||
case recreateDatabase
|
||||
case recreateDatabase
|
||||
case minimuxerConsoleLogging
|
||||
}
|
||||
}
|
||||
@@ -97,6 +99,10 @@ final class SettingsViewController: UITableViewController
|
||||
|
||||
private var prototypeHeaderFooterView: SettingsHeaderFooterView!
|
||||
|
||||
// Add outlet
|
||||
@IBOutlet private var betaTrackLabel: UILabel!
|
||||
@IBOutlet private var betaTrackPopupButton: UIButton!
|
||||
|
||||
private var debugGestureCounter = 0
|
||||
private weak var debugGestureTimer: Timer?
|
||||
|
||||
@@ -107,6 +113,7 @@ final class SettingsViewController: UITableViewController
|
||||
@IBOutlet private var backgroundRefreshSwitch: UISwitch!
|
||||
@IBOutlet private var noIdleTimeoutSwitch: UISwitch!
|
||||
@IBOutlet private var disableAppLimitSwitch: UISwitch!
|
||||
@IBOutlet private var betaUpdatesSwitch: UISwitch!
|
||||
@IBOutlet private var exportResignedAppsSwitch: UISwitch!
|
||||
@IBOutlet private var verboseOperationsLoggingSwitch: UISwitch!
|
||||
@IBOutlet private var minimuxerConsoleLoggingSwitch: UISwitch!
|
||||
@@ -120,7 +127,7 @@ final class SettingsViewController: UITableViewController
|
||||
@IBOutlet private var githubButton: UIButton!
|
||||
|
||||
@IBOutlet private var versionLabel: UILabel!
|
||||
|
||||
|
||||
@IBOutlet private var recreateDatabaseSwitch: UISwitch!
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
@@ -128,7 +135,7 @@ final class SettingsViewController: UITableViewController
|
||||
}
|
||||
|
||||
private static var exportDBInProgress = false
|
||||
private static var deleteDBInProgress = false
|
||||
private static var deleteDBInProgress = false
|
||||
|
||||
required init?(coder aDecoder: NSCoder)
|
||||
{
|
||||
@@ -138,6 +145,48 @@ private static var deleteDBInProgress = false
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.openErrorLog(_:)), name: ToastView.openErrorLogNotification, object: nil)
|
||||
}
|
||||
|
||||
|
||||
private func handleReleaseChannelSelection(_ channel: String) {
|
||||
// Update your model/preferences
|
||||
UserDefaults.standard.betaUdpatesTrack = channel
|
||||
updateReleaseChannelButtonTitle()
|
||||
}
|
||||
|
||||
private func updateReleaseChannelButtonTitle() {
|
||||
let channel = UserDefaults.standard.betaUdpatesTrack ?? UserDefaults.defaultBetaUpdatesTrack
|
||||
betaTrackPopupButton.setTitle(channel, for: .normal)
|
||||
}
|
||||
|
||||
private func configureReleaseChannelButton() {
|
||||
let currentTrack = UserDefaults.standard.betaUdpatesTrack
|
||||
|
||||
// get all tracks as string available except .stable and .unknown
|
||||
var trackOptions: [String] = ReleaseTracks.betaTracks.map {$0.rawValue}
|
||||
|
||||
if let currentTrack{
|
||||
// prepend currently selected beta track from the user defaults
|
||||
trackOptions = [currentTrack] + trackOptions.filter { $0 != currentTrack }
|
||||
}
|
||||
|
||||
// Create menu items with proper styling
|
||||
let items = trackOptions.map{ channel in
|
||||
UIAction(title: channel, handler: { [weak self] _ in
|
||||
self?.handleReleaseChannelSelection(channel)
|
||||
})
|
||||
}
|
||||
|
||||
// Create menu with proper styling
|
||||
let menu = UIMenu(title: "",
|
||||
options: [.singleSelection, .displayInline], // Add displayInline
|
||||
children: items
|
||||
)
|
||||
betaTrackPopupButton.menu = menu
|
||||
|
||||
// Set initial state
|
||||
updateReleaseChannelButtonTitle()
|
||||
}
|
||||
|
||||
|
||||
override func viewDidLoad()
|
||||
{
|
||||
super.viewDidLoad()
|
||||
@@ -185,6 +234,8 @@ private static var deleteDBInProgress = false
|
||||
button.imageView?.contentMode = .scaleAspectFit
|
||||
}
|
||||
}
|
||||
|
||||
configureReleaseChannelButton()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool)
|
||||
@@ -286,7 +337,7 @@ private extension SettingsViewController
|
||||
localizedVersion += buildInfo.project_version.map{ version in
|
||||
version.isEmpty ? "" : " (\(version))"
|
||||
} ?? installedApp.localizedVersion
|
||||
|
||||
|
||||
versionLabel = NSLocalizedString(String(format: "Version %@", localizedVersion), comment: "SideStore Version")
|
||||
}
|
||||
else if let version = buildInfo.marketing_version
|
||||
@@ -306,7 +357,7 @@ private extension SettingsViewController
|
||||
{
|
||||
versionLabel += "\n\(getXcodeVersion())"
|
||||
}
|
||||
|
||||
|
||||
return versionLabel
|
||||
}
|
||||
|
||||
@@ -332,6 +383,9 @@ private extension SettingsViewController
|
||||
self.disableAppLimitSwitch.isOn = UserDefaults.standard.isAppLimitDisabled
|
||||
|
||||
// AdvancedSettingsRow
|
||||
self.betaUpdatesSwitch.isOn = UserDefaults.standard.isBetaUpdatesEnabled
|
||||
self.betaTrackLabel.isEnabled = UserDefaults.standard.isBetaUpdatesEnabled
|
||||
self.betaTrackPopupButton.isEnabled = UserDefaults.standard.isBetaUpdatesEnabled
|
||||
|
||||
// DiagnosticsRow
|
||||
self.disableResponseCachingSwitch.isOn = UserDefaults.standard.responseCachingDisabled
|
||||
@@ -573,6 +627,13 @@ private extension SettingsViewController
|
||||
}
|
||||
|
||||
|
||||
@IBAction func toggleEnableBetaUpdates(_ sender: UISwitch) {
|
||||
betaTrackLabel.isEnabled = sender.isOn
|
||||
betaTrackPopupButton.isEnabled = sender.isOn
|
||||
// update it in database
|
||||
UserDefaults.standard.isBetaUpdatesEnabled = sender.isOn
|
||||
}
|
||||
|
||||
@IBAction func toggleIsBackgroundRefreshEnabled(_ sender: UISwitch)
|
||||
{
|
||||
UserDefaults.standard.isBackgroundRefreshEnabled = sender.isOn
|
||||
@@ -1134,7 +1195,7 @@ extension SettingsViewController
|
||||
// } else {
|
||||
// ELOG("UIApplication.openSettingsURLString invalid")
|
||||
// }
|
||||
case .refreshAttempts : break
|
||||
case .refreshAttempts, .betaUpdates, .betaTrack: break
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user