// config_updater.cpp — Universal INI config file updater #include "config_updater.h" #include #include bool config_update_option(const QString& filePath, const QString& section, const QString& param, const QString& value, int flags) { QStringList lines; QFile f(filePath); if (f.exists()) { if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) return false; QTextStream in(&f); while (!in.atEnd()) lines.append(in.readLine()); f.close(); } const QString sectionHdr = "[" + section + "]"; const QString newLine = param + "=" + value; int secIdx = -1; for (int i = 0; i < lines.size(); i++) { if (lines[i].trimmed() == sectionHdr) { secIdx = i; break; } } int secEnd = lines.size(); if (secIdx >= 0) { for (int i = secIdx + 1; i < lines.size(); i++) { if (lines[i].trimmed().startsWith('[')) { secEnd = i; break; } } } if (secIdx >= 0) { int ins = secEnd; while (ins > secIdx + 1 && lines[ins - 1].trimmed().isEmpty()) ins--; if (flags == CONFIG_UPDATE_REPLACE) { int paramIdx = -1; for (int i = secIdx + 1; i < secEnd; i++) { if (lines[i].trimmed().startsWith(param + "=")) { paramIdx = i; break; } } if (paramIdx >= 0) lines[paramIdx] = newLine; else lines.insert(ins, newLine); } else { lines.insert(ins, newLine); } } else { if (!lines.isEmpty() && !lines.last().trimmed().isEmpty()) lines.append(""); lines.append(sectionHdr); lines.append(newLine); } if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream out(&f); for (const QString& line : lines) out << line << "\n"; f.close(); return true; }