From a7ab3b400c81df88ddbaa52703534436092c8d60 Mon Sep 17 00:00:00 2001 From: Minecon724 Date: Sat, 22 Feb 2025 16:31:11 +0100 Subject: [PATCH] feat: Render options for now only includes compress true or false Signed-off-by: Minecon724 --- src/main/java/eu/m724/blog/BlogBuilder.java | 14 ++++-- .../java/eu/m724/blog/data/RenderOptions.java | 45 +++++++++++++++++++ 2 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 src/main/java/eu/m724/blog/data/RenderOptions.java diff --git a/src/main/java/eu/m724/blog/BlogBuilder.java b/src/main/java/eu/m724/blog/BlogBuilder.java index 143a4e3..f9860b0 100644 --- a/src/main/java/eu/m724/blog/BlogBuilder.java +++ b/src/main/java/eu/m724/blog/BlogBuilder.java @@ -3,6 +3,7 @@ package eu.m724.blog; import eu.m724.blog.compress.FileCompressor; import eu.m724.blog.data.Feed; import eu.m724.blog.data.Post; +import eu.m724.blog.data.RenderOptions; import eu.m724.blog.data.Site; import eu.m724.blog.template.TemplateRenderer; import org.apache.commons.compress.compressors.CompressorException; @@ -32,6 +33,7 @@ public class BlogBuilder { private Site site; private TemplateRenderer template; + private RenderOptions renderOptions; private Path templateDirectory; private Path outputDirectory; @@ -47,7 +49,7 @@ public class BlogBuilder { this.workingDirectory = git.getRepository().getDirectory().toPath().getParent(); this.templateDirectory = workingDirectory.resolve("template"); - this.outputDirectory = workingDirectory.resolve("generated_out"); + this.outputDirectory = workingDirectory.resolve("generated_out"); } /** @@ -124,6 +126,9 @@ public class BlogBuilder { if (site == null) this.site = Site.fromConfig(workingDirectory.resolve("site-config.yml")); + if (renderOptions == null) + this.renderOptions = RenderOptions.fromConfig(workingDirectory.resolve("render.yml")); + if (template == null) this.template = new TemplateRenderer(templateDirectory); @@ -140,9 +145,10 @@ public class BlogBuilder { Files.writeString(outputDirectory.resolve("posts.rss"), Feed.generateRss(site, posts)); - - System.out.println("Compressing..."); - compressOutput(); + if (renderOptions.compress()) { + System.out.println("Compressing..."); + compressOutput(); + } } private List renderPosts() throws IOException { diff --git a/src/main/java/eu/m724/blog/data/RenderOptions.java b/src/main/java/eu/m724/blog/data/RenderOptions.java new file mode 100644 index 0000000..1b562bc --- /dev/null +++ b/src/main/java/eu/m724/blog/data/RenderOptions.java @@ -0,0 +1,45 @@ +package eu.m724.blog.data; + +import org.snakeyaml.engine.v2.api.Load; +import org.snakeyaml.engine.v2.api.LoadSettings; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Map; + +public record RenderOptions( + boolean compress +) { + /** + * Creates a {@link Site} object by reading and parsing the configuration file at the specified path.
+ * The configuration file must be a JSON file. + * + * @param path the path to the configuration file + * @return a {@link Site} object initialized with the data from the configuration file + * @throws IOException if an error occurs during file reading + */ + public static RenderOptions fromConfig(Path path) throws IOException { + var load = new Load(LoadSettings.builder().build()); + var yaml = (Map) load.loadFromInputStream(Files.newInputStream(path)); + + boolean compress = true; + + for (var key : yaml.keySet()) { + var value = yaml.get(key); + + switch (key) { + case "compress": { + compress = (boolean) value; + } + default: { + System.out.println("Unrecognized option (render): " + key); + } + } + } + + return new RenderOptions( + compress + ); + } +}