Skip to content

Commit 37ab633

Browse files
authored
fix: update session timed out error handling (#65)
* fix: update session timed out error to be non-blocking * chore: remove duplicate code * chore: fix failed timed out unit test
1 parent 1ea01cb commit 37ab633

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel+FaceDetectionResultHandler.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,7 @@ extension FaceLivenessDetectionViewModel: FaceDetectionResultHandler {
8989
noFitStartTime = Date()
9090
}
9191
if let elapsedTime = noFitStartTime?.timeIntervalSinceNow, abs(elapsedTime) >= noFitTimeoutInterval {
92-
self.livenessState
93-
.unrecoverableStateEncountered(.timedOut)
94-
self.captureSession.stopRunning()
92+
handleSessionTimedOut()
9593
}
9694
}
9795

@@ -100,9 +98,7 @@ extension FaceLivenessDetectionViewModel: FaceDetectionResultHandler {
10098
noFitStartTime = Date()
10199
}
102100
if let elapsedTime = noFitStartTime?.timeIntervalSinceNow, abs(elapsedTime) >= noFitTimeoutInterval {
103-
self.livenessState
104-
.unrecoverableStateEncountered(.timedOut)
105-
self.captureSession.stopRunning()
101+
handleSessionTimedOut()
106102
}
107103
}
108104

@@ -130,4 +126,12 @@ extension FaceLivenessDetectionViewModel: FaceDetectionResultHandler {
130126
}
131127
}
132128
}
129+
130+
private func handleSessionTimedOut() {
131+
DispatchQueue.main.async {
132+
self.livenessState
133+
.unrecoverableStateEncountered(.timedOut)
134+
self.captureSession.stopRunning()
135+
}
136+
}
133137
}

Tests/FaceLivenessTests/LivenessTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ final class FaceLivenessDetectionViewModelTestCase: XCTestCase {
152152
XCTAssertNotEqual(self.viewModel.livenessState.state, .encounteredUnrecoverableError(.timedOut))
153153
try await Task.sleep(seconds: 1)
154154
self.viewModel.handleNoFaceFit(instruction: .tooFar(nearnessPercentage: 0.2), percentage: 0.2)
155+
try await Task.sleep(seconds: 1)
155156
XCTAssertEqual(self.viewModel.livenessState.state, .encounteredUnrecoverableError(.timedOut))
156157
}
157158

@@ -168,6 +169,7 @@ final class FaceLivenessDetectionViewModelTestCase: XCTestCase {
168169
XCTAssertNotEqual(self.viewModel.livenessState.state, .encounteredUnrecoverableError(.timedOut))
169170
try await Task.sleep(seconds: 1)
170171
self.viewModel.handleNoFaceDetected()
172+
try await Task.sleep(seconds: 1)
171173
XCTAssertEqual(self.viewModel.livenessState.state, .encounteredUnrecoverableError(.timedOut))
172174
}
173175
}

0 commit comments

Comments
 (0)