NCViewerImageAsset.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import UIKit
  2. class NCViewerImageAsset: NSObject {
  3. public enum ImageType {
  4. case jpg
  5. case gif
  6. static func from(mimeType: String) -> ImageType? {
  7. if mimeType.contains("gif") { return .gif
  8. } else if mimeType.contains("jpg") { return .jpg }
  9. return nil
  10. }
  11. }
  12. public var url: URL?
  13. public var image: UIImage?
  14. public var type: ImageType?
  15. public var metadata: tableMetadata?
  16. private override init() { }
  17. public init(metadata: tableMetadata) {
  18. self.metadata = metadata
  19. }
  20. func download(completion:@escaping(_ success: Bool?) -> Void) -> URLSessionDataTask? {
  21. return NCViewerImageAsset.download(url: url) { (success, image, type) in
  22. self.image = image
  23. if let type = type {
  24. self.type = type
  25. }
  26. completion(success)
  27. }
  28. }
  29. static func download(url: URL?, completion:@escaping(_ success: Bool?, _ image: UIImage?, _ type: NCViewerImageAsset.ImageType?) -> Void) -> URLSessionDataTask? {
  30. guard let url = url else {
  31. completion(false, nil, nil)
  32. return nil
  33. }
  34. let dataTask = URLSession.shared.dataTask(with: url) { data, response, error in
  35. guard let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
  36. let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
  37. let data = data, error == nil,
  38. var image = UIImage(data: data)
  39. else {
  40. DispatchQueue.main.async { completion(false, nil, nil) }
  41. return
  42. }
  43. let type: NCViewerImageAsset.ImageType? = ImageType.from(mimeType: mimeType)
  44. /*
  45. if type == .gif, let gif = UIImage.gif(data: data) {
  46. image = gif
  47. }
  48. */
  49. DispatchQueue.main.async { completion(true, image, type) }
  50. }
  51. dataTask.resume()
  52. return dataTask
  53. }
  54. }