Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion ZShare/View Controllers/ShareViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,7 @@ final class ShareViewController: UIViewController {
private func updateNavigationItems(for state: ExtensionViewModel.State.AttachmentState, isSubmitting: Bool) {
if let error = state.error {
switch error {
case .quotaLimit, .webDavFailure, .apiFailure, .forbidden:
case .quotaLimit, .webDavFailure, .webDavUnauthorized, .webDavForbidden, .apiFailure, .forbidden:
self.navigationItem.leftBarButtonItem = nil
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(ShareViewController.cancel))
return
Expand Down Expand Up @@ -475,6 +475,12 @@ final class ShareViewController: UIViewController {
case .webDavNotVerified:
return L10n.Errors.Shareext.webdavNotVerified

case .webDavUnauthorized:
return L10n.Errors.Settings.Webdav.unauthorized

case .webDavForbidden:
return L10n.Errors.Settings.Webdav.forbidden

case .cantLoadSchema:
return L10n.Errors.Shareext.cantLoadSchema

Expand Down
48 changes: 48 additions & 0 deletions ZShare/ViewModels/ExtensionViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ final class ExtensionViewModel {
case quotaLimit(LibraryIdentifier)
case forbidden(LibraryIdentifier)
case webDavNotVerified
case webDavUnauthorized
case webDavForbidden
case webDavFailure
case md5Missing
case mtimeMissing
Expand Down Expand Up @@ -106,6 +108,8 @@ final class ExtensionViewModel {
.webViewError,
.quotaLimit,
.webDavNotVerified,
.webDavUnauthorized,
.webDavForbidden,
.webDavFailure:
return false
}
Expand Down Expand Up @@ -1260,6 +1264,24 @@ final class ExtensionViewModel {
if let error = error as? State.AttachmentState.Error {
return error
}
if let error = error as? WebDavError.Verification {
DDLogError("ExtensionViewModel: webdav verification failed - \(error)")
return .webDavNotVerified
}
if let error = error as? WebDavError.Upload {
DDLogError("ExtensionViewModel: webdav upload failed - \(error)")
switch error {
case .cantCreatePropData:
return .webDavFailure

case .apiError(let alamoError, _):
return webDavError(from: alamoError)
}
}
if let error = error as? WebDavError.Download {
DDLogError("ExtensionViewModel: webdav download failed - \(error)")
return .webDavFailure
}
if let error = error as? Parsing.Error {
DDLogError("ExtensionViewModel: could not parse item - \(error)")
return .parseError(error)
Expand Down Expand Up @@ -1299,6 +1321,32 @@ final class ExtensionViewModel {
}
return .unknown

func webDavError(from error: AFError) -> State.AttachmentState.Error {
switch error {
case .responseValidationFailed(let reason):
switch reason {
case .unacceptableStatusCode(let code):
switch code {
case 401:
return .webDavUnauthorized

case 403:
return .webDavForbidden

default:
break
}

default:
break
}

default:
break
}
return .webDavFailure
}

func alamoErrorRequiresAbort(_ error: AFError, url: URL?, libraryId: LibraryIdentifier?) -> State.AttachmentState.Error {
let defaultError: State.AttachmentState.Error = (url?.absoluteString ?? ApiConstants.baseUrlString).contains(ApiConstants.baseUrlString) ? .apiFailure : .webDavFailure
switch error {
Expand Down