Skip to content

Commit 5c0f294

Browse files
committed
Refactor MediaAction.uploadMedia completion result to Result.
1 parent f322d9c commit 5c0f294

File tree

5 files changed

+24
-25
lines changed

5 files changed

+24
-25
lines changed

Networking/Networking/Remote/MediaRemote.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ public class MediaRemote: Remote {
4646
/// - mediaItems: An array of uploadable media items.
4747
/// - completion: Closure to be executed upon completion.
4848
///
49-
public func uploadMedia(for siteID: Int64,
49+
public func uploadMedia(siteID: Int64,
50+
isSiteJetpackCPConnected: Bool,
5051
productID: Int64,
5152
context: String? = Default.context,
5253
mediaItems: [UploadableMedia],
53-
completion: @escaping ([Media]?, Error?) -> Void) {
54+
completion: @escaping (Result<[Media], Error>) -> Void) {
5455
let parameters = [
5556
ParameterKey.contextKey: context ?? Default.context,
5657
]

Networking/Networking/Remote/Remote.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,30 +182,30 @@ public class Remote {
182182
func enqueueMultipartFormDataUpload<M: Mapper>(_ request: URLRequestConvertible,
183183
mapper: M,
184184
multipartFormData: @escaping (MultipartFormData) -> Void,
185-
completion: @escaping (M.Output?, Error?) -> Void) {
185+
completion: @escaping (Result<M.Output, Error>) -> Void) {
186186
network.uploadMultipartFormData(multipartFormData: multipartFormData,
187187
to: request) { [weak self] (data, networkError) in
188188
guard let self = self else {
189189
return
190190
}
191191

192192
guard let data = data else {
193-
completion(nil, networkError)
193+
completion(.failure(networkError ?? NetworkError.notFound))
194194
return
195195
}
196196

197197
if let dotcomError = DotcomValidator.error(from: data) {
198198
self.dotcomErrorWasReceived(error: dotcomError, for: request)
199-
completion(nil, dotcomError)
199+
completion(.failure(dotcomError))
200200
return
201201
}
202202

203203
do {
204204
let parsed = try mapper.map(response: data)
205-
completion(parsed, nil)
205+
completion(.success(parsed))
206206
} catch {
207207
DDLogError("<> Mapping Error: \(error)")
208-
completion(nil, error)
208+
completion(.failure(error))
209209
}
210210
}
211211
}

WooCommerce/Classes/ViewRelated/Products/Media/ProductImageActionHandler.swift

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -145,37 +145,35 @@ final class ProductImageActionHandler {
145145
let imageStatuses = [.uploading(asset: asset)] + self.allStatuses.productImageStatuses
146146
self.allStatuses = (productImageStatuses: imageStatuses, error: nil)
147147

148-
self.uploadMediaAssetToSiteMediaLibrary(asset: asset) { [weak self] (media, error) in
148+
self.uploadMediaAssetToSiteMediaLibrary(asset: asset) { [weak self] result in
149149
self?.queue.async { [weak self] in
150150
guard let self = self else {
151151
return
152152
}
153153

154-
if let error = error {
155-
ServiceLocator.analytics.track(.productImageUploadFailed, withError: error)
156-
}
157-
158154
guard let index = self.index(of: asset) else {
159155
return
160156
}
161157

162-
guard let media = media else {
158+
switch result {
159+
case .success(let media):
160+
let productImage = ProductImage(imageID: media.mediaID,
161+
dateCreated: media.date,
162+
dateModified: media.date,
163+
src: media.src,
164+
name: media.name,
165+
alt: media.alt)
166+
self.updateProductImageStatus(at: index, productImage: productImage)
167+
case .failure(let error):
168+
ServiceLocator.analytics.track(.productImageUploadFailed, withError: error)
163169
self.updateProductImageStatus(at: index, error: error)
164-
return
165170
}
166-
let productImage = ProductImage(imageID: media.mediaID,
167-
dateCreated: media.date,
168-
dateModified: media.date,
169-
src: media.src,
170-
name: media.name,
171-
alt: media.alt)
172-
self.updateProductImageStatus(at: index, productImage: productImage)
173171
}
174172
}
175173
}
176174
}
177175

178-
private func uploadMediaAssetToSiteMediaLibrary(asset: PHAsset, onCompletion: @escaping (_ uploadedMedia: Media?, _ error: Error?) -> Void) {
176+
private func uploadMediaAssetToSiteMediaLibrary(asset: PHAsset, onCompletion: @escaping (Result<Media, Error>) -> Void) {
179177
DispatchQueue.main.async { [weak self] in
180178
guard let siteID = self?.siteID, let productID = self?.productID else {
181179
return

Yosemite/Yosemite/Actions/MediaAction.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ public enum MediaAction: Action {
2121
case uploadMedia(siteID: Int64,
2222
productID: Int64,
2323
mediaAsset: ExportableAsset,
24-
onCompletion: (_ uploadedMedia: Media?, _ error: Error?) -> Void)
24+
onCompletion: (Result<Media, Error>) -> Void)
2525
}

Yosemite/Yosemite/Stores/MediaStore.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ private extension MediaStore {
6464
func uploadMedia(siteID: Int64,
6565
productID: Int64,
6666
mediaAsset: ExportableAsset,
67-
onCompletion: @escaping (_ uploadedMedia: Media?, _ error: Error?) -> Void) {
67+
onCompletion: @escaping (Result<Media, Error>) -> Void) {
6868
mediaExportService.export(mediaAsset,
6969
onCompletion: { [weak self] (uploadableMedia, error) in
7070
guard let uploadableMedia = uploadableMedia, error == nil else {
@@ -81,7 +81,6 @@ private extension MediaStore {
8181
func uploadMedia(siteID: Int64,
8282
productID: Int64,
8383
uploadableMedia media: UploadableMedia,
84-
onCompletion: @escaping (_ uploadedMedia: Media?, _ error: Error?) -> Void) {
8584
remote.uploadMedia(for: siteID,
8685
productID: productID,
8786
mediaItems: [media]) { (uploadedMediaItems, error) in
@@ -97,6 +96,7 @@ private extension MediaStore {
9796
return
9897
}
9998
onCompletion(uploadedMedia, nil)
99+
onCompletion: @escaping (Result<Media, Error>) -> Void) {
100100
}
101101
}
102102
}

0 commit comments

Comments
 (0)