Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 1 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  ImageLoader.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 3/9/22.
6
//
7
 
8
import Combine
9
import UIKit
10
 
11
class ImageLoader: ObservableObject {
12
    @Published var image: UIImage?
13
 
14
    private(set) var isLoading = false
15
 
16
    private let url: URL
17
    private var imageCache: ImageCache?
18
    //private var imageCache: ImageCache
19
    private var appData = AppData.sharedInstance
20
    private let key : String
21
 
22
    /*
23
    init(url: URL) {
24
        self.url = url
25
        self.imageCache = ImageCache.sharedInstance
26
 
27
        let urlString : String = url.absoluteString
28
        let arrayFullFilename = urlString.split(separator: "/")
29
        self.key  = String(arrayFullFilename[arrayFullFilename.count - 1])
30
 
31
    }*/
32
 
33
 
34
    init(url: URL, cache: ImageCache? = nil) {
35
        self.url = url
36
        self.imageCache = cache
37
 
38
        let urlString : String = url.absoluteString
39
        let arrayFullFilename = urlString.split(separator: "/")
40
        self.key  = String(arrayFullFilename[arrayFullFilename.count - 1])
41
 
42
    }
43
 
44
 
45
    func load() {
19 efrain 46
        print("ImageLoaderkey: \(key)")
1 efrain 47
 
48
        if imageCache!.cache.hasData(forKey: key) {
19 efrain 49
 
50
            do {
51
                self.image = try imageCache!.cache.readImageForKey(key: key)
52
                return
53
            } catch  {
54
                print("Error cargando la imagen  desde el cache")
55
            }
56
 
1 efrain 57
        }
58
 
19 efrain 59
        print("Cargando la imagen desde el URL")
60
 
1 efrain 61
        /*
62
        if let image = cache?[key as NSString] {
63
            print("ImageLoader from cache key: \(key)")
64
            self.image = image
65
            return
66
        }*/
67
 
19 efrain 68
 
1 efrain 69
 
70
        var request = URLRequest(url: url)
71
 
72
        let headerSecurity = HeaderSecurity()
73
 
74
        request.httpMethod = "GET"
75
        request.addValue(appData.deviceUuid, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_TOKEN)
76
        request.addValue(headerSecurity.secret, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_SECRET)
77
        request.addValue(String(headerSecurity.created), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_CREATED)
78
        request.addValue(String(headerSecurity.rand), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_RAND)
79
 
80
 
81
 
82
        let task = URLSession.shared.dataTask(with: request, completionHandler: setImageFromData)
83
        task.resume()
84
    }
85
 
86
    private func setImageFromData(data: Data?, urlResponse: URLResponse?, error: Error?) {
87
            guard error == nil else {
88
               // print("\(error!)")
89
                return
90
            }
91
 
92
            guard let content = data else {
93
               // print("No data")
94
                return
95
            }
96
 
97
            DispatchQueue.main.async {
98
                self.image = UIImage(data: content)
99
               // self.dataHasLoaded = true
100
 
101
                print("ImageLoader save to cache key: \(self.key)")
102
                self.imageCache!.cache.write(image: self.image!, forKey: self.key)
103
 
104
                //self.cache?[self.key as NSString] = self.image
105
            }
106
        }
107
}
108