Add more file properties, organize storage, add video block
This commit is contained in:
@ -82,7 +82,6 @@ extension Content {
|
||||
results.failed(image: image)
|
||||
}
|
||||
|
||||
imageGenerator.save()
|
||||
imageGenerator.writeAvifCommandScript()
|
||||
//let images = Set(self.images.map { $0.id })
|
||||
//imageGenerator.recalculateGeneratedImages(by: images)
|
||||
|
@ -45,9 +45,6 @@ extension Content {
|
||||
}
|
||||
|
||||
let settings = storage.loadSettings() ?? .default
|
||||
let imageDescriptions = storage.loadFileDescriptions()
|
||||
.default([])
|
||||
.reduce(into: [:]) { $0[$1.fileId] = $1 }
|
||||
|
||||
guard let tagData = storage.loadAllTags() else {
|
||||
print("Failed to load file tags")
|
||||
@ -73,30 +70,14 @@ extension Content {
|
||||
}
|
||||
if fileList.isEmpty { print("No files loaded") }
|
||||
|
||||
let externalFiles = storage.loadExternalFileList() ?? []
|
||||
if externalFiles.isEmpty { print("No external files loaded") }
|
||||
|
||||
print("Loaded data from disk, processing...")
|
||||
// All data loaded from storage, start constructing the data model
|
||||
|
||||
var files: [String : FileResource] = fileList.reduce(into: [:]) { files, fileId in
|
||||
let descriptions = imageDescriptions[fileId]
|
||||
files[fileId] = FileResource(
|
||||
content: self,
|
||||
id: fileId,
|
||||
isExternallyStored: false,
|
||||
en: descriptions?.english ?? "",
|
||||
de: descriptions?.german ?? "")
|
||||
}
|
||||
|
||||
for fileId in externalFiles {
|
||||
let descriptions = imageDescriptions[fileId]
|
||||
files[fileId] = FileResource(
|
||||
content: self,
|
||||
id: fileId,
|
||||
isExternallyStored: true,
|
||||
en: descriptions?.english ?? "",
|
||||
de: descriptions?.german ?? "")
|
||||
let files: [String : FileResource] = fileList.reduce(into: [:]) { (files, data) in
|
||||
let fileId = data.key
|
||||
let fileData = data.value.data
|
||||
let isExternal = data.value.isExternal
|
||||
files[fileId] = FileResource(content: self, id: fileId, file: fileData, isExternalFile: isExternal)
|
||||
}
|
||||
|
||||
let images = files.filter { $0.value.type.isImage }
|
||||
|
@ -13,21 +13,7 @@ extension Content {
|
||||
failedSaves += posts.count { !storage.save(post: $0.postFile, for: $0.id) }
|
||||
failedSaves += tags.count { !storage.save(tagMetadata: $0.file, for: $0.id) }
|
||||
failedSaves.increment(!storage.save(settings: settings.file(tagOverview: tagOverview)))
|
||||
|
||||
let fileDescriptions: [FileDescriptions] = files.sorted().compactMap { file in
|
||||
guard !file.english.isEmpty || !file.german.isEmpty else {
|
||||
return nil
|
||||
}
|
||||
return FileDescriptions(
|
||||
fileId: file.id,
|
||||
german: file.german.nonEmpty,
|
||||
english: file.english.nonEmpty)
|
||||
}
|
||||
|
||||
failedSaves.increment(!storage.save(fileDescriptions: fileDescriptions))
|
||||
|
||||
let externalFileList = files.filter { $0.isExternallyStored }.map { $0.id }
|
||||
failedSaves.increment(!storage.save(externalFileList: externalFileList))
|
||||
failedSaves += files.count { !storage.save(fileInfo: $0.fileInfo, for: $0.id) }
|
||||
|
||||
if failedSaves > 0 {
|
||||
print("Save partially failed with \(failedSaves) errors")
|
||||
|
@ -14,6 +14,24 @@ final class FileResource: Item {
|
||||
@Published
|
||||
var english: String
|
||||
|
||||
@Published
|
||||
var version: String?
|
||||
|
||||
@Published
|
||||
var sourceUrl: String?
|
||||
|
||||
@Published
|
||||
var generatedImageVersions: Set<String>
|
||||
|
||||
@Published
|
||||
var customOutputPath: String?
|
||||
|
||||
@Published
|
||||
var addedDate: Date
|
||||
|
||||
@Published
|
||||
var modifiedDate: Date
|
||||
|
||||
/// The dimensions of the image
|
||||
@Published
|
||||
var imageDimensions: CGSize? = nil
|
||||
@ -22,11 +40,41 @@ final class FileResource: Item {
|
||||
@Published
|
||||
var fileSize: Int? = nil
|
||||
|
||||
init(content: Content, id: String, isExternallyStored: Bool, en: String, de: String) {
|
||||
init(content: Content,
|
||||
id: String,
|
||||
isExternallyStored: Bool,
|
||||
english: String?,
|
||||
german: String?,
|
||||
version: String? = nil,
|
||||
sourceUrl: String? = nil,
|
||||
generatedImageVersions: Set<String> = [],
|
||||
customOutputPath: String? = nil,
|
||||
addedDate: Date = .now,
|
||||
modifiedDate: Date = .now) {
|
||||
self.type = FileType(fileExtension: id.fileExtension)
|
||||
self.english = en
|
||||
self.german = de
|
||||
self.isExternallyStored = isExternallyStored
|
||||
self.german = german ?? ""
|
||||
self.english = english ?? ""
|
||||
self.version = version
|
||||
self.sourceUrl = sourceUrl
|
||||
self.generatedImageVersions = generatedImageVersions
|
||||
self.customOutputPath = customOutputPath
|
||||
self.addedDate = addedDate
|
||||
self.modifiedDate = modifiedDate
|
||||
super.init(content: content, id: id)
|
||||
}
|
||||
|
||||
init(content: Content, id: String, file: FileResourceFile, isExternalFile: Bool) {
|
||||
self.type = FileType(fileExtension: id.fileExtension)
|
||||
self.isExternallyStored = isExternalFile
|
||||
self.german = file.germanDescription ?? ""
|
||||
self.english = file.englishDescription ?? ""
|
||||
self.version = file.version
|
||||
self.sourceUrl = file.sourceUrl
|
||||
self.generatedImageVersions = Set(file.generatedImages ?? [])
|
||||
self.customOutputPath = file.customOutputPath
|
||||
self.addedDate = file.addedDate
|
||||
self.modifiedDate = file.modifiedDate
|
||||
super.init(content: content, id: id)
|
||||
}
|
||||
|
||||
@ -38,6 +86,12 @@ final class FileResource: Item {
|
||||
self.english = "A test image included in the bundle"
|
||||
self.german = "Ein Testbild aus dem Bundle"
|
||||
self.isExternallyStored = true
|
||||
self.version = nil
|
||||
self.sourceUrl = nil
|
||||
self.generatedImageVersions = []
|
||||
self.customOutputPath = nil
|
||||
self.addedDate = Date.now
|
||||
self.modifiedDate = Date.now
|
||||
super.init(content: .mock, id: resourceImage) // TODO: Add images to mock
|
||||
}
|
||||
|
||||
@ -143,8 +197,10 @@ final class FileResource: Item {
|
||||
|
||||
func removeGeneratedImages() {
|
||||
guard type.isImage else { return }
|
||||
content.imageGenerator.removeVersions(of: id)
|
||||
content.storage.deleteInOutputFolder(outputImageFolder)
|
||||
guard content.storage.deleteInOutputFolder(outputImageFolder) else {
|
||||
return
|
||||
}
|
||||
self.generatedImageVersions = []
|
||||
}
|
||||
|
||||
private var failureImage: Image {
|
||||
@ -236,6 +292,21 @@ final class FileResource: Item {
|
||||
}
|
||||
}
|
||||
|
||||
extension FileResource {
|
||||
|
||||
var fileInfo: FileResourceFile {
|
||||
.init(
|
||||
englishDescription: english.nonEmpty,
|
||||
germanDescription: german.nonEmpty,
|
||||
generatedImages: generatedImageVersions.sorted().nonEmpty,
|
||||
customOutputPath: customOutputPath,
|
||||
version: version,
|
||||
sourceUrl: sourceUrl,
|
||||
addedDate: addedDate,
|
||||
modifiedDate: modifiedDate)
|
||||
}
|
||||
}
|
||||
|
||||
extension FileResource: LocalizedItem {
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user