lets try this again (Config fix) (#1159)

* Introducing a custom settings file

* formats

* chnages

* Update README.md

* fixes

---------

Co-authored-by: a <a>
This commit is contained in:
Anthony Stirling 2024-05-03 22:23:21 +01:00 committed by GitHub
parent 890163053b
commit 38979dd362
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 61 additions and 41 deletions

View File

@ -76,53 +76,76 @@ public class ConfigInitializer
Files.createFile(customSettingsPath);
}
}
private static Map<String, String> extractEntries(List<String> lines) {
Map<String, String> entries = new HashMap<>();
String keyRegex = "^\\s*(\\w+)\\s*:\\s*(.*)"; // Capture key and value
Pattern pattern = Pattern.compile(keyRegex);
StringBuilder currentEntry = new StringBuilder();
String currentKey = null;
int blockIndent = -1;
for (String line : lines) {
Matcher matcher = pattern.matcher(line);
if (matcher.find() && !line.trim().startsWith("#")) {
String key = matcher.group(1).trim();
String value = matcher.group(2).trim(); // Capture the value directly
entries.put(key, line);
if (line.trim().isEmpty()) {
if (currentKey != null) {
currentEntry.append(line).append("\n");
}
continue;
}
int indentLevel = getIndentationLevel(line);
if (line.trim().startsWith("#")) {
if (indentLevel <= blockIndent || blockIndent == -1) {
if (currentKey != null) {
entries.put(currentKey, currentEntry.toString().trim());
currentEntry = new StringBuilder();
}
currentKey = line.trim().replaceAll("#", "").split(":")[0].trim();
blockIndent = indentLevel;
}
currentEntry.append(line).append("\n");
} else if (indentLevel == 0 || indentLevel <= blockIndent) {
if (currentKey != null) {
entries.put(currentKey, currentEntry.toString().trim());
currentEntry = new StringBuilder();
}
currentKey = line.split(":")[0].trim();
blockIndent = indentLevel;
currentEntry.append(line).append("\n");
} else {
currentEntry.append(line).append("\n");
}
}
if (currentKey != null) {
entries.put(currentKey, currentEntry.toString().trim());
}
return entries;
}
private static List<String> mergeConfigs(
List<String> templateLines,
Map<String, String> templateEntries,
Map<String, String> userEntries) {
private static List<String> mergeConfigs(List<String> templateLines, Map<String, String> templateEntries, Map<String, String> userEntries) {
List<String> mergedLines = new ArrayList<>();
Set<String> handledKeys = new HashSet<>();
for (String line : templateLines) {
String cleanLine = line.split("#")[0].trim();
if (!cleanLine.isEmpty() && cleanLine.contains(":")) {
String key = cleanLine.split(":")[0].trim();
if (userEntries.containsKey(key)) {
// Always use user's entry if exists
mergedLines.add(userEntries.get(key));
handledKeys.add(key);
} else {
// Use template's entry if no user entry
mergedLines.add(line);
}
} else {
// Add comments and other lines directly
mergedLines.add(line);
}
}
String currentBlockKey = null;
int blockIndent = -1;
// Add user entries not present in the template at the end
for (String key : userEntries.keySet()) {
if (!handledKeys.contains(key)) {
mergedLines.add(userEntries.get(key));
for (String line : templateLines) {
if (line.trim().isEmpty()) {
mergedLines.add(line);
continue;
}
int indentLevel = getIndentationLevel(line);
if (indentLevel == 0 || (indentLevel <= blockIndent && !line.trim().startsWith("#"))) {
currentBlockKey = line.split(":")[0].trim();
blockIndent = indentLevel;
}
if (userEntries.containsKey(currentBlockKey) && !handledKeys.contains(currentBlockKey)) {
mergedLines.add(userEntries.get(currentBlockKey));
handledKeys.add(currentBlockKey);
} else if (!handledKeys.contains(currentBlockKey)) {
mergedLines.add(line);
}
}
@ -130,13 +153,13 @@ public class ConfigInitializer
}
private static List<String> cleanInvalidYamlEntries(List<String> lines) {
List<String> cleanedLines = new ArrayList<>();
for (int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
String trimmedLine = line.trim();
// Ignore commented lines and lines that don't look like key-only entries
if (trimmedLine.startsWith("#")
|| !trimmedLine.endsWith(":")
|| trimmedLine.contains(" ")) {
@ -144,10 +167,7 @@ public class ConfigInitializer
continue;
}
// For potential key-only lines, check the next line to determine context
if (isKeyWithoutChildrenOrValue(i, lines)) {
// Skip adding the current line since it's a key without any following value or
// children
continue;
}

View File

@ -21,10 +21,10 @@ system:
showUpdate: true # see when a new update is available
showUpdateOnlyAdmin: false # Only admins can see when a new update is available, depending on showUpdate it must be set to 'true'
#ui:
# appName: exampleAppName # Application's visible name
# homeDescription: I am a description # Short description or tagline shown on homepage.
# appNameNavbar: navbarName # Name displayed on the navigation bar
ui:
appName: null # Application's visible name
homeDescription: null # Short description or tagline shown on homepage.
appNameNavbar: null # Name displayed on the navigation bar
endpoints:
toRemove: [] # List endpoints to disable (e.g. ['img-to-pdf', 'remove-pages'])