添加多服务器后,可修改默认预览服务器。

fix #149
This commit is contained in:
Fin 2024-10-25 11:33:08 +08:00
parent 52539e3997
commit efae83804a
3 changed files with 62 additions and 11 deletions

View File

@ -19,7 +19,7 @@
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "修改成功!" "value" : "修改成功"
} }
} }
} }
@ -908,7 +908,7 @@
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "删除成功" "value" : "删除成功"
} }
} }
} }
@ -2350,6 +2350,23 @@
} }
} }
}, },
"setAsDefaultServer" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Set As Default Server"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "设为预览服务器"
}
}
}
},
"setSounds" : { "setSounds" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@ -2373,6 +2390,23 @@
} }
} }
}, },
"setSuccessfully" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Successfully set"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "设置成功!"
}
}
}
},
"settings" : { "settings" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {

View File

@ -13,6 +13,7 @@ import RxSwift
import UIKit import UIKit
enum ServerActionType { enum ServerActionType {
case select
case copy case copy
case reset(key: String?) case reset(key: String?)
case delete case delete
@ -21,9 +22,10 @@ enum ServerActionType {
func == (lhs: ServerActionType, rhs: ServerActionType) -> Bool { func == (lhs: ServerActionType, rhs: ServerActionType) -> Bool {
switch (lhs, rhs) { switch (lhs, rhs) {
case (.copy, .copy), case (.copy, .copy),
(.delete, .delete): (.delete, .delete),
(.select, .select):
return true return true
case let (.reset(a), .reset(b)): case (.reset(let a), .reset(let b)):
return a == b return a == b
default: default:
return false return false
@ -59,7 +61,7 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
make.edges.equalToSuperview() make.edges.equalToSuperview()
} }
closeButton.rx.tap.subscribe {[weak self] in closeButton.rx.tap.subscribe { [weak self] in
self?.dismiss(animated: true, completion: nil) self?.dismiss(animated: true, completion: nil)
} onError: { _ in } onError: { _ in
@ -67,9 +69,12 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
} }
override func bindViewModel() { override func bindViewModel() {
let action = getServerAction() let action = getServerAction()
// server
let selectServer = action.filter { $0.1 == ServerActionType.select }
.map { $0.0 }.asDriver(onErrorDriveWith: .empty())
// server // server
let copyServer = action.filter { $0.1 == ServerActionType.copy } let copyServer = action.filter { $0.1 == ServerActionType.copy }
.map { $0.0 }.asDriver(onErrorDriveWith: .empty()) .map { $0.0 }.asDriver(onErrorDriveWith: .empty())
@ -80,13 +85,14 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
// server key // server key
let resetServer = action.compactMap { r -> (Server, String?)? in let resetServer = action.compactMap { r -> (Server, String?)? in
if case let ServerActionType.reset(key) = r.1 { if case ServerActionType.reset(let key) = r.1 {
return (r.0, key) return (r.0, key)
} }
return nil return nil
}.asDriver(onErrorDriveWith: .empty()) }.asDriver(onErrorDriveWith: .empty())
let output = viewModel.transform(input: ServerListViewModel.Input( let output = viewModel.transform(input: ServerListViewModel.Input(
selectServer: selectServer,
copyServer: copyServer, copyServer: copyServer,
deleteServer: deleteServer, deleteServer: deleteServer,
resetServer: resetServer resetServer: resetServer
@ -122,13 +128,12 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
} }
func getServerAction() -> Driver<(Server, ServerActionType)> { func getServerAction() -> Driver<(Server, ServerActionType)> {
return tableView.rx return tableView.rx
.itemSelected .itemSelected
.flatMapLatest { indexPath in .flatMapLatest { indexPath in
let relay = PublishRelay<(Server, ServerActionType)>() let relay = PublishRelay<(Server, ServerActionType)>()
guard let viewModel: ServerListTableViewCellViewModel = try? self.tableView.rx.model(at: indexPath) else { guard let viewModel: ServerListTableViewCellViewModel = try? self.tableView.rx.model(at: indexPath) else {
return relay; return relay
} }
let alertController = UIAlertController(title: nil, message: "\(viewModel.address.value)", preferredStyle: .actionSheet) let alertController = UIAlertController(title: nil, message: "\(viewModel.address.value)", preferredStyle: .actionSheet)
@ -148,6 +153,10 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
self.navigationController?.present(alertController, animated: true, completion: nil) self.navigationController?.present(alertController, animated: true, completion: nil)
})) }))
alertController.addAction(UIAlertAction(title: NSLocalizedString("setAsDefaultServer"), style: .default, handler: { _ in
relay.accept((viewModel.server, .select))
}))
alertController.addAction(UIAlertAction(title: NSLocalizedString("deleteServer"), style: .destructive, handler: { _ in alertController.addAction(UIAlertAction(title: NSLocalizedString("deleteServer"), style: .destructive, handler: { _ in
let alertController = UIAlertController(title: nil, message: NSLocalizedString("confirmDeleteServer"), preferredStyle: .alert) let alertController = UIAlertController(title: nil, message: NSLocalizedString("confirmDeleteServer"), preferredStyle: .alert)

View File

@ -15,6 +15,7 @@ import SwiftyJSON
class ServerListViewModel: ViewModel, ViewModelType { class ServerListViewModel: ViewModel, ViewModelType {
struct Input { struct Input {
let selectServer: Driver<Server>
let copyServer: Driver<Server> let copyServer: Driver<Server>
let deleteServer: Driver<Server> let deleteServer: Driver<Server>
let resetServer: Driver<(Server, String?)> let resetServer: Driver<(Server, String?)>
@ -142,8 +143,15 @@ class ServerListViewModel: ViewModel, ViewModelType {
)] )]
}.asDriver(onErrorDriveWith: .empty()) }.asDriver(onErrorDriveWith: .empty())
//
let serverSelected = input.selectServer.asObservable().map { server in
ServerManager.shared.setCurrentServer(serverId: server.id)
showSnackbar.accept(NSLocalizedString("setSuccessfully"))
return ()
}
// //
let serverChanged = Observable.merge(serverDeleted, serverResetSuccess) let serverChanged = Observable.merge(serverSelected, serverDeleted, serverResetSuccess)
.share() .share()
serverChanged.map { serverChanged.map {