Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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
            }
        }
}