Skip to content

Commit 64e9a5c

Browse files
committed
add ScanViewModel
1 parent 77cb706 commit 64e9a5c

6 files changed

Lines changed: 735 additions & 184 deletions

File tree

NativeAppTemplate.xcodeproj/project.pbxproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@
144144
01D85B462E07F15400A95798 /* PasswordEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85B452E07F15400A95798 /* PasswordEditViewModel.swift */; };
145145
01D85B482E07F16100A95798 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85B472E07F16100A95798 /* SettingsViewModel.swift */; };
146146
01D85B4A2E07F16900A95798 /* ShopkeeperEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85B492E07F16900A95798 /* ShopkeeperEditViewModel.swift */; };
147+
01D85BA72E081C6D00A95798 /* ScanViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D85BA62E081C6D00A95798 /* ScanViewModel.swift */; };
147148
01D8AE8B2AB453C1009AFFBA /* ShopBasicSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D8AE8A2AB453C1009AFFBA /* ShopBasicSettingsView.swift */; };
148149
01DCE23F298FA3B300BA311D /* ShopListCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01DCE23E298FA3B300BA311D /* ShopListCardView.swift */; };
149150
01E0A59C25BD088600298D35 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E0A59125BD087E00298D35 /* SettingsView.swift */; };
@@ -312,6 +313,7 @@
312313
01D85B452E07F15400A95798 /* PasswordEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordEditViewModel.swift; sourceTree = "<group>"; };
313314
01D85B472E07F16100A95798 /* SettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = "<group>"; };
314315
01D85B492E07F16900A95798 /* ShopkeeperEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopkeeperEditViewModel.swift; sourceTree = "<group>"; };
316+
01D85BA62E081C6D00A95798 /* ScanViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanViewModel.swift; sourceTree = "<group>"; };
315317
01D8AE8A2AB453C1009AFFBA /* ShopBasicSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopBasicSettingsView.swift; sourceTree = "<group>"; };
316318
01DCE23E298FA3B300BA311D /* ShopListCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopListCardView.swift; sourceTree = "<group>"; };
317319
01E0A59125BD087E00298D35 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
@@ -437,6 +439,7 @@
437439
children = (
438440
0135E7152D7E33F9004AD8FA /* CompleteScanResultView.swift */,
439441
0135E7162D7E33F9004AD8FA /* ScanView.swift */,
442+
01D85BA62E081C6D00A95798 /* ScanViewModel.swift */,
440443
0135E7172D7E33F9004AD8FA /* ShowTagInfoScanResultView.swift */,
441444
);
442445
path = Scan;
@@ -958,6 +961,7 @@
958961
"",
959962
"",
960963
"",
964+
"",
961965
);
962966
};
963967
/* End PBXShellScriptBuildPhase section */
@@ -1033,6 +1037,7 @@
10331037
0182D39A25B4424B001E881D /* LoggedInShopkeeperKeychainStore.swift in Sources */,
10341038
01ED197B2A037B9E00CD4735 /* AppTabView.swift in Sources */,
10351039
0110A1612AC81978003EDCBA /* ResendConfirmationInstructionsView.swift in Sources */,
1040+
01D85BA72E081C6D00A95798 /* ScanViewModel.swift in Sources */,
10361041
01E0A62225BD4A7800298D35 /* Shopkeeper+Backdoor.swift in Sources */,
10371042
0106413C29A9EDFF00B46FED /* AccountPasswordRequest.swift in Sources */,
10381043
0172035625A9642E008FD63B /* ShopAdapter.swift in Sources */,

NativeAppTemplate/NFCManager.swift

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
import Foundation
99
import CoreNFC
1010

11-
protocol NFCManagerProtocol {
11+
protocol NFCManagerProtocol: Sendable {
1212
@MainActor var scanResult: Result<ItemTagData, Error>? { get }
1313
@MainActor var isScanResultChanged: Bool { get }
1414
@MainActor var isScanResultChangedForTesting: Bool { get }
15-
15+
1616
func startReading() async
1717
func startReadingForTesting() async
1818

@@ -21,7 +21,7 @@ protocol NFCManagerProtocol {
2121

2222
final class NFCManager: NSObject, ObservableObject, @unchecked Sendable {
2323
@MainActor static let shared = NFCManager()
24-
24+
2525
@MainActor @Published var scanResult: Result<ItemTagData, Error>?
2626
@MainActor @Published var isScanResultChanged = false
2727
@MainActor @Published var isScanResultChangedForTesting = false
@@ -61,7 +61,7 @@ final class NFCManager: NSObject, ObservableObject, @unchecked Sendable {
6161
case readForTesting
6262
case write
6363
}
64-
64+
6565
var nfcSession: NFCNDEFReaderSession?
6666
var nfcOperation = NFCOperation.read
6767
private var userNdefMessage: NFCNDEFMessage?
@@ -85,7 +85,7 @@ extension NFCManager: NFCManagerProtocol {
8585
nfcOperation = .readForTesting
8686
startSesstion()
8787
}
88-
88+
8989
func startWriting(ndefMessage: NFCNDEFMessage, isLock: Bool) async {
9090
nfcOperation = .write
9191
userNdefMessage = ndefMessage
@@ -102,22 +102,22 @@ extension NFCManager: NFCManagerProtocol {
102102
extension NFCManager: NFCNDEFReaderSessionDelegate {
103103
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
104104
}
105-
105+
106106
func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
107107
guard let tag = tags.first else { return }
108-
108+
109109
session.connect(to: tag) { error in
110110
if let error = error {
111111
session.invalidate(errorMessage: "Connection error: \(error.localizedDescription)")
112112
return
113113
}
114-
114+
115115
tag.queryNDEFStatus { status, capacity, error in
116116
if let error = error {
117117
session.invalidate(errorMessage: "Checking NDEF status error: \(error.localizedDescription)")
118118
return
119119
}
120-
120+
121121
switch status {
122122
case .notSupported:
123123
session.invalidate(errorMessage: String.tagIsNotNdefFormatted)
@@ -145,14 +145,14 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
145145

146146
self.write(session: session, tag: tag)
147147
}
148-
148+
149149
@unknown default:
150150
session.invalidate(errorMessage: String.unknownNdefStatus)
151151
}
152152
}
153153
}
154154
}
155-
155+
156156
private func read(
157157
session: NFCNDEFReaderSession,
158158
tag: NFCNDEFTag,
@@ -169,7 +169,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
169169
}
170170
return
171171
}
172-
172+
173173
guard let message else {
174174
session.invalidate(errorMessage: String.noRecrodsFound)
175175
self?.internalScanResult = .failure(ScanResultError.failed(String.tagNotValid))
@@ -194,10 +194,10 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
194194
session.invalidate()
195195
}
196196
}
197-
197+
198198
private func write(session: NFCNDEFReaderSession, tag: NFCNDEFTag) {
199199
guard let userNdefMessage = self.userNdefMessage else { return }
200-
200+
201201
write(
202202
session: session,
203203
tag: tag,
@@ -208,7 +208,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
208208
print(">>> Write: \(userNdefMessage)")
209209
}
210210
}
211-
211+
212212
private func write(
213213
session: NFCNDEFReaderSession,
214214
tag: NFCNDEFTag,
@@ -243,7 +243,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
243243

244244
private func setResultExtractedFrom(message: NFCNDEFMessage, isReadOnly: Bool, test: Bool) {
245245
let itemTagInfo = Utility.extractItemTagInfoFrom(message: message, test: test)
246-
246+
247247
if itemTagInfo.success {
248248
let itemTagData = ItemTagData(
249249
itemTagId: itemTagInfo.id,
@@ -258,7 +258,7 @@ extension NFCManager: NFCNDEFReaderSessionDelegate {
258258
}
259259

260260
func readerSessionDidBecomeActive(_ session: NFCNDEFReaderSession) {}
261-
261+
262262
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
263263
print( "readerSession error: \(error.localizedDescription)")
264264
}

NativeAppTemplate/UI/App Root/MainView.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,12 @@ private extension MainView {
161161

162162
func scanView() -> ScanView {
163163
.init(
164-
itemTagRepository: dataManager.itemTagRepository
164+
viewModel: ScanViewModel(
165+
itemTagRepository: dataManager.itemTagRepository,
166+
sessionController: dataManager.sessionController,
167+
messageBus: messageBus,
168+
nfcManager: appSingletons.nfcManager
169+
)
165170
)
166171
}
167172

0 commit comments

Comments
 (0)