Adding backend selection in settings
This commit is contained in:
parent
2283ac8fe6
commit
c0473054cd
@ -1665,7 +1665,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 138;
|
CURRENT_PROJECT_VERSION = 139;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
||||||
@ -1692,7 +1692,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 138;
|
CURRENT_PROJECT_VERSION = 139;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
INFOPLIST_KEY_CFBundleDisplayName = AutoCat;
|
||||||
|
|||||||
@ -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") {
|
Section("Plate number recognition") {
|
||||||
ToggleRowView(title: "Alternative order",
|
ToggleRowView(title: "Alternative order",
|
||||||
description: "Recognize plate numbers in alternative form. For example 'ЕВА 123 777' instead of 'Е123ВА 777'",
|
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",
|
ToggleRowView(title: "Show debug info",
|
||||||
description: nil,
|
description: nil,
|
||||||
toggle: $viewModel.settingService.showDebugInfo)
|
toggle: $viewModel.settingService.showDebugInfo)
|
||||||
ToggleRowView(title: "Use test backend",
|
|
||||||
description: nil,
|
|
||||||
toggle: $viewModel.settingService.useTestBackend)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.navigationTitle("Settings")
|
.navigationTitle("Settings")
|
||||||
|
|||||||
@ -412,3 +412,4 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"ZIP (or OKTMO) code" = "Индекс (или ОКТМО)";
|
"ZIP (or OKTMO) code" = "Индекс (или ОКТМО)";
|
||||||
|
|
||||||
|
"Server" = "Сервер";
|
||||||
|
|||||||
@ -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 {
|
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 }
|
guard var urlComponents = URLComponents(string: baseUrl + api) else { return nil }
|
||||||
|
|
||||||
|
|||||||
@ -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 {
|
didSet {
|
||||||
defaults.useTestBackend = useTestBackend
|
defaults.backendString = backendString
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +89,7 @@ public final class SettingsService: SettingsServiceProtocol {
|
|||||||
observe(key: \.defaultRegion, for: \.defaultRegion)
|
observe(key: \.defaultRegion, for: \.defaultRegion)
|
||||||
observe(key: \.recordBeep, for: \.recordBeep)
|
observe(key: \.recordBeep, for: \.recordBeep)
|
||||||
observe(key: \.showDebugInfo, for: \.showDebugInfo)
|
observe(key: \.showDebugInfo, for: \.showDebugInfo)
|
||||||
observe(key: \.useTestBackend, for: \.useTestBackend)
|
observe(key: \.backendString, for: \.backendString)
|
||||||
observe(key: \.user, for: \.userData)
|
observe(key: \.user, for: \.userData)
|
||||||
|
|
||||||
register(defaultValues: [
|
register(defaultValues: [
|
||||||
@ -93,7 +98,7 @@ public final class SettingsService: SettingsServiceProtocol {
|
|||||||
.defaultRegion: "761",
|
.defaultRegion: "761",
|
||||||
.recordBeep: false,
|
.recordBeep: false,
|
||||||
.showDebugInfo: false,
|
.showDebugInfo: false,
|
||||||
.useTestBackend: false
|
.backendString: Constants.Backend.de.rawValue
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,5 +18,5 @@ public protocol SettingsServiceProtocol {
|
|||||||
var defaultRegion: String { get set }
|
var defaultRegion: String { get set }
|
||||||
var recordBeep: Bool { get set }
|
var recordBeep: Bool { get set }
|
||||||
var showDebugInfo: Bool { get set }
|
var showDebugInfo: Bool { get set }
|
||||||
var useTestBackend: Bool { get set }
|
var backend: Constants.Backend { get set }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ enum SettingsKey: String {
|
|||||||
case defaultRegion
|
case defaultRegion
|
||||||
case recordBeep
|
case recordBeep
|
||||||
case showDebugInfo
|
case showDebugInfo
|
||||||
case useTestBackend
|
case backendString
|
||||||
}
|
}
|
||||||
|
|
||||||
extension UserDefaults {
|
extension UserDefaults {
|
||||||
@ -62,9 +62,9 @@ extension UserDefaults {
|
|||||||
set { set(value: newValue, for: .showDebugInfo) }
|
set { set(value: newValue, for: .showDebugInfo) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc dynamic var useTestBackend: Bool {
|
@objc dynamic var backendString: String {
|
||||||
get { bool(for: .useTestBackend) }
|
get { string(for: .backendString, defaultValue: Constants.Backend.de.rawValue) }
|
||||||
set { set(value: newValue, for: .useTestBackend) }
|
set { set(value: newValue, for: .backendString) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc dynamic var user: Data? {
|
@objc dynamic var user: Data? {
|
||||||
|
|||||||
@ -1,17 +1,30 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public enum Constants {
|
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] = [
|
public static let pnLettersMap: [Character: Character] = [
|
||||||
"А": "A", "В": "B", "Е": "E", "К": "K", "М": "M", "Н": "H", "О": "O", "Р": "P", "С": "C", "Т": "T", "У": "Y", "Х": "X"
|
"А": "A", "В": "B", "Е": "E", "К": "K", "М": "M", "Н": "H", "О": "O", "Р": "P", "С": "C", "Т": "T", "У": "Y", "Х": "X"
|
||||||
|
|||||||
@ -68,6 +68,14 @@ struct SettingsServiceTests {
|
|||||||
#expect(user.token == testUser.token)
|
#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])
|
@Test("Save settings", .serialized, arguments: [true, false])
|
||||||
func saveSettings(value: Bool) {
|
func saveSettings(value: Bool) {
|
||||||
|
|
||||||
@ -76,13 +84,11 @@ struct SettingsServiceTests {
|
|||||||
settingsService.defaultRegion = testRegion
|
settingsService.defaultRegion = testRegion
|
||||||
settingsService.recordBeep = value
|
settingsService.recordBeep = value
|
||||||
settingsService.showDebugInfo = value
|
settingsService.showDebugInfo = value
|
||||||
settingsService.useTestBackend = value
|
|
||||||
|
|
||||||
#expect(defaults.bool(forKey: SettingsKey.recognizeAlternativeOrder.rawValue) == value)
|
#expect(defaults.bool(forKey: SettingsKey.recognizeAlternativeOrder.rawValue) == value)
|
||||||
#expect(defaults.bool(forKey: SettingsKey.recognizeShortenedNumbers.rawValue) == value)
|
#expect(defaults.bool(forKey: SettingsKey.recognizeShortenedNumbers.rawValue) == value)
|
||||||
#expect(defaults.string(forKey: SettingsKey.defaultRegion.rawValue) == testRegion)
|
#expect(defaults.string(forKey: SettingsKey.defaultRegion.rawValue) == testRegion)
|
||||||
#expect(defaults.bool(forKey: SettingsKey.recordBeep.rawValue) == value)
|
#expect(defaults.bool(forKey: SettingsKey.recordBeep.rawValue) == value)
|
||||||
#expect(defaults.bool(forKey: SettingsKey.showDebugInfo.rawValue) == value)
|
#expect(defaults.bool(forKey: SettingsKey.showDebugInfo.rawValue) == value)
|
||||||
#expect(defaults.bool(forKey: SettingsKey.useTestBackend.rawValue) == value)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user