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)) { String transformed = transformer.transform(str); if (transformed == null) { Translater.Warn("Very concerning, got null for non-null key " + str); return null; } cache.put(str, transformed); 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 { Translater.Log("Loading cache"); FileInputStream inS = new FileInputStream(cacheFile); cache.load(inS); inS.close(); } catch (IOException e) { e.printStackTrace(); } } else { Translater.Log("Initializing default cache"); //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.vanilla"); 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(); } } }