服务器弹出错误提示时引导查看FAQ

This commit is contained in:
Fin 2025-01-23 10:22:37 +08:00
parent c0dfb5d2b4
commit 11233dac73
2 changed files with 38 additions and 8 deletions

View File

@ -51,7 +51,7 @@ class HomeViewController: BaseViewController<HomeViewModel> {
navigationItem.setBarButtonItems(items: [
UIBarButtonItem(customView: newButton),
UIBarButtonItem(customView: serversButton),
UIBarButtonItem(customView: serversButton)
], position: .right)
self.view.addSubview(self.tableView)
@ -87,7 +87,7 @@ class HomeViewController: BaseViewController<HomeViewModel> {
let startRequestAuthorization: () -> Observable<Bool> = {
Single<Bool>.create { single -> Disposable in
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge, .criticalAlert], completionHandler: { (_ granted: Bool, _: Error?) -> Void in
center.requestAuthorization(options: [.alert, .sound, .badge, .criticalAlert], completionHandler: { (_ granted: Bool, _: Error?) in
single(.success(granted))
})
return Disposables.create()
@ -166,6 +166,13 @@ class HomeViewController: BaseViewController<HomeViewModel> {
})
.disposed(by: rx.disposeBag)
// FAQ
output.alertServerError
.drive(onNext: { [weak self] error in
self?.alertServerError(error: error)
})
.disposed(by: rx.disposeBag)
// startButton
output.startButtonEnable
.drive(self.startButton.rx.isEnabled)
@ -198,11 +205,9 @@ class HomeViewController: BaseViewController<HomeViewModel> {
var viewController: UIViewController?
if let viewModel = viewModel as? NewServerViewModel {
viewController = NewServerViewController(viewModel: viewModel)
}
else if let viewModel = viewModel as? SoundsViewModel {
} else if let viewModel = viewModel as? SoundsViewModel {
viewController = SoundsViewController(viewModel: viewModel)
}
else if let viewModel = viewModel as? CryptoSettingViewModel {
} else if let viewModel = viewModel as? CryptoSettingViewModel {
self.navigationController?.present(BarkNavigationController(rootViewController: CryptoSettingController(viewModel: viewModel)), animated: true)
return
}
@ -219,4 +224,16 @@ class HomeViewController: BaseViewController<HomeViewModel> {
self.navigationController?.present(controller, animated: true, completion: nil)
}
}
func alertServerError(error: String) {
let alertController = UIAlertController(title: NSLocalizedString("ServerError"), message: error, preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: NSLocalizedString("faq"), style: .default, handler: { [weak self] _ in
guard let url = try? NSLocalizedString("faqUrl").asURL() else {
return
}
self?.navigationController?.present(BarkSFSafariViewController(url: url), animated: true, completion: nil)
}))
alertController.addAction(UIAlertAction(title: NSLocalizedString("Cancel"), style: .cancel, handler: nil))
self.present(alertController, animated: true, completion: nil)
}
}

View File

@ -32,6 +32,7 @@ class HomeViewModel: ViewModel, ViewModelType {
let clienStateChanged: Driver<Client.ClienState>
let tableViewHidden: Driver<Bool>
let showSnackbar: Driver<String>
let alertServerError: Driver<String>
let startButtonEnable: Driver<Bool>
let copy: Driver<String>
let preview: Driver<URL>
@ -119,6 +120,9 @@ class HomeViewModel: ViewModel, ViewModelType {
)
]
/// 2FAQ
private var serverErrorCount = 0
func transform(input: Input) -> Output {
let title = BehaviorRelay(value: ServerManager.shared.currentServer.host)
@ -166,6 +170,7 @@ class HomeViewModel: ViewModel, ViewModelType {
.asDriver(onErrorJustReturn: false)
let showSnackbar = PublishRelay<String>()
let alertServerError = PublishRelay<String>()
//
tableViewHidden
@ -187,11 +192,18 @@ class HomeViewModel: ViewModel, ViewModelType {
.map { _ in () }
// client state
input.clientState.drive(onNext: { state in
input.clientState.drive(onNext: { [weak self] state in
guard let self else { return }
switch state {
case .ok: break
case .serverError(let error):
showSnackbar.accept("\(NSLocalizedString("ServerError")): \(error.rawString())")
if serverErrorCount < 2 {
showSnackbar.accept("\(NSLocalizedString("ServerError")): \(error.rawString())")
} else {
alertServerError.accept(error.rawString())
}
serverErrorCount += 1
default: break
}
// url scheme state便
@ -220,6 +232,7 @@ class HomeViewModel: ViewModel, ViewModelType {
clienStateChanged: clienState.asDriver(onErrorDriveWith: .empty()),
tableViewHidden: tableViewHidden,
showSnackbar: showSnackbar.asDriver(onErrorDriveWith: .empty()),
alertServerError: alertServerError.asDriver(onErrorDriveWith: .empty()),
startButtonEnable: Driver.just(true),
copy: Driver.merge(sectionModel.items.map { $0.copy.asDriver(onErrorDriveWith: .empty()) }),
preview: Driver.merge(sectionModel.items.map { $0.preview.asDriver(onErrorDriveWith: .empty()) }),