Rev 19 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
//
// ImageLoader.swift
// twogetskills
//
// Created by Efrain Yanez Recanatini on 3/9/22.
//
import Combine
import UIKit
import SwiftUI
class ImageLoader: ObservableObject {
@Published var image: UIImage?
private(set) var isLoading = false
private let url: URL
private var imageCache: ImageCache?
//private var imageCache: ImageCache
private var appData = Environment(\.appData).wrappedValue
private let key : String
/*
init(url: URL) {
self.url = url
self.imageCache = ImageCache.sharedInstance
let urlString : String = url.absoluteString
let arrayFullFilename = urlString.split(separator: "/")
self.key = String(arrayFullFilename[arrayFullFilename.count - 1])
}*/
init(url: URL, cache: ImageCache? = nil) {
self.url = url
self.imageCache = cache
let urlString : String = url.absoluteString
let arrayFullFilename = urlString.split(separator: "/")
self.key = String(arrayFullFilename[arrayFullFilename.count - 1])
}
func load() {
print("ImageLoaderkey: \(key)")
if imageCache!.cache.hasData(forKey: key) {
do {
self.image = try imageCache!.cache.readImageForKey(key: key)
return
} catch {
print("Error cargando la imagen desde el cache")
}
}
print("Cargando la imagen desde el URL")
/*
if let image = cache?[key as NSString] {
print("ImageLoader from cache key: \(key)")
self.image = image
return
}*/
var request = URLRequest(url: url)
let headerSecurity = HeaderSecurity()
request.httpMethod = "GET"
request.addValue(appData.deviceUuid, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_TOKEN)
request.addValue(headerSecurity.secret, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_SECRET)
request.addValue(String(headerSecurity.created), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_CREATED)
request.addValue(String(headerSecurity.rand), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_RAND)
let task = URLSession.shared.dataTask(with: request, completionHandler: setImageFromData)
task.resume()
}
private func setImageFromData(data: Data?, urlResponse: URLResponse?, error: Error?) {
guard error == nil else {
// print("\(error!)")
return
}
guard let content = data else {
// print("No data")
return
}
DispatchQueue.main.async {
self.image = UIImage(data: content)
// self.dataHasLoaded = true
print("ImageLoader save to cache key: \(self.key)")
self.imageCache!.cache.write(image: self.image!, forKey: self.key)
//self.cache?[self.key as NSString] = self.image
}
}
}