Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 63 | | 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
64 efrain 10
import SwiftUI
1 efrain 11
 
12
class ImageLoader: ObservableObject {
13
    @Published var image: UIImage?
17 efrain 14
 
1 efrain 15
    private(set) var isLoading = false
16
 
17
    private let url: URL
22 efrain 18
    private var imageCache: ImageCache?
19
    //private var imageCache: ImageCache
64 efrain 20
    private var appData = Environment(\.appData).wrappedValue
21 efrain 21
    private let key : String
1 efrain 22
 
22 efrain 23
    /*
21 efrain 24
    init(url: URL) {
1 efrain 25
        self.url = url
21 efrain 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
 
22 efrain 32
    }*/
1 efrain 33
 
22 efrain 34
 
21 efrain 35
    init(url: URL, cache: ImageCache? = nil) {
36
        self.url = url
22 efrain 37
        self.imageCache = cache
1 efrain 38
 
39
        let urlString : String = url.absoluteString
21 efrain 40
        let arrayFullFilename = urlString.split(separator: "/")
41
        self.key  = String(arrayFullFilename[arrayFullFilename.count - 1])
42
 
22 efrain 43
    }
1 efrain 44
 
21 efrain 45
 
46
    func load() {
63 efrain 47
        print("ImageLoaderkey: \(key)")
1 efrain 48
 
22 efrain 49
        if imageCache!.cache.hasData(forKey: key) {
63 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
 
21 efrain 58
        }
1 efrain 59
 
63 efrain 60
        print("Cargando la imagen desde el URL")
61
 
21 efrain 62
        /*
1 efrain 63
        if let image = cache?[key as NSString] {
21 efrain 64
            print("ImageLoader from cache key: \(key)")
1 efrain 65
            self.image = image
66
            return
21 efrain 67
        }*/
1 efrain 68
 
63 efrain 69
 
21 efrain 70
 
1 efrain 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
 
21 efrain 81
 
1 efrain 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 {
11 efrain 89
               // print("\(error!)")
1 efrain 90
                return
91
            }
92
 
93
            guard let content = data else {
11 efrain 94
               // print("No data")
1 efrain 95
                return
96
            }
97
 
98
            DispatchQueue.main.async {
99
                self.image = UIImage(data: content)
100
               // self.dataHasLoaded = true
21 efrain 101
 
102
                print("ImageLoader save to cache key: \(self.key)")
22 efrain 103
                self.imageCache!.cache.write(image: self.image!, forKey: self.key)
21 efrain 104
 
105
                //self.cache?[self.key as NSString] = self.image
1 efrain 106
            }
107
        }
108
}
109