Skip to content

Commit 8fc9bbb

Browse files
committed
Add TrackingUnit and separate elapsed time logic
1 parent 8100643 commit 8fc9bbb

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

WooCommerce/Classes/Analytics/WaitingTimeTracker.swift

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ class WaitingTimeTracker {
1111
private let analyticsService: Analytics
1212
private let waitingStartedTimestamp: TimeInterval
1313

14+
enum TrackingUnit {
15+
case seconds
16+
case milliseconds
17+
}
18+
1419
init(trackScenario: WooAnalyticsEvent.WaitingTime.Scenario,
1520
analyticsService: Analytics = ServiceLocator.analytics,
1621
currentTimestampSeconds: @escaping () -> TimeInterval = { Date().timeIntervalSince1970 }
@@ -21,21 +26,27 @@ class WaitingTimeTracker {
2126
waitingStartedTimestamp = currentTimestampSeconds()
2227
}
2328

24-
/// End the waiting time by evaluating the elapsed time from the init,
25-
/// and sending it as an analytics event, in seconds.
29+
/// Default `end()` method to preserve interface compatibility. By default, tracks in `.seconds`
2630
///
2731
func end() {
28-
let elapsedTime = currentTimestampSeconds() - waitingStartedTimestamp
29-
let analyticsEvent = WooAnalyticsEvent.WaitingTime.waitingFinished(scenario: trackScenario, elapsedTime: elapsedTime)
30-
analyticsService.track(event: analyticsEvent)
32+
end(using: .seconds)
3133
}
3234

3335
/// End the waiting time by evaluating the elapsed time from the init,
34-
/// and sending it as an analytics event, in milliseconds
36+
/// and sending it as an analytics event.
3537
///
36-
func endInMilliseconds() {
37-
let elapsedTimeMs = (currentTimestampSeconds() - waitingStartedTimestamp) * 1000
38-
let analyticsEvent = WooAnalyticsEvent.WaitingTime.waitingFinished(scenario: trackScenario, elapsedTime: elapsedTimeMs)
38+
/// - Parameter trackingUnit: Defines whether the elapsed time should be tracked in `.seconds` or `.milliseconds` (default is `.seconds`).
39+
///
40+
func end(using trackingUnit: TrackingUnit = .seconds) {
41+
let elapsedTime = calculateElapsedTime(in: trackingUnit)
42+
let analyticsEvent = WooAnalyticsEvent.WaitingTime.waitingFinished(scenario: trackScenario, elapsedTime: elapsedTime)
3943
analyticsService.track(event: analyticsEvent)
4044
}
45+
46+
/// Calculates elapsed time in the specified tracking unit.
47+
///
48+
private func calculateElapsedTime(in trackingUnit: TrackingUnit) -> TimeInterval {
49+
let elapsedTime = currentTimestampSeconds() - waitingStartedTimestamp
50+
return trackingUnit == .milliseconds ? elapsedTime * 1000 : elapsedTime
51+
}
4152
}

WooCommerce/Classes/POS/Presentation/CardReaderConnection/UI States/PointOfSaleLoadingView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ private extension PointOfSaleLoadingView {
3131

3232
func trackElapsedTimeOnDisappear() {
3333
if let waitingTimeTracker = waitingTimeTracker {
34-
waitingTimeTracker.endInMilliseconds()
34+
waitingTimeTracker.end(using: .milliseconds)
3535
}
3636
}
3737
}

0 commit comments

Comments
 (0)