Support Forgejo servers
This commit is contained in:
@@ -21,7 +21,7 @@ final class ServersViewController: UITableViewController {
|
||||
servers = context.core.servers()
|
||||
tableView.reloadData()
|
||||
tableView.backgroundView = servers.isEmpty
|
||||
? EmptyBackgroundView(title: "No servers", detail: "Add a Gitea server to get started.")
|
||||
? EmptyBackgroundView(title: "No servers", detail: "Add a code hosting server to get started.")
|
||||
: nil
|
||||
navigationItem.rightBarButtonItem = UIBarButtonItem(
|
||||
systemItem: .add,
|
||||
@@ -70,6 +70,8 @@ final class AddServerViewController: UITableViewController, UITextFieldDelegate
|
||||
private let nameField = UITextField()
|
||||
private let urlField = UITextField()
|
||||
private let tokenField = UITextField()
|
||||
private let providerButton = UIButton(type: .system)
|
||||
private var provider = ServerProvider.gitea
|
||||
private var saveButton: UIBarButtonItem!
|
||||
|
||||
init(context: AppContext, completion: @escaping () -> Void) {
|
||||
@@ -103,13 +105,14 @@ final class AddServerViewController: UITableViewController, UITextFieldDelegate
|
||||
tokenField.isSecureTextEntry = true
|
||||
tokenField.autocapitalizationType = .none
|
||||
tokenField.returnKeyType = .done
|
||||
configureProviderButton()
|
||||
}
|
||||
|
||||
override func numberOfSections(in tableView: UITableView) -> Int { 3 }
|
||||
override func numberOfSections(in tableView: UITableView) -> Int { 4 }
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 1 }
|
||||
|
||||
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||
["Name", "Server URL", "Access token"][section]
|
||||
["API provider", "Name", "Server URL", "Access token"][section]
|
||||
}
|
||||
|
||||
override func tableView(
|
||||
@@ -117,14 +120,16 @@ final class AddServerViewController: UITableViewController, UITextFieldDelegate
|
||||
cellForRowAt indexPath: IndexPath
|
||||
) -> UITableViewCell {
|
||||
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
|
||||
let field = [nameField, urlField, tokenField][indexPath.section]
|
||||
field.translatesAutoresizingMaskIntoConstraints = false
|
||||
cell.contentView.addSubview(field)
|
||||
let control: UIView = indexPath.section == 0
|
||||
? providerButton
|
||||
: [nameField, urlField, tokenField][indexPath.section - 1]
|
||||
control.translatesAutoresizingMaskIntoConstraints = false
|
||||
cell.contentView.addSubview(control)
|
||||
NSLayoutConstraint.activate([
|
||||
field.leadingAnchor.constraint(equalTo: cell.contentView.leadingAnchor, constant: 16),
|
||||
field.trailingAnchor.constraint(equalTo: cell.contentView.trailingAnchor, constant: -16),
|
||||
field.topAnchor.constraint(equalTo: cell.contentView.topAnchor),
|
||||
field.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor),
|
||||
control.leadingAnchor.constraint(equalTo: cell.contentView.leadingAnchor, constant: 16),
|
||||
control.trailingAnchor.constraint(equalTo: cell.contentView.trailingAnchor, constant: -16),
|
||||
control.topAnchor.constraint(equalTo: cell.contentView.topAnchor),
|
||||
control.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor),
|
||||
cell.contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: 48),
|
||||
])
|
||||
return cell
|
||||
@@ -148,7 +153,8 @@ final class AddServerViewController: UITableViewController, UITextFieldDelegate
|
||||
let index = try await context.core.addServer(
|
||||
name: nameField.text ?? "",
|
||||
url: urlField.text ?? "",
|
||||
token: tokenField.text ?? ""
|
||||
token: tokenField.text ?? "",
|
||||
provider: provider
|
||||
)
|
||||
try context.didAddServer(index: index)
|
||||
completion()
|
||||
@@ -174,4 +180,24 @@ final class AddServerViewController: UITableViewController, UITextFieldDelegate
|
||||
field.adjustsFontForContentSizeCategory = true
|
||||
field.font = .preferredFont(forTextStyle: .body)
|
||||
}
|
||||
|
||||
private func configureProviderButton() {
|
||||
providerButton.contentHorizontalAlignment = .leading
|
||||
providerButton.showsMenuAsPrimaryAction = true
|
||||
providerButton.changesSelectionAsPrimaryAction = true
|
||||
providerButton.accessibilityLabel = "API provider"
|
||||
providerButton.accessibilityValue = "Gitea"
|
||||
providerButton.menu = UIMenu(options: .singleSelection, children: [
|
||||
UIAction(title: "Gitea", state: .on) { [weak self] _ in
|
||||
self?.provider = .gitea
|
||||
self?.urlField.placeholder = "https://gitea.example.com"
|
||||
self?.providerButton.accessibilityValue = "Gitea"
|
||||
},
|
||||
UIAction(title: "Forgejo") { [weak self] _ in
|
||||
self?.provider = .forgejo
|
||||
self?.urlField.placeholder = "https://forgejo.example.com"
|
||||
self?.providerButton.accessibilityValue = "Forgejo"
|
||||
},
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user