2020-08-07 12:47:37 +02:00
|
|
|
package io.gitlab.jfronny.translater.transformer;
|
|
|
|
|
2021-11-10 17:21:52 +01:00
|
|
|
import io.gitlab.jfronny.libjf.config.api.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;
|
|
|
|
|
2021-12-19 18:19:15 +01:00
|
|
|
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)) {
|
2021-02-22 08:55:23 +01:00
|
|
|
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);
|
2021-02-22 08:55:23 +01:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
cache.put(str, transformed);
|
2021-12-19 18:19:15 +01:00
|
|
|
save();
|
2020-08-07 12:47:37 +02:00
|
|
|
}
|
|
|
|
//Return cached result
|
|
|
|
return (String) cache.get(str);
|
|
|
|
}
|
|
|
|
|
2021-12-19 18:19:15 +01:00
|
|
|
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
|
2021-12-19 18:19:15 +01:00
|
|
|
if (Files.exists(CACHE_FILE) && Files.isRegularFile(CACHE_FILE)) {
|
2021-05-19 16:03:59 +02:00
|
|
|
Translater.LOGGER.info("Loading cache");
|
2021-12-19 18:19:15 +01:00
|
|
|
try (InputStream inS = Files.newInputStream(CACHE_FILE)) {
|
2020-08-07 12:47:37 +02:00
|
|
|
cache.load(inS);
|
|
|
|
} catch (IOException e) {
|
2021-12-19 18:19:15 +01:00
|
|
|
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();
|
2021-12-19 18:19:15 +01:00
|
|
|
save();
|
2021-05-19 16:03:59 +02:00
|
|
|
} catch (IOException e) {
|
2021-12-19 18:19:15 +01:00
|
|
|
Translater.LOGGER.error("Could not initialize default translater cache");
|
2020-08-07 12:47:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-12-19 18:19:15 +01:00
|
|
|
save();
|
2020-08-07 12:47:37 +02:00
|
|
|
}
|
|
|
|
|
2021-12-19 18:19:15 +01: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) {
|
2021-12-19 18:19:15 +01:00
|
|
|
Translater.LOGGER.error("Could not save translater cache");
|
2020-08-07 12:47:37 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|