jsdw_ios/QuickLocation/Section/Launch/LaunchViewController.swift

144 lines
4.4 KiB
Swift

//
// LaunchViewController.swift
// SHECommunity
//
// Created by Lin on 2025/1/3.
//
import UIKit
import RxSwift
import SwiftyUserDefaults
import RxCocoa
class LaunchViewController: BaseViewController {
private let showVersion = 1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
view.backgroundColor = .white
setupLayout()
getUserConfig()
}
///
func getUserConfig() {
SystemService.userConfig().subscribe(onNext: { response in
guard let model = response.model else { return }
MQTTService.shared.connect()
Defaults[\.loginToken] = model.token
RelationStore.shared.preload()
if #available(iOS 16.0, *) {
AppRestrictManager.shared.checkScreenTimePermissionAfterLogin()
}
AppContextManager.shared.systemConfig = model.config
if let upgrade = AppContextManager.shared.systemConfig?.versionUpgradeModel {
self.showVersionUpgrade(upgrade, model: model)
return
}
self.continueAfterConfig(model: model)
}, onError: { [weak self] (error) in
DLAlert.show(title: error.localizedDescription,
defaultTitle: "重试") { [weak self] in
guard let this = self else { return }
// #if DEBUG || AdHoc
// this.showServerSwitchAlert()
// #else
this.getUserConfig()
// #endif
}
}).disposed(by: disposeBag)
}
private func showServerSwitchAlert() {
let current = URLManager.shared.apiServerURL
let alert = UIAlertController(
title: "切换接口",
message: "当前:\(current)",
preferredStyle: .alert
)
alert.addTextField { field in
field.placeholder = "自定义接口地址"
field.text = current
field.keyboardType = .URL
field.autocorrectionType = .no
field.autocapitalizationType = .none
}
for preset in URLManager.presetServers {
alert.addAction(UIAlertAction(title: preset.title, style: .default) { [weak self] _ in
self?.applyServer(url: preset.url, env: preset.env)
})
}
alert.addAction(UIAlertAction(title: "确定", style: .default) { [weak self] _ in
let typed = alert.textFields?.first?.text ?? ""
self?.applyServer(url: typed, env: nil)
})
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
present(alert, animated: true)
}
private func applyServer(url: String, env: Int?) {
let normalized = URLManager.normalizedServerURL(url)
guard !normalized.isEmpty else {
DLToast.show(text: "请输入接口地址")
return
}
URLManager.shared.switchServer(url: normalized, env: env)
AppDelegate.shared.showMainViewController()
}
private func continueAfterConfig(model: UserConfigModel) {
AppDelegate.shared.showMainViewController()
}
private func showVersionUpgrade(_ upgrade: VersionUpgradeModel, model: UserConfigModel) {
showVersionUpgradePop(upgrade: upgrade) { [weak self] in
self?.continueAfterConfig(model: model)
}
}
// MARK: - Init
init() {
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
lazy var launchLogoView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Launch/logo")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
lazy var tipsImgView: UIImageView = {
let view = UIImageView()
view.image = UIImage(named: "Launch/slogan")
view.backgroundColor = .clear
view.contentMode = .scaleAspectFill
return view
}()
}
extension LaunchViewController {
private func setupLayout() {
view.addSubview(launchLogoView)
view.addSubview(tipsImgView)
launchLogoView.layoutChain
.centerX()
.centerY()
tipsImgView.layoutChain
.centerX()
.bottom(kSafeBottomMargin + 50)
}
}