Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 17 | Rev 22 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 17 Rev 21
Línea 5... Línea 5...
5
//  Created by Efrain Yanez Recanatini on 3/9/22.
5
//  Created by Efrain Yanez Recanatini on 3/9/22.
6
//
6
//
Línea 7... Línea 7...
7
 
7
 
8
import Combine
8
import Combine
9
import UIKit
-
 
10
import var CommonCrypto.CC_MD5_DIGEST_LENGTH
-
 
11
import func CommonCrypto.CC_MD5
-
 
12
import typealias CommonCrypto.CC_LONG
-
 
Línea 13... Línea 9...
13
 
9
import UIKit
14
 
10
 
Línea 15... Línea 11...
15
class ImageLoader: ObservableObject {
11
class ImageLoader: ObservableObject {
Línea 16... Línea 12...
16
    @Published var image: UIImage?
12
    @Published var image: UIImage?
17
 
13
 
-
 
14
    private(set) var isLoading = false
18
    private(set) var isLoading = false
15
    
-
 
16
    private let url: URL
Línea -... Línea 17...
-
 
17
    //private var cache: ImageCache?
19
    
18
    private var imageCache: ImageCache
20
    private let url: URL
19
    private var appData = AppData.sharedInstance
21
    private var cache: ImageCache?
20
    private let key : String
-
 
21
    
-
 
22
    
-
 
23
    init(url: URL) {
-
 
24
        self.url = url
-
 
25
        self.imageCache = ImageCache.sharedInstance
22
    private var appData = AppData.sharedInstance
26
    
Línea 23... Línea 27...
23
    
27
        let urlString : String = url.absoluteString
24
    init(url: URL, cache: ImageCache? = nil) {
28
        let arrayFullFilename = urlString.split(separator: "/")
25
        self.url = url
29
        self.key  = String(arrayFullFilename[arrayFullFilename.count - 1])
26
        self.cache = cache
30
    
27
    }
-
 
Línea 28... Línea -...
28
    
-
 
29
    /*
-
 
30
    deinit {
-
 
31
        cancel()
31
    }
32
    }
-
 
33
 */
32
    
-
 
33
    /*
34
    
34
    init(url: URL, cache: ImageCache? = nil) {
35
    func load() {
35
        self.url = url
Línea -... Línea 36...
-
 
36
        self.cache = cache
-
 
37
    
Línea 36... Línea 38...
36
 
38
        let urlString : String = url.absoluteString
37
        
-
 
38
        let urlString : String = url.absoluteString
39
        let arrayFullFilename = urlString.split(separator: "/")
39
        
-
 
40
        //print("ImageLoader URL : \(urlString) ")
40
        self.key  = String(arrayFullFilename[arrayFullFilename.count - 1])
Línea -... Línea 41...
-
 
41
    
41
        
42
    }*/
42
        //guard !isLoading else { return }
43
 
43
 
44
    
44
        
45
    func load() {
45
        let md5Data = MD5(string: urlString)
46
        
46
        let key =  md5Data.map {
-
 
47
            String(format: "%02hhx", $0)
-
 
48
        
-
 
Línea -... Línea 47...
-
 
47
        if imageCache.cache.hasData(forKey: key) {
-
 
48
            self.image = imageCache.cache.readImageForKey(key: key)
49
        }.joined()
49
        }
Línea 50... Línea 50...
50
        
50
        
Línea 51... Línea 51...
51
        if let image = cache?[key as NSString] {
51
        /*
52
            //print("ImageLoader in Cache")
52
        if let image = cache?[key as NSString] {
53
            self.image = image
53
            print("ImageLoader from cache key: \(key)")
54
            return
54
            self.image = image
55
        }
55
            return
Línea 56... Línea 56...
56
        
56
        }*/
57
        //print("ImageLoader not in Cache")
-
 
58
        
-
 
59
        
-
 
60
        var request = URLRequest(url: url)
-
 
61
  
-
 
62
        let headerSecurity = HeaderSecurity()
-
 
63
 
-
 
64
        request.httpMethod = "GET"
-
 
65
        request.addValue(appData.deviceUuid, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_TOKEN)
-
 
66
        request.addValue(headerSecurity.secret, forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_SECRET)
-
 
67
        request.addValue(String(headerSecurity.created), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_CREATED)
-
 
68
        request.addValue(String(headerSecurity.rand), forHTTPHeaderField: Constants.HTTP_HEADER_SECURITY_RAND)
-
 
69
 
-
 
70
            
-
 
71
        //print("ImageLoader Header \(Constants.HTTP_HEADER_SECURITY_TOKEN) =  \(appData.deviceUuid) ")
-
 
72
        //print("ImageLoader Header \( Constants.HTTP_HEADER_SECURITY_SECRET) =  \(headerSecurity.secret) ")
-
 
Línea 73... Línea 57...
73
        //print("ImageLoader Header \(Constants.HTTP_HEADER_SECURITY_CREATED) =  \(headerSecurity.created) ")
57
        
74
        //print("ImageLoader Header \(Constants.HTTP_HEADER_SECURITY_RAND) =  \(headerSecurity.rand) ")
58
        print("ImageLoader from url key: \(key)")
75
        
59
 
Línea 101... Línea 85...
101
            }
85
            }
Línea 102... Línea 86...
102
            
86
            
103
            DispatchQueue.main.async {
87
            DispatchQueue.main.async {
104
                self.image = UIImage(data: content)
88
                self.image = UIImage(data: content)
-
 
89
               // self.dataHasLoaded = true
-
 
90
                
-
 
91
                print("ImageLoader save to cache key: \(self.key)")
-
 
92
                self.imageCache.cache.write(image: self.image!, forKey: self.key)
-
 
93
                
105
               // self.dataHasLoaded = true
94
                //self.cache?[self.key as NSString] = self.image
106
            }
95
            }
107
        }
-
 
108
    
-
 
109
    /*
-
 
110
    func cancel() {
-
 
111
        cancellable?.cancel()
-
 
112
    }
-
 
113
    
-
 
114
    private func onStart() {
-
 
115
        isLoading = true
-
 
116
    }
-
 
117
    
-
 
118
    private func onFinish() {
-
 
119
        isLoading = false
-
 
120
    }*/
-
 
121
    
-
 
122
    private func cache(_ image: UIImage?) {
-
 
123
        let urlString : String = url.absoluteString
-
 
124
        
-
 
125
        //print("ImageLoader URL : \(urlString) ")
-
 
126
        
-
 
127
        //guard !isLoading else { return }
-
 
128
 
-
 
129
        
-
 
130
        let md5Data = MD5(string: urlString)
-
 
131
        let key =  md5Data.map {
-
 
132
            String(format: "%02hhx", $0)
-
 
133
        
-
 
134
        }.joined()
-
 
135
        
-
 
136
        
-
 
137
        image.map { cache?[key as NSString] = $0 }
-
 
138
    }
-
 
139
    
-
 
140
    private func MD5(string: String) -> Data {
-
 
141
        let length = Int(CC_MD5_DIGEST_LENGTH)
-
 
142
        let messageData = string.data(using:.utf8)!
-
 
143
        var digestData = Data(count: length)
-
 
144
 
-
 
145
        _ = digestData.withUnsafeMutableBytes { digestBytes -> UInt8 in
-
 
146
        messageData.withUnsafeBytes { messageBytes -> UInt8 in
-
 
147
        if let messageBytesBaseAddress = messageBytes.baseAddress, let digestBytesBlindMemory = digestBytes.bindMemory(to: UInt8.self).baseAddress {
-
 
148
                let messageLength = CC_LONG(messageData.count)
-
 
149
                    CC_MD5(messageBytesBaseAddress, messageLength, digestBytesBlindMemory)
-
 
150
                }
-
 
151
            return 0
-
 
152
            }
-
 
153
        }
-
 
154
        return digestData
-
 
155
    }
-
 
156
    
96
        }