@@ -30,6 +30,7 @@ class MultifileUpload: Uploader, DeferredAdd {
30
30
private let apiKey : String
31
31
private let options : UploadOptions
32
32
private let security : Security ?
33
+ private let uploadQueue : DispatchQueue = DispatchQueue ( label: " com.filestack.multi-upload-queue " )
33
34
34
35
// MARK: - Lifecycle Functions
35
36
@@ -44,7 +45,9 @@ class MultifileUpload: Uploader, DeferredAdd {
44
45
self . security = security
45
46
46
47
if let uploadables = uploadables {
47
- enqueueUploadables ( uploadables: uploadables)
48
+ uploadQueue. sync {
49
+ enqueueUploadables ( uploadables: uploadables)
50
+ }
48
51
}
49
52
}
50
53
@@ -70,9 +73,11 @@ class MultifileUpload: Uploader, DeferredAdd {
70
73
case . notStarted:
71
74
fallthrough
72
75
case . inProgress:
73
- shouldAbort = true
74
- currentOperation? . cancel ( )
75
- stopUpload ( )
76
+ uploadQueue. sync {
77
+ shouldAbort = true
78
+ currentOperation? . cancel ( )
79
+ stopUpload ( )
80
+ }
76
81
77
82
return true
78
83
default :
@@ -83,8 +88,10 @@ class MultifileUpload: Uploader, DeferredAdd {
83
88
@discardableResult func start( ) -> Bool {
84
89
switch currentStatus {
85
90
case . notStarted:
86
- uploadNextFile ( )
87
- updateProgress ( )
91
+ uploadQueue. sync {
92
+ uploadNextFile ( )
93
+ updateProgress ( )
94
+ }
88
95
89
96
return true
90
97
default :
@@ -101,7 +108,9 @@ class MultifileUpload: Uploader, DeferredAdd {
101
108
@discardableResult func add( uploadables: [ Uploadable ] ) -> Bool {
102
109
switch currentStatus {
103
110
case . notStarted:
104
- self . enqueueUploadables ( uploadables: uploadables)
111
+ uploadQueue. sync {
112
+ self . enqueueUploadables ( uploadables: uploadables)
113
+ }
105
114
106
115
return true
107
116
default :
0 commit comments