17SsuSettings::SsuSettings()
22SsuSettings::SsuSettings(
const QString &fileName, Format format, QObject *parent)
23 : QSettings(
Sandbox::map(fileName), format, parent)
27SsuSettings::SsuSettings(
const QString &fileName, Format format,
const QString &defaultFileName, QObject *parent)
28 : QSettings(
Sandbox::map(fileName), format, parent)
30 defaultSettingsFile = Sandbox::map(defaultFileName);
34SsuSettings::SsuSettings(
const QString &fileName,
const QString &settingsDirectory, QObject *parent)
35 : QSettings(
Sandbox::map(fileName), QSettings::IniFormat, parent)
37 settingsd = Sandbox::map(settingsDirectory);
41void SsuSettings::merge(
bool keepOld)
43 if (settingsd.isEmpty())
46 bool skipMerge =
true;
48 QDirIterator it(settingsd, QDir::AllEntries | QDir::NoDot | QDir::NoDotDot, QDirIterator::FollowSymlinks);
49 QStringList settingsFiles;
51 QFileInfo oldSettingsInfo(fileName());
53 while (it.hasNext()) {
54 QString f = it.next();
56 settingsFiles.append(it.filePath());
58 QFileInfo info(it.filePath());
59 if (info.lastModified() >= oldSettingsInfo.lastModified())
72 if (settingsFiles.count() > 0 && !keepOld)
75 merge(
this, settingsFiles);
79void SsuSettings::merge(QSettings *masterSettings,
const QStringList &settingsFiles)
81 SsuLog *ssuLog = SsuLog::instance();
83 foreach (
const QString &settingsFile, settingsFiles) {
84 QSettings settings(settingsFile, QSettings::IniFormat);
85 QStringList groups = settings.childGroups();
87 ssuLog->
print(LOG_DEBUG, QString(
"Merging %1 into %2")
89 .arg(masterSettings->fileName()));
91 foreach (
const QString &group, groups) {
92 masterSettings->beginGroup(group);
93 settings.beginGroup(group);
95 QStringList keys = settings.allKeys();
96 foreach (
const QString &key, keys) {
97 masterSettings->setValue(key, settings.value(key));
101 masterSettings->endGroup();
112void SsuSettings::upgrade()
114 if (defaultSettingsFile.isEmpty())
117 int configVersion = 0;
118 int defaultConfigVersion = 0;
120 SsuLog *ssuLog = SsuLog::instance();
122 QSettings defaultSettings(defaultSettingsFile, QSettings::IniFormat);
124 if (contains(
"configVersion"))
125 configVersion = value(
"configVersion").toInt();
126 if (defaultSettings.contains(
"configVersion"))
127 defaultConfigVersion = defaultSettings.value(
"configVersion").toInt();
129 if (configVersion < defaultConfigVersion) {
130 ssuLog->
print(LOG_DEBUG, QString(
"Configuration is outdated, updating from %1 to %2")
132 .arg(defaultConfigVersion));
134 for (
int i = configVersion + 1; i <= defaultConfigVersion; i++) {
135 QString currentSection = QString(
"%1/").arg(i);
137 ssuLog->
print(LOG_DEBUG, QString(
"Processing configuration version %1").arg(i));
138 defaultSettings.beginGroup(currentSection);
139 QStringList defaultKeys = defaultSettings.allKeys();
140 defaultSettings.endGroup();
142 foreach (
const QString &key, defaultKeys) {
144 if (key.compare(
"cmd-remove", Qt::CaseSensitive) == 0) {
146 QStringList oldKeys = defaultSettings.value(currentSection + key).toStringList();
147 foreach (
const QString &oldKey, oldKeys) {
148 if (contains(oldKey)) {
150 ssuLog->
print(LOG_DEBUG, QString(
"Removing old key: %1").arg(oldKey));
153 }
else if (!contains(key)) {
155 setValue(key, defaultSettings.value(currentSection + key));
156 ssuLog->
print(LOG_DEBUG, QString(
"Adding key: %1").arg(key));
162 for (
int j = i - 1; j > 0; j--) {
163 if (defaultSettings.contains(QString(
"%1/").arg(j) + key)) {
164 oldValue = defaultSettings.value(QString(
"%1/").arg(j) + key);
171 if (oldValue.isNull())
174 QVariant newValue = defaultSettings.value(currentSection + key);
175 if (oldValue == newValue) {
182 QVariant currentValue = value(key);
184 if (currentValue == oldValue) {
186 setValue(key, newValue);
187 ssuLog->
print(LOG_DEBUG, QString(
"Updating %1 from %2 to %3")
189 .arg(currentValue.toString())
190 .arg(newValue.toString()));
195 setValue(
"configVersion", i);
Helps to redirect file operations into sandbox directory.
void print(int priority, const QString &message)