Add more file properties, organize storage, add video block
This commit is contained in:
@ -9,33 +9,15 @@ final class ImageGenerator {
|
||||
|
||||
private let settings: Settings
|
||||
|
||||
private var generatedImages: [String : Set<String>] = [:]
|
||||
|
||||
init(storage: Storage, settings: Settings) {
|
||||
self.storage = storage
|
||||
self.settings = settings
|
||||
self.generatedImages = storage.loadListOfGeneratedImages() ?? [:]
|
||||
print("ImageGenerator: Loaded list of \(totalImageCount) already generated images")
|
||||
}
|
||||
|
||||
private var outputFolder: String {
|
||||
settings.paths.imagesOutputFolderPath
|
||||
}
|
||||
|
||||
private var totalImageCount: Int {
|
||||
generatedImages.values.reduce(0) { $0 + $1.count }
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
func save() -> Bool {
|
||||
guard storage.save(listOfGeneratedImages: generatedImages) else {
|
||||
print("ImageGenerator: Failed to save list of generated images")
|
||||
return false
|
||||
}
|
||||
print("ImageGenerator: Saved list of \(totalImageCount) images")
|
||||
return true
|
||||
}
|
||||
|
||||
private var avifCommands: Set<String> = []
|
||||
|
||||
/**
|
||||
@ -54,49 +36,18 @@ final class ImageGenerator {
|
||||
storage.write(content, to: "generate-images.sh")
|
||||
}
|
||||
|
||||
/**
|
||||
Remove all versions of an image, so that they will be recreated on the next run.
|
||||
|
||||
This function does not remove the images from the output folder.
|
||||
*/
|
||||
func removeVersions(of image: String) {
|
||||
generatedImages[image] = nil
|
||||
save()
|
||||
}
|
||||
|
||||
func recalculateGeneratedImages(by images: Set<String>) {
|
||||
self.generatedImages = storage.calculateImages(generatedBy: images, in: outputFolder)
|
||||
let versionCount = generatedImages.values.reduce(0) { $0 + $1.count }
|
||||
print("Image generator: \(generatedImages.count)/\(images.count) images (\(versionCount) versions)")
|
||||
}
|
||||
|
||||
private func hasPreviouslyGenerated(_ version: ImageVersion) -> Bool {
|
||||
guard let versions = generatedImages[version.image.id] else {
|
||||
return false
|
||||
}
|
||||
return versions.contains(version.versionId)
|
||||
}
|
||||
|
||||
private func needsToGenerate(_ version: ImageVersion) -> Bool {
|
||||
if hasPreviouslyGenerated(version) {
|
||||
if version.wasPreviouslyGenerated {
|
||||
return false
|
||||
}
|
||||
if exists(version) {
|
||||
// Mark as already generated
|
||||
hasNowGenerated(version)
|
||||
version.wasNowGenerated()
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private func hasNowGenerated(_ version: ImageVersion) {
|
||||
generatedImages[version.image.id, default: []].insert(version.versionId)
|
||||
}
|
||||
|
||||
private func removeVersions(for image: String) {
|
||||
generatedImages[image] = nil
|
||||
}
|
||||
|
||||
// MARK: Files
|
||||
|
||||
private func exists(_ version: ImageVersion) -> Bool {
|
||||
@ -155,7 +106,7 @@ final class ImageGenerator {
|
||||
guard write(imageData: data, of: version) else {
|
||||
return false
|
||||
}
|
||||
hasNowGenerated(version)
|
||||
version.wasNowGenerated()
|
||||
return true
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user