NCUtility+Image.swift 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //
  2. // NCUtility+Image.swift
  3. // Nextcloud
  4. //
  5. // Created by Henrik Storch on 17.03.22.
  6. // Copyright © 2022 Henrik Storch. All rights reserved.
  7. //
  8. // Author Henrik Storch <henrik.storch@nextcloud.com>
  9. //
  10. // This program is free software: you can redistribute it and/or modify
  11. // it under the terms of the GNU General Public License as published by
  12. // the Free Software Foundation, either version 3 of the License, or
  13. // (at your option) any later version.
  14. //
  15. // This program is distributed in the hope that it will be useful,
  16. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. // GNU General Public License for more details.
  19. //
  20. // You should have received a copy of the GNU General Public License
  21. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  22. //
  23. import UIKit
  24. import SVGKit
  25. import NextcloudKit
  26. extension NCUtility {
  27. func getImageMetadata(_ metadata: tableMetadata, for size: CGFloat) -> UIImage? {
  28. if let image = getImage(metadata: metadata) {
  29. return image
  30. }
  31. if metadata.isVideo && !metadata.hasPreview {
  32. NCUtility.shared.createImageFrom(fileNameView: metadata.fileNameView, ocId: metadata.ocId, etag: metadata.etag, classFile: metadata.classFile)
  33. }
  34. if CCUtility.fileProviderStoragePreviewIconExists(metadata.ocId, etag: metadata.etag) {
  35. if let imagePreviewPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag) {
  36. return UIImage(contentsOfFile: imagePreviewPath)
  37. }
  38. }
  39. if metadata.isVideo {
  40. return UIImage(named: "noPreviewVideo")?.image(color: .gray, size: size)
  41. } else if metadata.isAudio {
  42. return UIImage(named: "noPreviewAudio")?.image(color: .gray, size: size)
  43. } else {
  44. return UIImage(named: "noPreview")?.image(color: .gray, size: size)
  45. }
  46. }
  47. func getImage(metadata: tableMetadata) -> UIImage? {
  48. let ext = CCUtility.getExtension(metadata.fileNameView)
  49. var image: UIImage?
  50. if CCUtility.fileProviderStorageExists(metadata) && metadata.isImage {
  51. let previewPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)!
  52. let imagePath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!
  53. if ext == "GIF" {
  54. if !FileManager().fileExists(atPath: previewPath) {
  55. NCUtility.shared.createImageFrom(fileNameView: metadata.fileNameView, ocId: metadata.ocId, etag: metadata.etag, classFile: metadata.classFile)
  56. }
  57. image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath))
  58. } else if ext == "SVG" {
  59. if let svgImage = SVGKImage(contentsOfFile: imagePath) {
  60. svgImage.size = CGSize(width: NCGlobal.shared.sizePreview, height: NCGlobal.shared.sizePreview)
  61. if let image = svgImage.uiImage {
  62. if !FileManager().fileExists(atPath: previewPath) {
  63. do {
  64. try image.pngData()?.write(to: URL(fileURLWithPath: previewPath), options: .atomic)
  65. } catch { }
  66. }
  67. return image
  68. } else {
  69. return nil
  70. }
  71. } else {
  72. return nil
  73. }
  74. } else {
  75. NCUtility.shared.createImageFrom(fileNameView: metadata.fileNameView, ocId: metadata.ocId, etag: metadata.etag, classFile: metadata.classFile)
  76. image = UIImage(contentsOfFile: imagePath)
  77. }
  78. }
  79. return image
  80. }
  81. }