Skip to content

Commit 48bc168

Browse files
Update NextcloudKit.swift
1 parent 4f4d8fd commit 48bc168

1 file changed

Lines changed: 15 additions & 43 deletions

File tree

Sources/NextcloudKit/NextcloudKit.swift

Lines changed: 15 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -178,63 +178,35 @@ open class NextcloudKit {
178178
}
179179
#endif
180180

181-
/*
182-
/// Evaluates an Alamofire response and returns the appropriate NKError.
181+
/// Evaluates a generic Alamofire response into NKError with simple HTTP-aware rules.
182+
/// - Note:
183+
/// - Explicit cancellations return `.cancelled`.
184+
/// - Any HTTP 2xx is considered success, regardless of body presence.
185+
/// - If no HTTP status is available, fall back to Alamofire's `Result`.
183186
func evaluateResponse<Data>(_ response: AFDataResponse<Data>) -> NKError {
184-
// Treat explicit cancellations as a first-class outcome
187+
// 1) Cancellations take precedence
185188
if let afError = response.error?.asAFError,
186-
afError.isExplicitlyCancelledError {
189+
afError.isExplicitlyCancelledError {
187190
return .cancelled
188191
}
189192

190-
switch response.result {
191-
case .failure(let error):
192-
if let afError = error.asAFError,
193-
case .responseSerializationFailed(let reason) = afError,
194-
case .inputDataNilOrZeroLength = reason {
195-
return .success
196-
} else {
197-
return NKError(error: error, afResponse: response, responseData: response.data)
198-
}
199-
case .success:
200-
return .success
201-
}
202-
}
203-
*/
204-
205-
/// Evaluates an Alamofire response and returns the appropriate NKError.
206-
func evaluateResponse<Data>(_ response: AFDataResponse<Data>) -> NKError {
207-
// Treat explicit cancellations as a first-class outcome
208-
if let afError = response.error?.asAFError,
209-
afError.isExplicitlyCancelledError {
210-
return .cancelled
211-
}
212-
213-
// Prefer HTTP status code over serializer outcome for uploads
214-
let statusCode = response.response?.statusCode
215-
if let code = statusCode {
216-
// Success on any 2xx; explicitly include 204/205 which carry no body by definition
217-
if (200...299).contains(code) || code == 204 || code == 205 {
193+
// 2) Prefer HTTP status code when available
194+
if let code = response.response?.statusCode {
195+
if (200...299).contains(code) {
218196
return .success
219197
}
198+
// Non-2xx: let the error flow below (even if serializer said "success")
220199
}
221200

222-
// Fall back to Alamofire's result only if HTTP status wasn't clearly successful
201+
// 3) Fall back to Alamofire's result (covers transport errors and missing status)
223202
switch response.result {
224203
case .success:
225204
return .success
226205

227206
case .failure(let error):
228-
// If the only failure reason is "no data" but status is actually OK, still succeed
229-
if let afError = error.asAFError,
230-
case .responseSerializationFailed(let reason) = afError,
231-
case .inputDataNilOrZeroLength = reason,
232-
let code = statusCode,
233-
(200...299).contains(code) || code == 204 || code == 205 {
234-
return .success
235-
}
236-
237-
// Everything else is a real error: keep the payload for diagnostics
207+
// No need to special-case inputDataNilOrZeroLength here:
208+
// - If it was a 2xx, we already returned above.
209+
// - If it's not 2xx or no status code, it's a real failure for our purposes.
238210
return NKError(error: error, afResponse: response, responseData: response.data)
239211
}
240212
}

0 commit comments

Comments
 (0)