75 lines
2.5 KiB
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();
|
|
}
|
|
}
|
|
}
|