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: [
|
navigationItem.setBarButtonItems(items: [
|
||||||
UIBarButtonItem(customView: newButton),
|
UIBarButtonItem(customView: newButton),
|
||||||
UIBarButtonItem(customView: serversButton),
|
UIBarButtonItem(customView: serversButton)
|
||||||
], position: .right)
|
], position: .right)
|
||||||
|
|
||||||
self.view.addSubview(self.tableView)
|
self.view.addSubview(self.tableView)
|
||||||
@ -87,7 +87,7 @@ class HomeViewController: BaseViewController<HomeViewModel> {
|
|||||||
let startRequestAuthorization: () -> Observable<Bool> = {
|
let startRequestAuthorization: () -> Observable<Bool> = {
|
||||||
Single<Bool>.create { single -> Disposable in
|
Single<Bool>.create { single -> Disposable in
|
||||||
let center = UNUserNotificationCenter.current()
|
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))
|
single(.success(granted))
|
||||||
})
|
})
|
||||||
return Disposables.create()
|
return Disposables.create()
|
||||||
@ -166,6 +166,13 @@ class HomeViewController: BaseViewController<HomeViewModel> {
|
|||||||
})
|
})
|
||||||
.disposed(by: rx.disposeBag)
|
.disposed(by: rx.disposeBag)
|
||||||
|
|
||||||
|
// 弹出服务器错误提示,引导用户跳转FAQ
|
||||||
|
output.alertServerError
|
||||||
|
.drive(onNext: { [weak self] error in
|
||||||
|
self?.alertServerError(error: error)
|
||||||
|
})
|
||||||
|
.disposed(by: rx.disposeBag)
|
||||||
|
|
||||||
// startButton是否可点击
|
// startButton是否可点击
|
||||||
output.startButtonEnable
|
output.startButtonEnable
|
||||||
.drive(self.startButton.rx.isEnabled)
|
.drive(self.startButton.rx.isEnabled)
|
||||||
@ -198,11 +205,9 @@ class HomeViewController: BaseViewController<HomeViewModel> {
|
|||||||
var viewController: UIViewController?
|
var viewController: UIViewController?
|
||||||
if let viewModel = viewModel as? NewServerViewModel {
|
if let viewModel = viewModel as? NewServerViewModel {
|
||||||
viewController = NewServerViewController(viewModel: viewModel)
|
viewController = NewServerViewController(viewModel: viewModel)
|
||||||
}
|
} else if let viewModel = viewModel as? SoundsViewModel {
|
||||||
else if let viewModel = viewModel as? SoundsViewModel {
|
|
||||||
viewController = SoundsViewController(viewModel: viewModel)
|
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)
|
self.navigationController?.present(BarkNavigationController(rootViewController: CryptoSettingController(viewModel: viewModel)), animated: true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -219,4 +224,16 @@ class HomeViewController: BaseViewController<HomeViewModel> {
|
|||||||
self.navigationController?.present(controller, animated: true, completion: nil)
|
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 clienStateChanged: Driver<Client.ClienState>
|
||||||
let tableViewHidden: Driver<Bool>
|
let tableViewHidden: Driver<Bool>
|
||||||
let showSnackbar: Driver<String>
|
let showSnackbar: Driver<String>
|
||||||
|
let alertServerError: Driver<String>
|
||||||
let startButtonEnable: Driver<Bool>
|
let startButtonEnable: Driver<Bool>
|
||||||
let copy: Driver<String>
|
let copy: Driver<String>
|
||||||
let preview: Driver<URL>
|
let preview: Driver<URL>
|
||||||
@ -119,6 +120,9 @@ class HomeViewModel: ViewModel, ViewModelType {
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
/// 记录服务器错误的次数,如果错误次数大于2次,弹出提示引导用户查看FAQ。
|
||||||
|
private var serverErrorCount = 0
|
||||||
|
|
||||||
func transform(input: Input) -> Output {
|
func transform(input: Input) -> Output {
|
||||||
let title = BehaviorRelay(value: ServerManager.shared.currentServer.host)
|
let title = BehaviorRelay(value: ServerManager.shared.currentServer.host)
|
||||||
|
|
||||||
@ -166,6 +170,7 @@ class HomeViewModel: ViewModel, ViewModelType {
|
|||||||
.asDriver(onErrorJustReturn: false)
|
.asDriver(onErrorJustReturn: false)
|
||||||
|
|
||||||
let showSnackbar = PublishRelay<String>()
|
let showSnackbar = PublishRelay<String>()
|
||||||
|
let alertServerError = PublishRelay<String>()
|
||||||
|
|
||||||
// 点击注册按钮后,如果不允许推送,弹出提示
|
// 点击注册按钮后,如果不允许推送,弹出提示
|
||||||
tableViewHidden
|
tableViewHidden
|
||||||
@ -187,11 +192,18 @@ class HomeViewModel: ViewModel, ViewModelType {
|
|||||||
.map { _ in () }
|
.map { _ in () }
|
||||||
|
|
||||||
// client state 变化时,发出相应错误提醒
|
// client state 变化时,发出相应错误提醒
|
||||||
input.clientState.drive(onNext: { state in
|
input.clientState.drive(onNext: { [weak self] state in
|
||||||
|
guard let self else { return }
|
||||||
|
|
||||||
switch state {
|
switch state {
|
||||||
case .ok: break
|
case .ok: break
|
||||||
case .serverError(let error):
|
case .serverError(let error):
|
||||||
|
if serverErrorCount < 2 {
|
||||||
showSnackbar.accept("\(NSLocalizedString("ServerError")): \(error.rawString())")
|
showSnackbar.accept("\(NSLocalizedString("ServerError")): \(error.rawString())")
|
||||||
|
} else {
|
||||||
|
alertServerError.accept(error.rawString())
|
||||||
|
}
|
||||||
|
serverErrorCount += 1
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
// 主要用于 url scheme 添加服务器时会有state状态改变事件,顺便更新下标题
|
// 主要用于 url scheme 添加服务器时会有state状态改变事件,顺便更新下标题
|
||||||
@ -220,6 +232,7 @@ class HomeViewModel: ViewModel, ViewModelType {
|
|||||||
clienStateChanged: clienState.asDriver(onErrorDriveWith: .empty()),
|
clienStateChanged: clienState.asDriver(onErrorDriveWith: .empty()),
|
||||||
tableViewHidden: tableViewHidden,
|
tableViewHidden: tableViewHidden,
|
||||||
showSnackbar: showSnackbar.asDriver(onErrorDriveWith: .empty()),
|
showSnackbar: showSnackbar.asDriver(onErrorDriveWith: .empty()),
|
||||||
|
alertServerError: alertServerError.asDriver(onErrorDriveWith: .empty()),
|
||||||
startButtonEnable: Driver.just(true),
|
startButtonEnable: Driver.just(true),
|
||||||
copy: Driver.merge(sectionModel.items.map { $0.copy.asDriver(onErrorDriveWith: .empty()) }),
|
copy: Driver.merge(sectionModel.items.map { $0.copy.asDriver(onErrorDriveWith: .empty()) }),
|
||||||
preview: Driver.merge(sectionModel.items.map { $0.preview.asDriver(onErrorDriveWith: .empty()) }),
|
preview: Driver.merge(sectionModel.items.map { $0.preview.asDriver(onErrorDriveWith: .empty()) }),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user