X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsettings.cpp;fp=src%2Fcommon%2Fsettings.cpp;h=f0defb8d003d44aaa9728dac3b439889fc57740a;hp=8756ca6a96df88e298dd707bf71341071fb79486;hb=d2ac8f78a0e050d2efa397c434b249d6b3391576;hpb=b7cf37ec77eccfde8e515c6638ef8d996c71019f diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 8756ca6a..f0defb8d 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -22,7 +22,12 @@ #include "settings.h" -const int VERSION = 1; +const int VERSION = 1; /// Settings version for backwords/forwards incompatible changes + +// This is used if no VersionMinor key exists, e.g. upgrading from a Quassel version before this +// change. This shouldn't be increased from 1; instead, change the logic in Core::Core() and +// QtUiApplication::init() to handle upgrading and downgrading. +const int VERSION_MINOR_INITIAL = 1; /// Initial settings version for compatible changes QHash Settings::settingsCache; QHash Settings::settingsChangeNotifier; @@ -86,6 +91,36 @@ uint Settings::version() } +uint Settings::versionMinor() +{ + // Don't cache this value; ignore the group + create_qsettings; + // '0' means new configuration, anything else indicates an existing configuration. Application + // initialization should check this value and manage upgrades/downgrades, e.g. in Core::Core() + // and QtUiApplication::init(). + uint verMinor = s.value("Config/VersionMinor", 0).toUInt(); + + // As previous Quassel versions didn't implement this, we need to check if any settings other + // than Config/Version exist. If so, assume it's version 1. + if (verMinor == 0 && s.allKeys().count() > 1) { + // More than 1 key exists, but version's never been set. Assume and set version 1. + setVersionMinor(VERSION_MINOR_INITIAL); + return VERSION_MINOR_INITIAL; + } else { + return verMinor; + } +} + + +void Settings::setVersionMinor(const uint versionMinor) +{ + // Don't cache this value; ignore the group + create_qsettings; + // Set the value directly. + s.setValue("Config/VersionMinor", versionMinor); +} + + QStringList Settings::allLocalKeys() { create_qsettings; @@ -150,6 +185,16 @@ const QVariant &Settings::localValue(const QString &key, const QVariant &def) return cacheValue(normKey); } +bool Settings::localKeyExists(const QString &key) +{ + QString normKey = normalizedKey(group, key); + if (isCached(normKey)) + return true; + + create_qsettings; + return s.contains(normKey); +} + void Settings::removeLocalKey(const QString &key) {