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) 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(); } } }