Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 17 | Rev 22 | 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
21 efrain 17
    //private var cache: ImageCache?
18
    private var imageCache: ImageCache
17 efrain 19
    private var appData = AppData.sharedInstance
21 efrain 20
    private let key : String
1 efrain 21
 
21 efrain 22
 
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
 
1 efrain 31
    }
32
 
33
    /*
21 efrain 34
    init(url: URL, cache: ImageCache? = nil) {
35
        self.url = url
36
        self.cache = 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
 
42
    }*/
1 efrain 43
 
21 efrain 44
 
45
    func load() {
1 efrain 46
 
21 efrain 47
        if imageCache.cache.hasData(forKey: key) {
48
            self.image = imageCache.cache.readImageForKey(key: key)
49
        }
1 efrain 50
 
21 efrain 51
        /*
1 efrain 52
        if let image = cache?[key as NSString] {
21 efrain 53
            print("ImageLoader from cache key: \(key)")
1 efrain 54
            self.image = image
55
            return
21 efrain 56
        }*/
1 efrain 57
 
21 efrain 58
        print("ImageLoader from url key: \(key)")
59
 
1 efrain 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
 
21 efrain 70
 
1 efrain 71
 
72
        let task = URLSession.shared.dataTask(with: request, completionHandler: setImageFromData)
73
        task.resume()
74
    }
75
 
76
    private func setImageFromData(data: Data?, urlResponse: URLResponse?, error: Error?) {
77
            guard error == nil else {
11 efrain 78
               // print("\(error!)")
1 efrain 79
                return
80
            }
81
 
82
            guard let content = data else {
11 efrain 83
               // print("No data")
1 efrain 84
                return
85
            }
86
 
87
            DispatchQueue.main.async {
88
                self.image = UIImage(data: content)
89
               // self.dataHasLoaded = true
21 efrain 90
 
91
                print("ImageLoader save to cache key: \(self.key)")
92
                self.imageCache.cache.write(image: self.image!, forKey: self.key)
93
 
94
                //self.cache?[self.key as NSString] = self.image
1 efrain 95
            }
96
        }
97
}
98