Write AVIF image generation script

This commit is contained in:
Christoph Hagen 2025-01-06 10:08:50 +01:00
parent 301dbad0a5
commit 6c1b473ab8
5 changed files with 27 additions and 8 deletions

View File

@ -656,8 +656,8 @@
E2A21C342CB9A3CA0060935B /* Settings */ = {
isa = PBXGroup;
children = (
E2FE0F3D2D2B4225002963B7 /* AudioSettingsDetailView.swift */,
E29D318C2D0B2E5E0051B7F4 /* Content */,
E2FE0F3D2D2B4225002963B7 /* AudioSettingsDetailView.swift */,
E29D316E2D0822720051B7F4 /* SettingsListView.swift */,
E29D31702D08234D0051B7F4 /* GenerationDetailView.swift */,
E25DA5942D023BCC00AEF16D /* PageSettingsDetailView.swift */,

View File

@ -38,8 +38,20 @@ final class ImageGenerator {
private var avifCommands: Set<String> = []
func printAvifCommands() {
avifCommands.sorted().forEach { print($0) }
/**
Write a file to the output folder containing a script to generate all missing AVIF images.
- Note: AVIF images could be generated internally, but the process is very slow.
*/
func writeAvifCommandScript() {
guard !avifCommands.isEmpty else {
if storage.hasFileInOutputFolder("generate-images.sh") {
storage.deleteInOutputFolder("generate-images.sh")
}
return
}
let content = avifCommands.sorted().joined(separator: "\n")
storage.write(content, to: "generate-images.sh")
}
/**

View File

@ -81,7 +81,7 @@ extension Content {
}
imageGenerator.save()
imageGenerator.printAvifCommands()
imageGenerator.writeAvifCommandScript()
//let images = Set(self.images.map { $0.id })
//imageGenerator.recalculateGeneratedImages(by: images)
}

View File

@ -144,7 +144,7 @@ final class FileResource: Item {
func removeGeneratedImages() {
guard type.isImage else { return }
content.imageGenerator.removeVersions(of: id)
content.storage.deleteInOutputFolder(path: outputImageFolder)
content.storage.deleteInOutputFolder(outputImageFolder)
}
private var failureImage: Image {
@ -182,7 +182,7 @@ final class FileResource: Item {
// MARK: Paths
func removeFileFromOutputFolder() {
content.storage.deleteInOutputFolder(path: absoluteUrl)
content.storage.deleteInOutputFolder(absoluteUrl)
if type.isImage {
removeGeneratedImages()
}

View File

@ -280,9 +280,9 @@ final class Storage: ObservableObject {
}
@discardableResult
func deleteInOutputFolder(path: String) -> Bool {
func deleteInOutputFolder(_ relativePath: String) -> Bool {
guard let outputScope else { return false }
return outputScope.deleteFile(at: path)
return outputScope.deleteFile(at: relativePath)
}
/**
@ -400,11 +400,18 @@ final class Storage: ObservableObject {
// MARK: Output files
/**
Write the content of a file to a relative path of the output folder.
*/
@discardableResult
func write(_ content: String, to relativeOutputPath: String) -> Bool {
guard let outputScope else { return false }
return outputScope.write(content, to: relativeOutputPath)
}
/**
Write the data of a file to a relative path of the output folder.
*/
func write(_ data: Data, to relativeOutputPath: String) -> Bool {
guard let outputScope else { return false }
return outputScope.write(data, to: relativeOutputPath)