1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
//
// NCUtility+Image.swift
// Nextcloud
//
// Created by Henrik Storch on 17.03.22.
// Copyright © 2022 Henrik Storch. All rights reserved.
//
// Author Henrik Storch <henrik.storch@nextcloud.com>
//
// 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 <http://www.gnu.org/licenses/>.
//
import UIKit
import SVGKit
import NCCommunication
extension NCUtility {
func getImageMetadata(_ metadata: tableMetadata, for size: CGFloat) -> UIImage? {
if let image = getImage(metadata: metadata) {
return image
}
if metadata.classFile == NCCommunicationCommon.typeClassFile.video.rawValue && !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.classFile == NCCommunicationCommon.typeClassFile.video.rawValue {
return UIImage(named: "noPreviewVideo")?.image(color: .gray, size: size)
} else if metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue {
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.classFile == NCCommunicationCommon.typeClassFile.image.rawValue {
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
}
}
|