blog-software-java/src/main/java/eu/m724/blog/Main.java

97 lines
3.2 KiB
Java
Raw Normal View History

2025-01-07 11:41:30 +01:00
package eu.m724.blog;
2025-01-08 18:40:11 +01:00
import eu.m724.blog.data.Post;
import eu.m724.blog.data.Site;
import eu.m724.blog.data.Template;
import org.apache.commons.io.file.PathUtils;
2025-01-07 11:41:30 +01:00
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.RepositoryBuilder;
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
2025-01-08 18:40:11 +01:00
import java.nio.file.Files;
import java.nio.file.Path;
2025-01-09 16:15:55 +01:00
import java.util.ArrayList;
import java.util.Comparator;
2025-01-08 18:40:11 +01:00
import java.util.stream.Collectors;
2025-01-07 11:41:30 +01:00
public class Main {
public static void main(String[] args) throws IOException {
System.out.println("Hello world!");
2025-01-08 18:40:11 +01:00
var workingDirectory = Path.of("m724");
var templateDirectory = workingDirectory.resolve("template");
var outputDirectory = workingDirectory.resolve("generated_out");
2025-01-07 11:41:30 +01:00
var force = true;
//
var repository = new RepositoryBuilder()
2025-01-08 18:40:11 +01:00
.setGitDir(workingDirectory.toFile())
2025-01-07 11:41:30 +01:00
.build();
var git = new Git(repository);
//
2025-01-08 18:40:11 +01:00
if (outputDirectory.toFile().exists()) {
2025-01-07 11:41:30 +01:00
if (force) {
2025-01-08 18:40:11 +01:00
PathUtils.deleteDirectory(outputDirectory);
2025-01-07 11:41:30 +01:00
} else {
2025-01-08 18:40:11 +01:00
throw new FileAlreadyExistsException(outputDirectory.toString(), null, "Output directory already exists");
2025-01-07 11:41:30 +01:00
}
}
2025-01-08 18:40:11 +01:00
var site = Site.fromConfig(git);
var template = new Template(templateDirectory);
2025-01-07 11:41:30 +01:00
2025-01-08 18:40:11 +01:00
Files.createDirectory(outputDirectory);
2025-01-07 11:41:30 +01:00
2025-01-08 18:40:11 +01:00
copyIfExists(workingDirectory.resolve("assets"), outputDirectory.resolve("assets"));
copyIfExists(templateDirectory.resolve("static"), outputDirectory.resolve("static"));
2025-01-07 11:41:30 +01:00
2025-01-08 18:40:11 +01:00
Files.createDirectory(outputDirectory.resolve("post"));
var postDirectory = workingDirectory.resolve("posts");
2025-01-09 16:15:55 +01:00
var posts = new ArrayList<Post>();
2025-01-08 18:40:11 +01:00
try (var stream = Files.walk(postDirectory)) {
for (var path : stream.collect(Collectors.toSet())) {
if (!Files.isRegularFile(path)) continue;
2025-01-07 11:41:30 +01:00
2025-01-08 18:40:11 +01:00
if (!path.toString().endsWith(".html")) {
System.out.println("Post " + path.getFileName() + ": unsupported file type");
continue;
}
path = postDirectory.relativize(path);
var post = Post.fromFile(git, path);
var render = template.renderPost(site, post);
var outFile = outputDirectory.resolve("post").resolve(path);
try {
Files.createDirectory(outFile.getParent());
2025-01-09 16:15:55 +01:00
} catch (FileAlreadyExistsException ignored) { }
2025-01-08 18:40:11 +01:00
Files.writeString(outFile, render);
2025-01-09 16:15:55 +01:00
posts.add(post);
2025-01-08 18:40:11 +01:00
}
}
2025-01-09 16:15:55 +01:00
posts.sort(Comparator.comparing(Post::createdAt).reversed());
Files.writeString(outputDirectory.resolve("index.html"), template.renderIndex(site, posts));
new Server(outputDirectory).start();
2025-01-08 18:40:11 +01:00
}
private static void copyIfExists(Path src, Path dest) throws IOException {
System.out.print(src);
if (Files.exists(src)) {
PathUtils.copyDirectory(src, dest);
System.out.println(" copied");
} else {
System.out.println(" doesn't exist, not copying");
}
2025-01-07 11:41:30 +01:00
}
}