Skip to content

Commit 355e2e7

Browse files
committed
设置服务器名称
1 parent 2bc0eb3 commit 355e2e7

6 files changed

+77
-7
lines changed

Bark/Localizable.xcstrings

+29
Original file line numberDiff line numberDiff line change
@@ -3594,6 +3594,35 @@
35943594
}
35953595
}
35963596
},
3597+
"setServerName" : {
3598+
"extractionState" : "manual",
3599+
"localizations" : {
3600+
"en" : {
3601+
"stringUnit" : {
3602+
"state" : "translated",
3603+
"value" : "Set Server Name"
3604+
}
3605+
},
3606+
"ja" : {
3607+
"stringUnit" : {
3608+
"state" : "translated",
3609+
"value" : "サーバー名を設定"
3610+
}
3611+
},
3612+
"tr" : {
3613+
"stringUnit" : {
3614+
"state" : "translated",
3615+
"value" : "Sunucu Adını Ayarla"
3616+
}
3617+
},
3618+
"zh-Hans" : {
3619+
"stringUnit" : {
3620+
"state" : "translated",
3621+
"value" : "设置服务器名称"
3622+
}
3623+
}
3624+
}
3625+
},
35973626
"setSounds" : {
35983627
"extractionState" : "manual",
35993628
"localizations" : {

Common/ServerManager.swift

+8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Server: Codable {
1717
let address: String
1818
var key: String
1919
var state: Client.ClienState
20+
var name: String?
2021

2122
var host: String {
2223
return URL(string: address)?.host ?? ""
@@ -33,6 +34,7 @@ class Server: Codable {
3334
case id
3435
case address
3536
case key
37+
case name
3638
}
3739

3840
// 解码
@@ -41,6 +43,7 @@ class Server: Codable {
4143
id = try container.decode(String.self, forKey: .id)
4244
address = try container.decode(String.self, forKey: .address)
4345
key = try container.decode(String.self, forKey: .key)
46+
name = try container.decode(String.self, forKey: .name)
4447
state = .ok
4548
}
4649
}
@@ -182,4 +185,9 @@ class ServerManager: NSObject {
182185
self.saveServers()
183186
}
184187
}
188+
189+
func setServerName(server: Server, name: String?) {
190+
server.name = name
191+
saveServers()
192+
}
185193
}

Controller/ServerListViewController.swift

+24-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enum ServerActionType {
1717
case copy
1818
case reset(key: String?)
1919
case delete
20+
case setName(name: String?)
2021
}
2122

2223
func == (lhs: ServerActionType, rhs: ServerActionType) -> Bool {
@@ -90,12 +91,21 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
9091
}
9192
return nil
9293
}.asDriver(onErrorDriveWith: .empty())
94+
95+
// 设置服务器名称
96+
let setServerName = action.compactMap { r -> (Server, String?)? in
97+
if case ServerActionType.setName(let name) = r.1 {
98+
return (r.0, name)
99+
}
100+
return nil
101+
}.asDriver(onErrorDriveWith: .empty())
93102

94103
let output = viewModel.transform(input: ServerListViewModel.Input(
95104
selectServer: selectServer,
96105
copyServer: copyServer,
97106
deleteServer: deleteServer,
98-
resetServer: resetServer
107+
resetServer: resetServer,
108+
setServerName: setServerName
99109
))
100110

101111
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, ServerListTableViewCellViewModel>> { _, tableView, _, item -> UITableViewCell in
@@ -136,7 +146,7 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
136146
return relay
137147
}
138148

139-
let alertController = UIAlertController(title: nil, message: "\(viewModel.address.value)", preferredStyle: .actionSheet)
149+
let alertController = UIAlertController(title: nil, message: "\(URL(string: viewModel.server.address)?.host ?? "")", preferredStyle: .actionSheet)
140150
alertController.addAction(UIAlertAction(title: NSLocalizedString("copyAddressAndKey"), style: .default, handler: { _ in
141151
relay.accept((viewModel.server, .copy))
142152
}))
@@ -157,6 +167,18 @@ class ServerListViewController: BaseViewController<ServerListViewModel> {
157167
relay.accept((viewModel.server, .select))
158168
}))
159169

170+
alertController.addAction(UIAlertAction(title: NSLocalizedString("setServerName"), style: .default, handler: { _ in
171+
let alertController = UIAlertController(title: NSLocalizedString("setServerName"), message: nil, preferredStyle: .alert)
172+
alertController.addTextField { textField in
173+
textField.text = viewModel.server.name
174+
}
175+
alertController.addAction(UIAlertAction(title: NSLocalizedString("confirm"), style: .default, handler: { _ in
176+
relay.accept((viewModel.server, .setName(name: alertController.textFields?.first?.text)))
177+
}))
178+
alertController.addAction(UIAlertAction(title: NSLocalizedString("Cancel"), style: .cancel, handler: nil))
179+
self.navigationController?.present(alertController, animated: true, completion: nil)
180+
}))
181+
160182
alertController.addAction(UIAlertAction(title: NSLocalizedString("deleteServer"), style: .destructive, handler: { _ in
161183

162184
let alertController = UIAlertController(title: nil, message: NSLocalizedString("confirmDeleteServer"), preferredStyle: .alert)

Controller/ServerListViewModel.swift

+8-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class ServerListViewModel: ViewModel, ViewModelType {
1919
let copyServer: Driver<Server>
2020
let deleteServer: Driver<Server>
2121
let resetServer: Driver<(Server, String?)>
22+
let setServerName: Driver<(Server, String?)>
2223
}
2324

2425
struct Output {
@@ -37,6 +38,11 @@ class ServerListViewModel: ViewModel, ViewModelType {
3738
let copy = input.copyServer.map { server -> String in
3839
"\(server.address)/\(server.key)/"
3940
}
41+
42+
// 设置服务器名称
43+
input.setServerName.drive(onNext: { server, name in
44+
ServerManager.shared.setServerName(server: server, name: name)
45+
}).disposed(by: rx.disposeBag)
4046

4147
// 删除检查,需要至少保留一个服务器
4248
let deleteCheck = input.deleteServer.map { server -> Server? in
@@ -134,7 +140,8 @@ class ServerListViewModel: ViewModel, ViewModelType {
134140
.merge(
135141
Observable.just(()),
136142
serverDeleted,
137-
serverResetSuccess
143+
serverResetSuccess,
144+
input.setServerName.map { _ in () }.asObservable()
138145
)
139146
.map {
140147
[SectionModel(

View/ServerListTableViewCell.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class ServerListTableViewCell: BaseTableViewCell<ServerListTableViewCellViewMode
101101
override func bindViewModel(model: ServerListTableViewCellViewModel) {
102102
super.bindViewModel(model: model)
103103

104-
model.address
104+
model.name
105105
.bind(to: addressLabel.rx.text)
106106
.disposed(by: rx.reuseBag)
107107

View/ServerListTableViewCellViewModel.swift

+7-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,19 @@ import UIKit
1212
class ServerListTableViewCellViewModel: ViewModel {
1313
let server: Server
1414

15-
let address: BehaviorRelay<String>
15+
let name: BehaviorRelay<String>
1616
let key: BehaviorRelay<String>
1717
let state: BehaviorRelay<Bool>
1818

1919
init(server: Server) {
2020
self.server = server
2121

22-
self.address = BehaviorRelay<String>(value: {
23-
URL(string: server.address)?.host ?? "Invalid Server"
22+
self.name = BehaviorRelay<String>(value: {
23+
var serverName = URL(string: server.address)?.host ?? "Invalid Server"
24+
if let name = server.name, !name.isEmpty {
25+
serverName = name + "\n" + serverName
26+
}
27+
return serverName
2428
}())
2529
self.key = BehaviorRelay<String>(value: !server.key.isEmpty ? server.key : "none")
2630
self.state = BehaviorRelay<Bool>(value: server.state == .ok)

0 commit comments

Comments
 (0)