Adding backend selection in settings

This commit is contained in:
Selim Mustafaev 2024-11-15 14:50:14 +03:00
parent 2283ac8fe6
commit c0473054cd
9 changed files with 57 additions and 27 deletions

View File

@ -1665,7 +1665,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 138;
CURRENT_PROJECT_VERSION = 139;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
@ -1692,7 +1692,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 138;
CURRENT_PROJECT_VERSION = 139;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;

View File

@ -38,6 +38,14 @@ struct SettingsScreen: View {
}
}
Section {
Picker("Server", selection: $viewModel.settingService.backend) {
ForEach(Constants.Backend.allCases, id: \.self) { backend in
Text(backend.name)
}
}
}
Section("Plate number recognition") {
ToggleRowView(title: "Alternative order",
description: "Recognize plate numbers in alternative form. For example 'ЕВА 123 777' instead of 'Е123ВА 777'",
@ -61,9 +69,6 @@ struct SettingsScreen: View {
ToggleRowView(title: "Show debug info",
description: nil,
toggle: $viewModel.settingService.showDebugInfo)
ToggleRowView(title: "Use test backend",
description: nil,
toggle: $viewModel.settingService.useTestBackend)
}
}
.navigationTitle("Settings")

View File

@ -412,3 +412,4 @@
/* No comment provided by engineer. */
"ZIP (or OKTMO) code" = "Индекс (или ОКТМО)";
"Server" = "Сервер";

View File

@ -20,7 +20,7 @@ public actor ApiService: ApiServiceProtocol {
private func createRequest<B,P>(api: String, method: String, body: B? = nil, params: [String:P]? = nil) async -> URLRequest? where B: Encodable, P: LosslessStringConvertible {
let baseUrl = await settingsService.useTestBackend ? Constants.baseUrlDebug : Constants.baseUrl
let baseUrl = await settingsService.backend.baseUrl
guard var urlComponents = URLComponents(string: baseUrl + api) else { return nil }

View File

@ -70,9 +70,14 @@ public final class SettingsService: SettingsServiceProtocol {
}
}
public var useTestBackend: Bool = false {
public var backend: Constants.Backend {
get { Constants.Backend(rawValue: backendString) ?? .de }
set { backendString = newValue.rawValue }
}
public var backendString: String = Constants.Backend.de.rawValue {
didSet {
defaults.useTestBackend = useTestBackend
defaults.backendString = backendString
}
}
@ -84,7 +89,7 @@ public final class SettingsService: SettingsServiceProtocol {
observe(key: \.defaultRegion, for: \.defaultRegion)
observe(key: \.recordBeep, for: \.recordBeep)
observe(key: \.showDebugInfo, for: \.showDebugInfo)
observe(key: \.useTestBackend, for: \.useTestBackend)
observe(key: \.backendString, for: \.backendString)
observe(key: \.user, for: \.userData)
register(defaultValues: [
@ -93,7 +98,7 @@ public final class SettingsService: SettingsServiceProtocol {
.defaultRegion: "761",
.recordBeep: false,
.showDebugInfo: false,
.useTestBackend: false
.backendString: Constants.Backend.de.rawValue
])
}

View File

@ -18,5 +18,5 @@ public protocol SettingsServiceProtocol {
var defaultRegion: String { get set }
var recordBeep: Bool { get set }
var showDebugInfo: Bool { get set }
var useTestBackend: Bool { get set }
var backend: Constants.Backend { get set }
}

View File

@ -16,7 +16,7 @@ enum SettingsKey: String {
case defaultRegion
case recordBeep
case showDebugInfo
case useTestBackend
case backendString
}
extension UserDefaults {
@ -62,9 +62,9 @@ extension UserDefaults {
set { set(value: newValue, for: .showDebugInfo) }
}
@objc dynamic var useTestBackend: Bool {
get { bool(for: .useTestBackend) }
set { set(value: newValue, for: .useTestBackend) }
@objc dynamic var backendString: String {
get { string(for: .backendString, defaultValue: Constants.Backend.de.rawValue) }
set { set(value: newValue, for: .backendString) }
}
@objc dynamic var user: Data? {

View File

@ -1,17 +1,30 @@
import Foundation
public enum Constants {
public static var baseUrl: String {
#if DEBUG
return "http://127.0.0.1:3000/"
//return "http://192.168.1.67:3000/"
//return "https://vps.aliencat.pro:8443/"
#else
return "https://vps.aliencat.pro:8443/"
#endif
}
public static var baseUrlDebug = "http://192.168.1.2:3000/"
public enum Backend: String, CaseIterable {
case de = "https://vps.aliencat.pro/"
case ru = "https://vps2.aliencat.pro/"
case debug = "http://192.168.1.2:3000/"
public var name: String {
switch self {
case .de: "DE"
case .ru: "RU"
case .debug: "Debug"
}
}
public var baseUrl: String {
#if DEBUG
"http://127.0.0.1:3000/"
#else
rawValue
#endif
}
}
public static let pnLettersMap: [Character: Character] = [
"А": "A", "В": "B", "Е": "E", "К": "K", "М": "M", "Н": "H", "О": "O", "Р": "P", "С": "C", "Т": "T", "У": "Y", "Х": "X"

View File

@ -68,6 +68,14 @@ struct SettingsServiceTests {
#expect(user.token == testUser.token)
}
@Test("Save base url", .serialized, arguments: Constants.Backend.allCases)
func saveBaseUrl(value: Constants.Backend) {
settingsService.backend = value
#expect(defaults.string(forKey: SettingsKey.backendString.rawValue) == value.rawValue)
}
@Test("Save settings", .serialized, arguments: [true, false])
func saveSettings(value: Bool) {
@ -76,13 +84,11 @@ struct SettingsServiceTests {
settingsService.defaultRegion = testRegion
settingsService.recordBeep = value
settingsService.showDebugInfo = value
settingsService.useTestBackend = value
#expect(defaults.bool(forKey: SettingsKey.recognizeAlternativeOrder.rawValue) == value)
#expect(defaults.bool(forKey: SettingsKey.recognizeShortenedNumbers.rawValue) == value)
#expect(defaults.string(forKey: SettingsKey.defaultRegion.rawValue) == testRegion)
#expect(defaults.bool(forKey: SettingsKey.recordBeep.rawValue) == value)
#expect(defaults.bool(forKey: SettingsKey.showDebugInfo.rawValue) == value)
#expect(defaults.bool(forKey: SettingsKey.useTestBackend.rawValue) == value)
}
}