diff --git a/velocity/src/main/java/fr/votenetwork/velocity/VoteConfig.java b/velocity/src/main/java/fr/votenetwork/velocity/VoteConfig.java index 1009b17..5d0b56f 100644 --- a/velocity/src/main/java/fr/votenetwork/velocity/VoteConfig.java +++ b/velocity/src/main/java/fr/votenetwork/velocity/VoteConfig.java @@ -79,18 +79,18 @@ public class VoteConfig { } /** - * Ajoute a la fin de config.properties les cles presentes dans le fichier par defaut du jar - * mais absentes du fichier existant (nouvelles options apportees par une mise a jour du - * plugin), sans jamais toucher aux lignes/valeurs deja presentes. Preserve donc aussi les - * commentaires existants (simple ajout de lignes, pas de reecriture complete). + * Ajoute a la fin de config.properties les blocs (commentaires + cle=valeur) du fichier par + * defaut du jar dont la cle est absente du fichier existant (nouvelles options apportees par + * une mise a jour du plugin), sans jamais toucher aux lignes/valeurs deja presentes. Copie le + * bloc entier tel quel (donc avec son explication en commentaire), pas juste "cle=valeur". */ private void mergeMissingConfigKeys(Path configFile) throws IOException { - Properties defaults = new Properties(); + String defaultsText; try (InputStream in = getClass().getClassLoader().getResourceAsStream("config.properties")) { if (in == null) { return; } - defaults.load(in); + defaultsText = new String(in.readAllBytes(), java.nio.charset.StandardCharsets.UTF_8); } Properties existing = new Properties(); @@ -98,16 +98,31 @@ public class VoteConfig { existing.load(in); } + String[] blocks = defaultsText.split("\\r?\\n\\s*\\r?\\n"); StringBuilder toAppend = new StringBuilder(); - for (String key : defaults.stringPropertyNames()) { - if (!existing.containsKey(key)) { - toAppend.append(key).append('=').append(defaults.getProperty(key)).append(System.lineSeparator()); + + for (String block : blocks) { + java.util.List keysInBlock = new java.util.ArrayList<>(); + for (String line : block.split("\\r?\\n")) { + String trimmed = line.trim(); + if (trimmed.isEmpty() || trimmed.startsWith("#")) { + continue; + } + int eq = trimmed.indexOf('='); + if (eq > 0) { + keysInBlock.add(trimmed.substring(0, eq).trim()); + } + } + + if (!keysInBlock.isEmpty() && keysInBlock.stream().noneMatch(existing::containsKey)) { + toAppend.append(block.stripTrailing()).append(System.lineSeparator()).append(System.lineSeparator()); } } if (toAppend.length() > 0) { String addition = System.lineSeparator() - + "# --- options ajoutees automatiquement par une mise a jour du plugin ---" + System.lineSeparator() + + "# --- nouvelles options ajoutees par une mise a jour du plugin (voir description ci-dessous) ---" + + System.lineSeparator() + System.lineSeparator() + toAppend; Files.writeString(configFile, addition, java.nio.file.StandardOpenOption.APPEND); logger.info("config.properties mis a jour avec les nouvelles options manquantes (valeurs existantes conservees).");