package fr.tikione.steam.cleaner.util.conf; import fr.tikione.ini.InfinitiveLoopException; import fr.tikione.ini.Ini; import fr.tikione.steam.cleaner.Main; import fr.tikione.steam.cleaner.util.Log; import java.io.CharConversionException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; /** * List of items patterns to exclude from the search path. */ public class DangerousItems { private static final DangerousItems dangerousItems; /** INI configuration file section : unchecked items. */ private static final String CONFIG_AUTOEXCLUDE_PATTERNS = "AUTOEXCLUDE_PATTERNS"; /** INI configuration file key : unchecked items. */ private static final String CONFIG_AUTOEXCLUDE_PATTERNS__FOLDERS_LIST = "folderPatterns"; /** Configuration object. */ private static Ini ini; static { // Singleton creation. try { dangerousItems = new DangerousItems(); } catch (IOException ex) { Log.error(ex); throw new RuntimeException(ex); } } /** * Get the configuration handler as a singleton. * * @return the configuration handler singleton. */ public static synchronized DangerousItems getInstance() { return dangerousItems; } /** * Load application configuration file. * * @throws IOException if an I/O error occurs while retrieving the internal default configuration file. */ private DangerousItems() throws IOException { ini = new Ini(); ini.getConfig().enableParseLineConcat(true); ini.getConfig().enableReadUnicodeEscConv(true); ini.load(new File("conf/tikione-steam-cleaner_dangerous-items.ini"), Main.CONF_ENCODING); } public List<Pattern> getDangerousFolders() throws CharConversionException, InfinitiveLoopException { List<Pattern> dangerousFolders = new ArrayList<>(16); String[] keys = ini.getKeyValue("", CONFIG_AUTOEXCLUDE_PATTERNS, CONFIG_AUTOEXCLUDE_PATTERNS__FOLDERS_LIST).split("\"", 0); for (String pattern : keys) { if (pattern.length() > 0) { try { dangerousFolders.add(Pattern.compile(pattern, Pattern.CASE_INSENSITIVE)); } catch (PatternSyntaxException ex) { Log.error(ex); } } } return dangerousFolders; } }