Well, if we check for a settings version, maybe we should set it too...
authorManuel Nickschas <sputnick@quassel-irc.org>
Thu, 22 Jan 2009 21:16:08 +0000 (22:16 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 22 Jan 2009 21:16:08 +0000 (22:16 +0100)
src/common/settings.cpp
src/common/settings.h
src/core/core.cpp
src/qtui/qtuiapplication.cpp

index 722be0e..f832f77 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "settings.h"
 
 
 #include "settings.h"
 
+const int VERSION = 1;
+
 QHash<QString, QHash<QString, QVariant> > Settings::settingsCache;
 QHash<QString, QHash<QString, SettingsChangeNotifier *> > Settings::settingsChangeNotifier;
 
 QHash<QString, QHash<QString, QVariant> > Settings::settingsCache;
 QHash<QString, QHash<QString, SettingsChangeNotifier *> > Settings::settingsChangeNotifier;
 
@@ -61,6 +63,18 @@ void Settings::notify(const QString &key, QObject *receiver, const char *slot) {
                   receiver, slot);
 }
 
                   receiver, slot);
 }
 
+uint Settings::version() {
+  // we don't cache this value, and we ignore the group
+  create_qsettings;
+  uint ver = s.value("Config/Version", 0).toUInt();
+  if(!ver) {
+    // No version, so create one
+    s.setValue("Config/Version", VERSION);
+    return VERSION;
+  }
+  return ver;
+}
+
 QStringList Settings::allLocalKeys() {
   create_qsettings;
   s.beginGroup(group);
 QStringList Settings::allLocalKeys() {
   create_qsettings;
   s.beginGroup(group);
index 627cb8a..26c8ead 100644 (file)
@@ -45,6 +45,7 @@ public:
 
 public:
   virtual void notify(const QString &key, QObject *receiver, const char *slot);
 
 public:
   virtual void notify(const QString &key, QObject *receiver, const char *slot);
+  virtual uint version();
 
 protected:
   inline Settings(QString group_, QString appName_) : group(group_), appName(appName_) {}
 
 protected:
   inline Settings(QString group_, QString appName_) : group(group_), appName(appName_) {}
index 9c92faf..38272e3 100644 (file)
@@ -71,7 +71,7 @@ Core::Core() : storage(0) {
     QSettings newSettings(newFilePath, format);
 #endif /* Q_WS_MAC */
 
     QSettings newSettings(newFilePath, format);
 #endif /* Q_WS_MAC */
 
-  if(newSettings.value("Config/Version").toUInt() != 1) {
+  if(newSettings.value("Config/Version").toUInt() == 0) {
     qWarning() << "\n\n*** IMPORTANT: Config and data file locations have changed. Attempting to auto-migrate your core settings...";
 #   ifdef Q_WS_MAC
     QString org = "quassel-irc.org";
     qWarning() << "\n\n*** IMPORTANT: Config and data file locations have changed. Attempting to auto-migrate your core settings...";
 #   ifdef Q_WS_MAC
     QString org = "quassel-irc.org";
@@ -122,6 +122,14 @@ Core::Core() : storage(0) {
 #endif /* !Q_WS_MAC */
   // MIGRATION end
 
 #endif /* !Q_WS_MAC */
   // MIGRATION end
 
+  // check settings version
+  // so far, we only have 1
+  CoreSettings s;
+  if(s.version() != 1) {
+    qCritical() << "Invalid core settings version, terminating!";
+    exit(EXIT_FAILURE);
+  }
+
   // Register storage backends here!
   registerStorageBackend(new SqliteStorage(this));
 
   // Register storage backends here!
   registerStorageBackend(new SqliteStorage(this));
 
index 0c7f922..8acead9 100644 (file)
@@ -29,6 +29,7 @@
 #include "client.h"
 #include "cliparser.h"
 #include "qtui.h"
 #include "client.h"
 #include "cliparser.h"
 #include "qtui.h"
+#include "qtuisettings.h"
 #include "sessionsettings.h"
 
 QtUiApplication::QtUiApplication(int &argc, char **argv)
 #include "sessionsettings.h"
 
 QtUiApplication::QtUiApplication(int &argc, char **argv)
@@ -81,7 +82,7 @@ bool QtUiApplication::init() {
     QSettings newSettings(newFilePath, format);
 #endif /* Q_WS_MAC */
 
     QSettings newSettings(newFilePath, format);
 #endif /* Q_WS_MAC */
 
-    if(newSettings.value("Config/Version").toUInt() != 1) {
+    if(newSettings.value("Config/Version").toUInt() == 0) {
       qWarning() << "\n\n*** IMPORTANT: Config and data file locations have changed. Attempting to auto-migrate your client settings...";
 #     ifdef Q_WS_MAC
         QString org = "quassel-irc.org";
       qWarning() << "\n\n*** IMPORTANT: Config and data file locations have changed. Attempting to auto-migrate your client settings...";
 #     ifdef Q_WS_MAC
         QString org = "quassel-irc.org";
@@ -100,6 +101,14 @@ bool QtUiApplication::init() {
 
     // MIGRATION end
 
 
     // MIGRATION end
 
+    // check settings version
+    // so far, we only have 1
+    QtUiSettings s;
+    if(s.version() != 1) {
+      qCritical() << "Invalid client settings version, terminating!";
+      return false;
+    }
+
     // session resume
     QtUi *gui = new QtUi();
     Client::init(gui);
     // session resume
     QtUi *gui = new QtUi();
     Client::init(gui);