@@ -30,6 +30,7 @@ class MultifileUpload: Uploader, DeferredAdd {
3030 private let apiKey : String
3131 private let options : UploadOptions
3232 private let security : Security ?
33+ private let uploadQueue : DispatchQueue = DispatchQueue ( label: " com.filestack.multi-upload-queue " )
3334
3435 // MARK: - Lifecycle Functions
3536
@@ -44,7 +45,9 @@ class MultifileUpload: Uploader, DeferredAdd {
4445 self . security = security
4546
4647 if let uploadables = uploadables {
47- enqueueUploadables ( uploadables: uploadables)
48+ uploadQueue. sync {
49+ enqueueUploadables ( uploadables: uploadables)
50+ }
4851 }
4952 }
5053
@@ -70,9 +73,11 @@ class MultifileUpload: Uploader, DeferredAdd {
7073 case . notStarted:
7174 fallthrough
7275 case . inProgress:
73- shouldAbort = true
74- currentOperation? . cancel ( )
75- stopUpload ( )
76+ uploadQueue. sync {
77+ shouldAbort = true
78+ currentOperation? . cancel ( )
79+ stopUpload ( )
80+ }
7681
7782 return true
7883 default :
@@ -83,8 +88,10 @@ class MultifileUpload: Uploader, DeferredAdd {
8388 @discardableResult func start( ) -> Bool {
8489 switch currentStatus {
8590 case . notStarted:
86- uploadNextFile ( )
87- updateProgress ( )
91+ uploadQueue. sync {
92+ uploadNextFile ( )
93+ updateProgress ( )
94+ }
8895
8996 return true
9097 default :
@@ -101,7 +108,9 @@ class MultifileUpload: Uploader, DeferredAdd {
101108 @discardableResult func add( uploadables: [ Uploadable ] ) -> Bool {
102109 switch currentStatus {
103110 case . notStarted:
104- self . enqueueUploadables ( uploadables: uploadables)
111+ uploadQueue. sync {
112+ self . enqueueUploadables ( uploadables: uploadables)
113+ }
105114
106115 return true
107116 default :
0 commit comments