Rev 19 | Ir a la última revisión | 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
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 = AppData.sharedInstance
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() {
if imageCache!.cache.hasData(forKey: key) {
print("ImageLoader from cache key : \(key)")
self.image = imageCache!.cache.readImageForKey(key: key)
return
}
/*
if let image = cache?[key as NSString] {
print("ImageLoader from cache key: \(key)")
self.image = image
return
}*/
print("ImageLoader from url key: \(key)")
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
}
}
}