this
This commit is contained in:
parent
dd28fde073
commit
e6cd257238
4 changed files with 101 additions and 11 deletions
|
@ -2,5 +2,6 @@
|
|||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/m724" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -3,6 +3,8 @@ package eu.m724.blog;
|
|||
import eu.m724.blog.data.Post;
|
||||
import eu.m724.blog.data.Site;
|
||||
import eu.m724.blog.data.Template;
|
||||
import in.wilsonl.minifyhtml.Configuration;
|
||||
import in.wilsonl.minifyhtml.MinifyHtml;
|
||||
import org.apache.commons.io.file.PathUtils;
|
||||
import org.eclipse.jgit.api.Git;
|
||||
import org.eclipse.jgit.lib.RepositoryBuilder;
|
||||
|
@ -16,6 +18,12 @@ import java.util.Comparator;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
public class Main {
|
||||
// TODO put this somewhere else
|
||||
private static final Configuration configuration = new Configuration.Builder()
|
||||
.setMinifyCss(true)
|
||||
.setMinifyJs(true)
|
||||
.build();
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
System.out.println("Hello world!");
|
||||
|
||||
|
@ -27,7 +35,7 @@ public class Main {
|
|||
//
|
||||
|
||||
var repository = new RepositoryBuilder()
|
||||
.setGitDir(workingDirectory.toFile())
|
||||
.setGitDir(workingDirectory.resolve(".git").toFile())
|
||||
.build();
|
||||
var git = new Git(repository);
|
||||
|
||||
|
@ -83,12 +91,51 @@ public class Main {
|
|||
new Server(outputDirectory).start();
|
||||
}
|
||||
|
||||
private static boolean copyTree(Path srcDir, Path destDir) throws IOException {
|
||||
if (!Files.isDirectory(srcDir)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void copyIfExists(Path src, Path dest) throws IOException {
|
||||
System.out.print(src);
|
||||
try (var walk = Files.walk(srcDir)) {
|
||||
for (var src : walk.collect(Collectors.toSet())) {
|
||||
var rel = srcDir.relativize(src);
|
||||
var dest = destDir.resolve(rel);
|
||||
|
||||
if (Files.exists(src)) {
|
||||
PathUtils.copyDirectory(src, dest);
|
||||
if (Files.isRegularFile(src)) {
|
||||
var parent = dest.getParent();
|
||||
|
||||
if (!Files.isDirectory(parent)) {
|
||||
Files.createDirectories(parent);
|
||||
}
|
||||
|
||||
var type = Files.probeContentType(src);
|
||||
String content = null;
|
||||
|
||||
if (type.equals("text/html")) {
|
||||
content = MinifyHtml.minify(Files.readString(src), configuration);
|
||||
} else if (type.equals("text/css")) {
|
||||
content = MinifyHtml.minify(Files.readString(src), configuration);
|
||||
} else if (type.equals("text/javascript")) {
|
||||
content = MinifyHtml.minify(Files.readString(src), configuration);
|
||||
}
|
||||
|
||||
if (content != null) {
|
||||
Files.writeString(dest, content);
|
||||
} else {
|
||||
Files.copy(src, dest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private static void copyIfExists(Path srcDir, Path destDir) throws IOException {
|
||||
System.out.print(srcDir);
|
||||
|
||||
if (copyTree(srcDir, destDir)) {
|
||||
System.out.println(" copied");
|
||||
} else {
|
||||
System.out.println(" doesn't exist, not copying");
|
||||
|
|
|
@ -35,7 +35,7 @@ public record Post(
|
|||
|
||||
var slug = path.getFileName().toString().split("\\.")[0];
|
||||
path = Path.of("posts").resolve(path);
|
||||
var lines = Files.readAllLines(git.getRepository().getDirectory().toPath().resolve(path));
|
||||
var lines = Files.readAllLines(git.getRepository().getDirectory().toPath().getParent().resolve(path));
|
||||
|
||||
var properties = new HashMap<String, String>();
|
||||
|
||||
|
|
|
@ -1,22 +1,64 @@
|
|||
package eu.m724.blog.data;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.eclipse.jgit.api.Git;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.AbstractMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public record Site(
|
||||
String name,
|
||||
String baseUrl,
|
||||
|
||||
JsonObject customProperties
|
||||
Map<String, Object> custom
|
||||
) {
|
||||
public static Site fromConfig(Git git) throws IOException {
|
||||
var content = Files.readString(new File(git.getRepository().getDirectory(), "config.json").toPath());
|
||||
var content = Files.readString(git.getRepository().getDirectory().toPath().getParent().resolve("config.json"));
|
||||
var json = JsonParser.parseString(content).getAsJsonObject().asMap();
|
||||
|
||||
return new Gson().fromJson(content, Site.class);
|
||||
String name = null;
|
||||
String baseUrl = null;
|
||||
var custom = new HashMap<String, Object>();
|
||||
|
||||
for (var entry : json.entrySet()) {
|
||||
switch (entry.getKey()) {
|
||||
case "name":
|
||||
name = entry.getValue().getAsString();
|
||||
break;
|
||||
case "baseUrl":
|
||||
baseUrl = entry.getValue().getAsString();
|
||||
break;
|
||||
default:
|
||||
custom.put(entry.getKey(), eToO(entry.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
return new Site(
|
||||
name, baseUrl, custom
|
||||
);
|
||||
}
|
||||
|
||||
private static Map<String, Object> deep(JsonObject jsonObject) {
|
||||
return jsonObject.entrySet().stream()
|
||||
.map(e -> new AbstractMap.SimpleEntry<>(e.getKey(), eToO(e.getValue())))
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||
}
|
||||
|
||||
private static Object eToO(JsonElement element) {
|
||||
if (element.isJsonArray()) {
|
||||
return element.getAsJsonArray().asList().stream().map(Site::eToO).toList();
|
||||
} else if (element.isJsonObject()) {
|
||||
return deep(element.getAsJsonObject());
|
||||
} else if (element.isJsonPrimitive()) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue