7
7
8
8
import Foundation
9
9
10
- /// Uploads a single chunk. Starts an internal Task on creation, which you can get with ``getTask``
11
- /// This class takes care of retries and backoff on a per-chunk basis
12
- /// This class provides no thread safety to the outside world
10
+ /// Uploads a single chunk. Starts an internal Task on creation,
11
+ /// which can be accessed with ``makeUploadTaskIfNeeded``.
12
+ ///
13
+ /// This class takes care of retries and backoff on a per-chunk basis
14
+ /// This class provides no thread safety to the outside world
13
15
class ChunkWorker {
14
16
let uploadURL : URL
15
- let chunk : FileChunk
16
17
let maxRetries : Int
17
18
let chunkProgress : Progress
18
19
@@ -33,11 +34,12 @@ class ChunkWorker {
33
34
self . progressDelegate = delegatePair
34
35
}
35
36
36
- func getTask( ) -> Task < Success , Error > {
37
-
37
+ func makeUploadTaskIfNeeded(
38
+ chunk: FileChunk
39
+ ) -> Task < Success , Error > {
38
40
guard let uploadTask else {
39
41
chunkStartTime = Date ( ) . timeIntervalSince1970
40
- let uploadTask = makeUploadTask ( )
42
+ let uploadTask = makeUploadTask ( chunk : chunk )
41
43
self . uploadTask = uploadTask
42
44
return uploadTask
43
45
}
@@ -51,12 +53,14 @@ class ChunkWorker {
51
53
}
52
54
}
53
55
54
- private func makeUploadTask( ) -> Task < Success , Error > {
56
+ private func makeUploadTask(
57
+ chunk: FileChunk
58
+ ) -> Task < Success , Error > {
55
59
return Task { [ self ] in
56
60
var retries = 0
57
61
var requestError : Error ?
58
62
let repsonseValidator = ChunkResponseValidator ( )
59
-
63
+
60
64
repeat {
61
65
do {
62
66
let chunkActor = ChunkActor (
@@ -145,21 +149,25 @@ class ChunkWorker {
145
149
struct Success : Sendable {
146
150
let finalState : Update
147
151
let tries : Int
148
- // TODO: Also AF Response
149
152
}
150
153
151
- convenience init ( uploadInfo: UploadInfo , fileChunk: FileChunk , chunkProgress: Progress ) {
154
+ convenience init (
155
+ uploadInfo: UploadInfo ,
156
+ chunkProgress: Progress
157
+ ) {
152
158
self . init (
153
159
uploadURL: uploadInfo. uploadURL,
154
- fileChunk: fileChunk,
155
160
chunkProgress: chunkProgress,
156
161
maxRetries: uploadInfo. options. transport. retryLimitPerChunk
157
162
)
158
163
}
159
164
160
- init ( uploadURL: URL , fileChunk: FileChunk , chunkProgress: Progress , maxRetries: Int ) {
165
+ init (
166
+ uploadURL: URL ,
167
+ chunkProgress: Progress ,
168
+ maxRetries: Int
169
+ ) {
161
170
self . uploadURL = uploadURL
162
- self . chunk = fileChunk
163
171
self . maxRetries = maxRetries
164
172
self . chunkProgress = chunkProgress
165
173
}
0 commit comments