Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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