Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

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