Generate tag overview, add file action
This commit is contained in:
@ -14,8 +14,13 @@ final class FileResource: Item {
|
||||
@Published
|
||||
var english: String
|
||||
|
||||
/// The dimensions of the image
|
||||
@Published
|
||||
var size: CGSize = .zero
|
||||
var imageDimensions: CGSize? = nil
|
||||
|
||||
/// The size of the file in bytes
|
||||
@Published
|
||||
var fileSize: Int? = nil
|
||||
|
||||
init(content: Content, id: String, isExternallyStored: Bool, en: String, de: String) {
|
||||
self.type = FileType(fileExtension: id.fileExtension)
|
||||
@ -49,10 +54,13 @@ final class FileResource: Item {
|
||||
// MARK: Images
|
||||
|
||||
var aspectRatio: CGFloat {
|
||||
guard size.height > 0 else {
|
||||
guard let imageDimensions else {
|
||||
return 0
|
||||
}
|
||||
return size.width / size.height
|
||||
guard imageDimensions.height > 0 else {
|
||||
return 0
|
||||
}
|
||||
return imageDimensions.width / imageDimensions.height
|
||||
}
|
||||
|
||||
var imageToDisplay: Image {
|
||||
@ -60,18 +68,58 @@ final class FileResource: Item {
|
||||
print("Failed to load data for image \(id)")
|
||||
return failureImage
|
||||
}
|
||||
if fileSize == nil {
|
||||
DispatchQueue.main.async {
|
||||
self.fileSize = imageData.count
|
||||
}
|
||||
}
|
||||
guard let loadedImage = NSImage(data: imageData) else {
|
||||
print("Failed to create image \(id)")
|
||||
return failureImage
|
||||
}
|
||||
if self.size == .zero && loadedImage.size != .zero {
|
||||
if loadedImage.size != imageDimensions {
|
||||
DispatchQueue.main.async {
|
||||
self.size = loadedImage.size
|
||||
self.imageDimensions = loadedImage.size
|
||||
}
|
||||
}
|
||||
return .init(nsImage: loadedImage)
|
||||
}
|
||||
|
||||
func determineImageDimensions() {
|
||||
let size = getImageDimensions()
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.imageDimensions = size
|
||||
}
|
||||
}
|
||||
|
||||
private func getImageDimensions() -> CGSize? {
|
||||
guard type.isImage else {
|
||||
return nil
|
||||
}
|
||||
guard let imageData = content.storage.fileData(for: id) else {
|
||||
return nil
|
||||
}
|
||||
guard let loadedImage = NSImage(data: imageData) else {
|
||||
return nil
|
||||
}
|
||||
return loadedImage.size
|
||||
}
|
||||
|
||||
func determineFileSize() {
|
||||
DispatchQueue.global(qos: .userInitiated).async {
|
||||
let size = self.content.storage.size(of: self.id)
|
||||
DispatchQueue.main.async {
|
||||
self.fileSize = size
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func removeGeneratedImages() {
|
||||
content.imageGenerator.removeVersions(of: id)
|
||||
content.storage.deleteInOutputFolder(path: outputImageFolder)
|
||||
}
|
||||
|
||||
private var failureImage: Image {
|
||||
Image(systemSymbol: .exclamationmarkTriangle)
|
||||
}
|
||||
@ -105,6 +153,13 @@ final class FileResource: Item {
|
||||
|
||||
// MARK: Paths
|
||||
|
||||
func removeFileFromOutputFolder() {
|
||||
content.storage.deleteInOutputFolder(path: absoluteUrl)
|
||||
if type.isImage {
|
||||
removeGeneratedImages()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Get the url path to a file in the output folder.
|
||||
The result is an absolute path from the output folder for use in HTML.
|
||||
|
Reference in New Issue
Block a user