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

80 lines
2.8 KiB
Java
Raw Normal View History

2020-08-07 12:47:37 +02:00
package io.gitlab.jfronny.translater.transformer;
2021-10-09 13:12:42 +02:00
import io.gitlab.jfronny.libjf.config.impl.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 ITransformer {
2021-05-19 16:03:59 +02:00
private static final Path cacheFile = FabricLoader.getInstance().getConfigDir().resolve(Translater.MOD_ID + ".cache");
2020-08-07 12:47:37 +02:00
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)) {
String transformed = transformer.transform(str);
if (transformed == null) {
2021-05-19 16:03:59 +02:00
Translater.LOGGER.warn("Very concerning, got null for non-null key " + str);
return null;
}
cache.put(str, transformed);
2020-08-07 12:47:37 +02:00
Save();
}
//Return cached result
return (String) cache.get(str);
}
public CachingTransformer(ITransformer baseTransformer) {
transformer = baseTransformer;
cache = new Properties();
2021-05-19 16:03:59 +02:00
if (Cfg.forceRegenerate) {
Cfg.forceRegenerate = false;
2021-10-09 13:12:42 +02:00
ConfigHolder.getConfigs().get(Translater.MOD_ID).write();
2020-08-07 12:47:37 +02:00
} else {
//Load cache
2021-05-19 16:03:59 +02:00
if (Files.exists(cacheFile) && Files.isRegularFile(cacheFile)) {
Translater.LOGGER.info("Loading cache");
try (InputStream inS = Files.newInputStream(cacheFile)) {
2020-08-07 12:47:37 +02:00
cache.load(inS);
} catch (IOException e) {
e.printStackTrace();
}
} 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();
2021-05-19 16:03:59 +02:00
Save();
} catch (IOException e) {
e.printStackTrace();
2020-08-07 12:47:37 +02:00
}
}
}
}
}
Save();
}
private void Save() {
2021-05-19 16:03:59 +02:00
try (OutputStream outS = Files.newOutputStream(cacheFile)) {
2020-08-07 12:47:37 +02:00
cache.store(outS, "---Lang---");
} catch (IOException e) {
e.printStackTrace();
}
}
}