Files
Nextcloud-Cookbook-iOS/Nextcloud Cookbook iOS Client/Network/APIController.swift
2023-11-29 17:44:10 +01:00

83 lines
2.4 KiB
Swift

//
// APIController.swift
// Nextcloud Cookbook iOS Client
//
// Created by Vincent Meilinger on 20.09.23.
//
import Foundation
import SwiftUI
class APIController {
@AppStorage("serverAddress") var serverAddress = ""
@AppStorage("username") var username = ""
@AppStorage("token") var token = ""
var apiPath: String = ""
var authString: String = ""
let apiVersion = "1"
init() {
print("Initializing APIController.")
self.apiPath = "https://\(serverAddress)/index.php/apps/cookbook/api/v\(apiVersion)/"
let loginString = "\(username):\(token)"
let loginData = loginString.data(using: String.Encoding.utf8)!
self.authString = loginData.base64EncodedString()
}
}
extension APIController {
func imageDataFromServer(recipeId: Int, thumb: Bool) async -> Data? {
do {
let request = RequestWrapper.imageRequest(path: .IMAGE(recipeId: recipeId, thumb: thumb))
let (data, _): (Data?, Error?) = try await NetworkHandler.sendHTTPRequest(
request,
hostPath: apiPath,
authString: authString
)
guard let data = data else {
print("Error receiving or decoding data.")
return nil
}
return data
} catch {
print("Could not load image from server.")
}
return nil
}
func sendDataRequest<D: Decodable>(_ request: RequestWrapper) async -> (D?, Error?) {
do {
let (data, error) = try await NetworkHandler.sendHTTPRequest(
request,
hostPath: apiPath,
authString: authString
)
if let data = data {
return (JSONDecoder.safeDecode(data), error)
}
return (nil, error)
} catch {
print("An unknown network error occured.")
}
return (nil, NetworkError.unknownError)
}
func sendRequest(_ request: RequestWrapper) async -> Error? {
do {
return try await NetworkHandler.sendHTTPRequest(
request,
hostPath: apiPath,
authString: authString
).1
} catch {
print("An unknown network error occured.")
}
return NetworkError.unknownError
}
}