GiteaPR: native iOS app to manage Gitea pull requests
Build iOS App / Build .ipa and publish source (push) Failing after 35s
Build iOS App / Build .ipa and publish source (push) Failing after 35s
Multi-repo PR inbox, review (approve/request changes/comment), merge with gating toggle, read-only diff viewer, and Gitea Actions check status with one-tap re-run. Ships unsigned via the iMac runner to the SideStore source.
This commit is contained in:
commit
1025634978
27 files changed
+2322
No files matched your search
@@ -0,0 +1,54 @@
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
enum MergeGateMode: String, CaseIterable, Identifiable {
|
||||
case warn = "Warn on red (allow merge with confirm)"
|
||||
case block = "Block merge when CI is red"
|
||||
|
||||
var id: String { rawValue }
|
||||
}
|
||||
|
||||
/// Central settings: instance + token (Keychain) and app preferences.
|
||||
@MainActor
|
||||
final class SettingsStore: ObservableObject {
|
||||
static let shared = SettingsStore()
|
||||
|
||||
@Published var instanceURL: String {
|
||||
didSet { KeychainHelper.set(instanceURL, key: "instanceURL") }
|
||||
}
|
||||
@Published var token: String {
|
||||
didSet { KeychainHelper.set(token, key: "token") }
|
||||
}
|
||||
@Published var mergeGateMode: MergeGateMode {
|
||||
didSet { UserDefaults.standard.set(mergeGateMode.rawValue,
|
||||
forKey: "mergeGateMode") }
|
||||
}
|
||||
|
||||
private init() {
|
||||
instanceURL = KeychainHelper.get("instanceURL") ?? "https://gitea.bueso.eu"
|
||||
token = KeychainHelper.get("token") ?? ""
|
||||
let raw = UserDefaults.standard.string(forKey: "mergeGateMode")
|
||||
mergeGateMode = MergeGateMode(rawValue: raw ?? "") ?? .warn
|
||||
}
|
||||
|
||||
var isConfigured: Bool {
|
||||
!token.isEmpty && !instanceURL.isEmpty
|
||||
}
|
||||
|
||||
var baseURL: URL? {
|
||||
URL(string: instanceURL.hasSuffix("/") ?
|
||||
String(instanceURL.dropLast()) : instanceURL)
|
||||
}
|
||||
|
||||
func client() -> GiteaClient? {
|
||||
guard let base = baseURL else { return nil }
|
||||
return GiteaClient(instanceURL: base, token: token)
|
||||
}
|
||||
|
||||
func logout() {
|
||||
KeychainHelper.delete("instanceURL")
|
||||
KeychainHelper.delete("token")
|
||||
instanceURL = "https://gitea.bueso.eu"
|
||||
token = ""
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user