Skip to content

Commit 8a61a24

Browse files
authored
Improve share extension handling for web dav errors (#1236)
1 parent 2d297bb commit 8a61a24

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

ZShare/View Controllers/ShareViewController.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ final class ShareViewController: UIViewController {
373373
private func updateNavigationItems(for state: ExtensionViewModel.State.AttachmentState, isSubmitting: Bool) {
374374
if let error = state.error {
375375
switch error {
376-
case .quotaLimit, .webDavFailure, .apiFailure, .forbidden:
376+
case .quotaLimit, .webDavFailure, .webDavUnauthorized, .webDavForbidden, .apiFailure, .forbidden:
377377
self.navigationItem.leftBarButtonItem = nil
378378
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ShareViewController.cancel))
379379
return
@@ -475,6 +475,12 @@ final class ShareViewController: UIViewController {
475475
case .webDavNotVerified:
476476
return L10n.Errors.Shareext.webdavNotVerified
477477

478+
case .webDavUnauthorized:
479+
return L10n.Errors.Settings.Webdav.unauthorized
480+
481+
case .webDavForbidden:
482+
return L10n.Errors.Settings.Webdav.forbidden
483+
478484
case .cantLoadSchema:
479485
return L10n.Errors.Shareext.cantLoadSchema
480486

ZShare/ViewModels/ExtensionViewModel.swift

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ final class ExtensionViewModel {
7979
case quotaLimit(LibraryIdentifier)
8080
case forbidden(LibraryIdentifier)
8181
case webDavNotVerified
82+
case webDavUnauthorized
83+
case webDavForbidden
8284
case webDavFailure
8385
case md5Missing
8486
case mtimeMissing
@@ -106,6 +108,8 @@ final class ExtensionViewModel {
106108
.webViewError,
107109
.quotaLimit,
108110
.webDavNotVerified,
111+
.webDavUnauthorized,
112+
.webDavForbidden,
109113
.webDavFailure:
110114
return false
111115
}
@@ -1260,6 +1264,24 @@ final class ExtensionViewModel {
12601264
if let error = error as? State.AttachmentState.Error {
12611265
return error
12621266
}
1267+
if let error = error as? WebDavError.Verification {
1268+
DDLogError("ExtensionViewModel: webdav verification failed - \(error)")
1269+
return .webDavNotVerified
1270+
}
1271+
if let error = error as? WebDavError.Upload {
1272+
DDLogError("ExtensionViewModel: webdav upload failed - \(error)")
1273+
switch error {
1274+
case .cantCreatePropData:
1275+
return .webDavFailure
1276+
1277+
case .apiError(let alamoError, _):
1278+
return webDavError(from: alamoError)
1279+
}
1280+
}
1281+
if let error = error as? WebDavError.Download {
1282+
DDLogError("ExtensionViewModel: webdav download failed - \(error)")
1283+
return .webDavFailure
1284+
}
12631285
if let error = error as? Parsing.Error {
12641286
DDLogError("ExtensionViewModel: could not parse item - \(error)")
12651287
return .parseError(error)
@@ -1299,6 +1321,32 @@ final class ExtensionViewModel {
12991321
}
13001322
return .unknown
13011323

1324+
func webDavError(from error: AFError) -> State.AttachmentState.Error {
1325+
switch error {
1326+
case .responseValidationFailed(let reason):
1327+
switch reason {
1328+
case .unacceptableStatusCode(let code):
1329+
switch code {
1330+
case 401:
1331+
return .webDavUnauthorized
1332+
1333+
case 403:
1334+
return .webDavForbidden
1335+
1336+
default:
1337+
break
1338+
}
1339+
1340+
default:
1341+
break
1342+
}
1343+
1344+
default:
1345+
break
1346+
}
1347+
return .webDavFailure
1348+
}
1349+
13021350
func alamoErrorRequiresAbort(_ error: AFError, url: URL?, libraryId: LibraryIdentifier?) -> State.AttachmentState.Error {
13031351
let defaultError: State.AttachmentState.Error = (url?.absoluteString ?? ApiConstants.baseUrlString).contains(ApiConstants.baseUrlString) ? .apiFailure : .webDavFailure
13041352
switch error {

0 commit comments

Comments
 (0)