mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
服务器弹出错误提示时引导查看FAQ
This commit is contained in:
parent
c0dfb5d2b4
commit
11233dac73
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
)
|
||||
]
|
||||
|
||||
/// 记录服务器错误的次数,如果错误次数大于2次,弹出提示引导用户查看FAQ。
|
||||
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()) }),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user