设置服务器名称

This commit is contained in:
Fin 2025-02-24 15:42:34 +08:00
parent 2bc0eb33b8
commit 355e2e7cb0
6 changed files with 77 additions and 7 deletions

View File

@ -3594,6 +3594,35 @@
}
}
},
"setServerName" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Set Server Name"
}
},
"ja" : {
"stringUnit" : {
"state" : "translated",
"value" : "サーバー名を設定"
}
},
"tr" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sunucu Adını Ayarla"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "设置服务器名称"
}
}
}
},
"setSounds" : {
"extractionState" : "manual",
"localizations" : {

View File

@ -17,6 +17,7 @@ class Server: Codable {
let address: String
var key: String
var state: Client.ClienState
var name: String?
var host: String {
return URL(string: address)?.host ?? ""
@ -33,6 +34,7 @@ class Server: Codable {
case id
case address
case key
case name
}
//
@ -41,6 +43,7 @@ class Server: Codable {
id = try container.decode(String.self, forKey: .id)
address = try container.decode(String.self, forKey: .address)
key = try container.decode(String.self, forKey: .key)
name = try container.decode(String.self, forKey: .name)
state = .ok
}
}
@ -182,4 +185,9 @@ class ServerManager: NSObject {
self.saveServers()
}
}
func setServerName(server: Server, name: String?) {
server.name = name
saveServers()
}
}

View File

@ -17,6 +17,7 @@ enum ServerActionType {
case copy
case reset(key: String?)
case delete
case setName(name: String?)
}
func == (lhs: ServerActionType, rhs: ServerActionType) -> Bool {
@ -90,12 +91,21 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
}
return nil
}.asDriver(onErrorDriveWith: .empty())
//
let setServerName = action.compactMap { r -> (Server, String?)? in
if case ServerActionType.setName(let name) = r.1 {
return (r.0, name)
}
return nil
}.asDriver(onErrorDriveWith: .empty())
let output = viewModel.transform(input: ServerListViewModel.Input(
selectServer: selectServer,
copyServer: copyServer,
deleteServer: deleteServer,
resetServer: resetServer
resetServer: resetServer,
setServerName: setServerName
))
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, ServerListTableViewCellViewModel>> { _, tableView, _, item -> UITableViewCell in
@ -136,7 +146,7 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
return relay
}
let alertController = UIAlertController(title: nil, message: "\(viewModel.address.value)", preferredStyle: .actionSheet)
let alertController = UIAlertController(title: nil, message: "\(URL(string: viewModel.server.address)?.host ?? "")", preferredStyle: .actionSheet)
alertController.addAction(UIAlertAction(title: NSLocalizedString("copyAddressAndKey"), style: .default, handler: { _ in
relay.accept((viewModel.server, .copy))
}))
@ -157,6 +167,18 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
relay.accept((viewModel.server, .select))
}))
alertController.addAction(UIAlertAction(title: NSLocalizedString("setServerName"), style: .default, handler: { _ in
let alertController = UIAlertController(title: NSLocalizedString("setServerName"), message: nil, preferredStyle: .alert)
alertController.addTextField { textField in
textField.text = viewModel.server.name
}
alertController.addAction(UIAlertAction(title: NSLocalizedString("confirm"), style: .default, handler: { _ in
relay.accept((viewModel.server, .setName(name: alertController.textFields?.first?.text)))
}))
alertController.addAction(UIAlertAction(title: NSLocalizedString("Cancel"), style: .cancel, handler: nil))
self.navigationController?.present(alertController, animated: true, completion: nil)
}))
alertController.addAction(UIAlertAction(title: NSLocalizedString("deleteServer"), style: .destructive, handler: { _ in
let alertController = UIAlertController(title: nil, message: NSLocalizedString("confirmDeleteServer"), preferredStyle: .alert)

View File

@ -19,6 +19,7 @@ class ServerListViewModel: ViewModel, ViewModelType {
let copyServer: Driver<Server>
let deleteServer: Driver<Server>
let resetServer: Driver<(Server, String?)>
let setServerName: Driver<(Server, String?)>
}
struct Output {
@ -37,6 +38,11 @@ class ServerListViewModel: ViewModel, ViewModelType {
let copy = input.copyServer.map { server -> String in
"\(server.address)/\(server.key)/"
}
//
input.setServerName.drive(onNext: { server, name in
ServerManager.shared.setServerName(server: server, name: name)
}).disposed(by: rx.disposeBag)
//
let deleteCheck = input.deleteServer.map { server -> Server? in
@ -134,7 +140,8 @@ class ServerListViewModel: ViewModel, ViewModelType {
.merge(
Observable.just(()),
serverDeleted,
serverResetSuccess
serverResetSuccess,
input.setServerName.map { _ in () }.asObservable()
)
.map {
[SectionModel(

View File

@ -101,7 +101,7 @@ class ServerListTableViewCell: BaseTableViewCell<ServerListTableViewCellViewMode
override func bindViewModel(model: ServerListTableViewCellViewModel) {
super.bindViewModel(model: model)
model.address
model.name
.bind(to: addressLabel.rx.text)
.disposed(by: rx.reuseBag)

View File

@ -12,15 +12,19 @@ import UIKit
class ServerListTableViewCellViewModel: ViewModel {
let server: Server
let address: BehaviorRelay<String>
let name: BehaviorRelay<String>
let key: BehaviorRelay<String>
let state: BehaviorRelay<Bool>
init(server: Server) {
self.server = server
self.address = BehaviorRelay<String>(value: {
URL(string: server.address)?.host ?? "Invalid Server"
self.name = BehaviorRelay<String>(value: {
var serverName = URL(string: server.address)?.host ?? "Invalid Server"
if let name = server.name, !name.isEmpty {
serverName = name + "\n" + serverName
}
return serverName
}())
self.key = BehaviorRelay<String>(value: !server.key.isEmpty ? server.key : "none")
self.state = BehaviorRelay<Bool>(value: server.state == .ok)