mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
设置服务器名称
This commit is contained in:
parent
2bc0eb33b8
commit
355e2e7cb0
@ -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" : {
|
"setSounds" : {
|
||||||
"extractionState" : "manual",
|
"extractionState" : "manual",
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ class Server: Codable {
|
|||||||
let address: String
|
let address: String
|
||||||
var key: String
|
var key: String
|
||||||
var state: Client.ClienState
|
var state: Client.ClienState
|
||||||
|
var name: String?
|
||||||
|
|
||||||
var host: String {
|
var host: String {
|
||||||
return URL(string: address)?.host ?? ""
|
return URL(string: address)?.host ?? ""
|
||||||
@ -33,6 +34,7 @@ class Server: Codable {
|
|||||||
case id
|
case id
|
||||||
case address
|
case address
|
||||||
case key
|
case key
|
||||||
|
case name
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解码
|
// 解码
|
||||||
@ -41,6 +43,7 @@ class Server: Codable {
|
|||||||
id = try container.decode(String.self, forKey: .id)
|
id = try container.decode(String.self, forKey: .id)
|
||||||
address = try container.decode(String.self, forKey: .address)
|
address = try container.decode(String.self, forKey: .address)
|
||||||
key = try container.decode(String.self, forKey: .key)
|
key = try container.decode(String.self, forKey: .key)
|
||||||
|
name = try container.decode(String.self, forKey: .name)
|
||||||
state = .ok
|
state = .ok
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -182,4 +185,9 @@ class ServerManager: NSObject {
|
|||||||
self.saveServers()
|
self.saveServers()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setServerName(server: Server, name: String?) {
|
||||||
|
server.name = name
|
||||||
|
saveServers()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@ enum ServerActionType {
|
|||||||
case copy
|
case copy
|
||||||
case reset(key: String?)
|
case reset(key: String?)
|
||||||
case delete
|
case delete
|
||||||
|
case setName(name: String?)
|
||||||
}
|
}
|
||||||
|
|
||||||
func == (lhs: ServerActionType, rhs: ServerActionType) -> Bool {
|
func == (lhs: ServerActionType, rhs: ServerActionType) -> Bool {
|
||||||
@ -90,12 +91,21 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}.asDriver(onErrorDriveWith: .empty())
|
}.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(
|
let output = viewModel.transform(input: ServerListViewModel.Input(
|
||||||
selectServer: selectServer,
|
selectServer: selectServer,
|
||||||
copyServer: copyServer,
|
copyServer: copyServer,
|
||||||
deleteServer: deleteServer,
|
deleteServer: deleteServer,
|
||||||
resetServer: resetServer
|
resetServer: resetServer,
|
||||||
|
setServerName: setServerName
|
||||||
))
|
))
|
||||||
|
|
||||||
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, ServerListTableViewCellViewModel>> { _, tableView, _, item -> UITableViewCell in
|
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, ServerListTableViewCellViewModel>> { _, tableView, _, item -> UITableViewCell in
|
||||||
@ -136,7 +146,7 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
|
|||||||
return relay
|
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
|
alertController.addAction(UIAlertAction(title: NSLocalizedString("copyAddressAndKey"), style: .default, handler: { _ in
|
||||||
relay.accept((viewModel.server, .copy))
|
relay.accept((viewModel.server, .copy))
|
||||||
}))
|
}))
|
||||||
@ -157,6 +167,18 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
|
|||||||
relay.accept((viewModel.server, .select))
|
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
|
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)
|
||||||
|
|||||||
@ -19,6 +19,7 @@ class ServerListViewModel: ViewModel, ViewModelType {
|
|||||||
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?)>
|
||||||
|
let setServerName: Driver<(Server, String?)>
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Output {
|
struct Output {
|
||||||
@ -37,6 +38,11 @@ class ServerListViewModel: ViewModel, ViewModelType {
|
|||||||
let copy = input.copyServer.map { server -> String in
|
let copy = input.copyServer.map { server -> String in
|
||||||
"\(server.address)/\(server.key)/"
|
"\(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
|
let deleteCheck = input.deleteServer.map { server -> Server? in
|
||||||
@ -134,7 +140,8 @@ class ServerListViewModel: ViewModel, ViewModelType {
|
|||||||
.merge(
|
.merge(
|
||||||
Observable.just(()),
|
Observable.just(()),
|
||||||
serverDeleted,
|
serverDeleted,
|
||||||
serverResetSuccess
|
serverResetSuccess,
|
||||||
|
input.setServerName.map { _ in () }.asObservable()
|
||||||
)
|
)
|
||||||
.map {
|
.map {
|
||||||
[SectionModel(
|
[SectionModel(
|
||||||
|
|||||||
@ -101,7 +101,7 @@ class ServerListTableViewCell: BaseTableViewCell<ServerListTableViewCellViewMode
|
|||||||
override func bindViewModel(model: ServerListTableViewCellViewModel) {
|
override func bindViewModel(model: ServerListTableViewCellViewModel) {
|
||||||
super.bindViewModel(model: model)
|
super.bindViewModel(model: model)
|
||||||
|
|
||||||
model.address
|
model.name
|
||||||
.bind(to: addressLabel.rx.text)
|
.bind(to: addressLabel.rx.text)
|
||||||
.disposed(by: rx.reuseBag)
|
.disposed(by: rx.reuseBag)
|
||||||
|
|
||||||
|
|||||||
@ -12,15 +12,19 @@ import UIKit
|
|||||||
class ServerListTableViewCellViewModel: ViewModel {
|
class ServerListTableViewCellViewModel: ViewModel {
|
||||||
let server: Server
|
let server: Server
|
||||||
|
|
||||||
let address: BehaviorRelay<String>
|
let name: BehaviorRelay<String>
|
||||||
let key: BehaviorRelay<String>
|
let key: BehaviorRelay<String>
|
||||||
let state: BehaviorRelay<Bool>
|
let state: BehaviorRelay<Bool>
|
||||||
|
|
||||||
init(server: Server) {
|
init(server: Server) {
|
||||||
self.server = server
|
self.server = server
|
||||||
|
|
||||||
self.address = BehaviorRelay<String>(value: {
|
self.name = BehaviorRelay<String>(value: {
|
||||||
URL(string: server.address)?.host ?? "Invalid Server"
|
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.key = BehaviorRelay<String>(value: !server.key.isEmpty ? server.key : "none")
|
||||||
self.state = BehaviorRelay<Bool>(value: server.state == .ok)
|
self.state = BehaviorRelay<Bool>(value: server.state == .ok)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user