Translater/src/client/java/io/gitlab/jfronny/translater/transformer/CachingTransformer.java

79 lines
2.9 KiB
Java
Raw Normal View History

2020-08-07 12:47:37 +02:00
package io.gitlab.jfronny.translater.transformer;
2022-08-28 16:42:27 +02:00
import io.gitlab.jfronny.libjf.config.api.v1.ConfigHolder;
2020-08-07 12:47:37 +02:00
import io.gitlab.jfronny.translater.Cfg;
import io.gitlab.jfronny.translater.Translater;
import net.fabricmc.loader.api.FabricLoader;
import java.io.*;
2021-05-19 16:03:59 +02:00
import java.nio.file.Files;
import java.nio.file.Path;
2020-08-07 12:47:37 +02:00
import java.util.Properties;
public class CachingTransformer implements Transformer {
private static final Path CACHE_FILE = FabricLoader.getInstance().getConfigDir().resolve(Translater.MOD_ID + ".cache");
private final Properties cache = new Properties();
private final Transformer transformer;
2020-08-07 12:47:37 +02:00
@Override
public String transform(String str) {
if (str == null)
return null;
//Transform and cache if not present
if (!cache.containsKey(str)) {
String transformed = transformer.transform(str);
if (transformed == null) {
// The transformer failed
return str;
}
cache.put(str, transformed);
save();
2020-08-07 12:47:37 +02:00
}
//Return cached result
return (String) cache.get(str);
}
public CachingTransformer(Transformer baseTransformer) {
2020-08-07 12:47:37 +02:00
transformer = baseTransformer;
2021-05-19 16:03:59 +02:00
if (Cfg.forceRegenerate) {
Cfg.forceRegenerate = false;
2021-11-10 17:21:52 +01:00
ConfigHolder.getInstance().getRegistered().get(Translater.MOD_ID).write();
2020-08-07 12:47:37 +02:00
} else {
//Load cache
if (Files.exists(CACHE_FILE) && Files.isRegularFile(CACHE_FILE)) {
2021-05-19 16:03:59 +02:00
Translater.LOGGER.info("Loading cache");
try (InputStream inS = Files.newInputStream(CACHE_FILE)) {
2020-08-07 12:47:37 +02:00
cache.load(inS);
} catch (IOException e) {
Translater.LOGGER.error("Could not load translater cache", e);
2020-08-07 12:47:37 +02:00
}
} else {
//Save default cache if parameters are default
2021-05-19 16:03:59 +02:00
if (!Cfg.breakFully && Cfg.rounds == 5) {
Translater.LOGGER.info("Initializing default cache");
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inS = classLoader.getResourceAsStream("namecache.ini");
if (inS != null) {
try {
2020-08-07 12:47:37 +02:00
cache.load(inS);
inS.close();
save();
2021-05-19 16:03:59 +02:00
} catch (IOException e) {
Translater.LOGGER.error("Could not initialize default translater cache");
2020-08-07 12:47:37 +02:00
}
}
}
}
}
save();
2020-08-07 12:47:37 +02:00
}
private void save() {
try (OutputStream outS = Files.newOutputStream(CACHE_FILE)) {
2020-08-07 12:47:37 +02:00
cache.store(outS, "---Lang---");
} catch (IOException e) {
Translater.LOGGER.error("Could not save translater cache");
2020-08-07 12:47:37 +02:00
}
}
}