Release Candidate Version 1.6
This commit is contained in:
@@ -16,7 +16,7 @@ protocol CookbookApi {
|
||||
from serverAdress: String,
|
||||
auth: String,
|
||||
data: Data
|
||||
) async -> (NetworkError?)
|
||||
) async -> (RecipeDetail?, NetworkError?)
|
||||
|
||||
/// Get either the full image or a thumbnail sized version.
|
||||
/// - Parameters:
|
||||
|
||||
@@ -10,8 +10,18 @@ import UIKit
|
||||
|
||||
|
||||
class CookbookApiV1: CookbookApi {
|
||||
static func importRecipe(from serverAdress: String, auth: String, data: Data) async -> (NetworkError?) {
|
||||
return .unknownError
|
||||
static func importRecipe(from serverAdress: String, auth: String, data: Data) async -> (RecipeDetail?, NetworkError?) {
|
||||
let request = ApiRequest(
|
||||
serverAdress: serverAdress,
|
||||
path: "/api/v1/import",
|
||||
method: .POST,
|
||||
authString: auth,
|
||||
headerFields: [HeaderField.ocsRequest(value: true), HeaderField.accept(value: .JSON), HeaderField.contentType(value: .JSON)]
|
||||
)
|
||||
|
||||
let (data, error) = await request.send()
|
||||
guard let data = data else { return (nil, error) }
|
||||
return (JSONDecoder.safeDecode(data), nil)
|
||||
}
|
||||
|
||||
static func getImage(from serverAdress: String, auth: String, id: Int, size: RecipeImage.RecipeImageSize) async -> (UIImage?, NetworkError?) {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
public enum NotImplementedError: Error, CustomStringConvertible {
|
||||
case notImplemented
|
||||
@@ -27,3 +28,43 @@ public enum NetworkError: String, Error {
|
||||
case dataError = "Invalid data error."
|
||||
}
|
||||
|
||||
public enum ServerError: Error {
|
||||
case unknownError, missingRequestBody, duplicateRecipe, noImage, missingRecipeName, recipeNotFound, deleteFailed, requestUnsuccessful
|
||||
|
||||
|
||||
static func decodeFromURLResponse(response: HTTPURLResponse?) -> ServerError? {
|
||||
guard let response = response else {
|
||||
return ServerError.unknownError
|
||||
}
|
||||
print("Status code: ", response.statusCode)
|
||||
switch response.statusCode {
|
||||
case 200...299: return nil
|
||||
case 400: return .missingRequestBody
|
||||
case 404: return .recipeNotFound
|
||||
case 409: return .duplicateRecipe
|
||||
case 406: return .noImage
|
||||
case 422: return .missingRecipeName
|
||||
case 500: return .requestUnsuccessful
|
||||
case 502: return .deleteFailed
|
||||
default: return ServerError.unknownError
|
||||
}
|
||||
}
|
||||
|
||||
var localizedDescription: LocalizedStringKey {
|
||||
switch self {
|
||||
case .noImage: return "The recipe has no image whose MIME type matches the Accept header"
|
||||
case .missingRecipeName: return "There was no name in the request given for the recipe. Cannot save the recipe."
|
||||
default: return "An unknown server error occured."
|
||||
}
|
||||
}
|
||||
|
||||
var localizedTitle: LocalizedStringKey {
|
||||
switch self {
|
||||
case .missingRequestBody: return "Missing Request Body"
|
||||
case .duplicateRecipe: return "Duplicate Recipe"
|
||||
case .noImage: return "Image MIME Error"
|
||||
case .missingRecipeName: return "Missing Name"
|
||||
default: return "Error"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user