// // NCUtility+Image.swift // Nextcloud // // Created by Henrik Storch on 17.03.22. // Copyright © 2022 Henrik Storch. All rights reserved. // // Author Henrik Storch // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // import UIKit import SVGKit import NextcloudKit extension NCUtility { func getImageMetadata(_ metadata: tableMetadata, for size: CGFloat) -> UIImage? { if let image = getImage(metadata: metadata) { return image } if metadata.isVideo && !metadata.hasPreview { NCUtility.shared.createImageFrom(fileNameView: metadata.fileNameView, ocId: metadata.ocId, etag: metadata.etag, classFile: metadata.classFile) } if CCUtility.fileProviderStoragePreviewIconExists(metadata.ocId, etag: metadata.etag) { if let imagePreviewPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag) { return UIImage(contentsOfFile: imagePreviewPath) } } if metadata.isVideo { return UIImage(named: "noPreviewVideo")?.image(color: .gray, size: size) } else if metadata.isAudio { return UIImage(named: "noPreviewAudio")?.image(color: .gray, size: size) } else { return UIImage(named: "noPreview")?.image(color: .gray, size: size) } } func getImage(metadata: tableMetadata) -> UIImage? { let ext = CCUtility.getExtension(metadata.fileNameView) var image: UIImage? if CCUtility.fileProviderStorageExists(metadata) && metadata.isImage { let previewPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)! let imagePath = CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)! if ext == "GIF" { if !FileManager().fileExists(atPath: previewPath) { NCUtility.shared.createImageFrom(fileNameView: metadata.fileNameView, ocId: metadata.ocId, etag: metadata.etag, classFile: metadata.classFile) } image = UIImage.animatedImage(withAnimatedGIFURL: URL(fileURLWithPath: imagePath)) } else if ext == "SVG" { if let svgImage = SVGKImage(contentsOfFile: imagePath) { svgImage.size = CGSize(width: NCGlobal.shared.sizePreview, height: NCGlobal.shared.sizePreview) if let image = svgImage.uiImage { if !FileManager().fileExists(atPath: previewPath) { do { try image.pngData()?.write(to: URL(fileURLWithPath: previewPath), options: .atomic) } catch { } } return image } else { return nil } } else { return nil } } else { NCUtility.shared.createImageFrom(fileNameView: metadata.fileNameView, ocId: metadata.ocId, etag: metadata.etag, classFile: metadata.classFile) image = UIImage(contentsOfFile: imagePath) } } return image } }