83 lines
2.4 KiB
Swift
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
|
|
}
|
|
}
|