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

75 lines
2.5 KiB
Java

package io.gitlab.jfronny.translater.transformer;
import io.gitlab.jfronny.translater.Cfg;
import io.gitlab.jfronny.translater.Translater;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.ConfigManager;
import net.fabricmc.loader.api.FabricLoader;
import java.io.*;
import java.util.Properties;
public class CachingTransformer implements ITransformer {
private static final File cacheFile = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Translater.cache");
Properties cache;
private final ITransformer transformer;
@Override
public String transform(String str) {
if (str == null)
return null;
//Transform and cache if not present
if (!cache.containsKey(str)) {
cache.put(str, transformer.transform(str));
Save();
}
//Return cached result
return (String) cache.get(str);
}
public CachingTransformer(ITransformer baseTransformer) {
transformer = baseTransformer;
cache = new Properties();
if (Translater.cfg.forceRegenerate) {
Translater.cfg.forceRegenerate = false;
((ConfigManager<Cfg>) AutoConfig.getConfigHolder(Cfg.class)).save();
} else {
//Load cache
if (cacheFile.exists()) {
try {
FileInputStream inS = new FileInputStream(cacheFile);
cache.load(inS);
inS.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
//Save default cache if parameters are default
if (!Translater.cfg.breakFully && Translater.cfg.rounds == 5) {
try {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inS = classLoader.getResourceAsStream("namecache.ini");
if (inS != null) {
cache.load(inS);
inS.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Save();
}
private void Save() {
try {
FileOutputStream outS = new FileOutputStream(cacheFile);
cache.store(outS, "---Lang---");
outS.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}