@@ -11,14 +11,16 @@ import Shared
11
11
@available ( iOS 16 . 2 , * )
12
12
class DownloadLiveActivityWrapper : DownloadProgressDelegate {
13
13
private struct UX {
14
- static let updateCooldown : TimeInterval = 0.75
14
+ static let updateCooldown : Double = 0.75 // Update Cooldown in Seconds
15
15
}
16
16
17
17
enum DurationToDismissal : UInt64 {
18
18
case none = 0
19
19
case delayed = 3_000_000_000 // Milliseconds to dismissal
20
20
}
21
21
22
+ let throttler = Throttler ( seconds: UX . updateCooldown)
23
+
22
24
private var lastUpdateTime = Date . distantPast
23
25
24
26
var downloadLiveActivity : Activity < DownloadLiveActivityAttributes > ?
@@ -50,36 +52,32 @@ class DownloadLiveActivityWrapper: DownloadProgressDelegate {
50
52
func end( durationToDismissal: DurationToDismissal ) {
51
53
let downloadsStates = DownloadLiveActivityUtil . buildContentState ( downloads: downloadProgressManager. downloads)
52
54
let contentState = DownloadLiveActivityAttributes . ContentState ( downloads: downloadsStates)
53
- update ( throttle: false )
54
55
Task {
56
+ await update ( )
55
57
try await Task . sleep ( nanoseconds: durationToDismissal. rawValue)
56
58
await downloadLiveActivity? . end ( using: contentState, dismissalPolicy: . immediate)
57
59
}
58
60
}
59
61
60
- private func shouldUpdateLiveActivity( ) -> Bool {
61
- let currentTime = Date ( )
62
-
63
- guard currentTime. timeIntervalSince ( lastUpdateTime) >= UX . updateCooldown else { return false }
64
- lastUpdateTime = currentTime
65
- return true
66
- }
67
-
68
- private func update( throttle: Bool = true ) {
62
+ private func update( ) async {
69
63
let downloadsStates = DownloadLiveActivityUtil . buildContentState ( downloads: downloadProgressManager. downloads)
70
64
let contentState = DownloadLiveActivityAttributes . ContentState ( downloads: downloadsStates)
71
- if !throttle || shouldUpdateLiveActivity ( ) {
72
- Task {
73
- await self . downloadLiveActivity? . update ( using: contentState)
74
- }
75
- }
65
+ await self . downloadLiveActivity? . update ( using: contentState)
76
66
}
77
67
78
68
func updateCombinedBytesDownloaded( value: Int64 ) {
79
- update ( )
69
+ throttler. throttle {
70
+ Task {
71
+ await self . update ( )
72
+ }
73
+ }
80
74
}
81
75
82
76
func updateCombinedTotalBytesExpected( value: Int64 ? ) {
83
- update ( )
77
+ throttler. throttle {
78
+ Task {
79
+ await self . update ( )
80
+ }
81
+ }
84
82
}
85
83
}
0 commit comments