The Networksettings are now stored purely in the Database.
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 11 Feb 2008 19:29:59 +0000 (19:29 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 11 Feb 2008 19:29:59 +0000 (19:29 +0000)
You can now rename networks and delete them.
Be warned: the latter one deletes everything associated with the
network including backlog.

62 files changed:
src/client/client.cpp
src/client/networkmodel.cpp
src/client/networkmodel.h
src/core/SQL/SQLite/4/setup_010_sender.sql [deleted file]
src/core/SQL/SQLite/4/setup_020_network.sql [deleted file]
src/core/SQL/SQLite/4/setup_080_version.sql [deleted file]
src/core/SQL/SQLite/4/upgrade_010_create_buffertable.sql
src/core/SQL/SQLite/5/delete_backlog_by_uid.sql [moved from src/core/SQL/SQLite/4/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/5/delete_backlog_for_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/delete_buffers_by_uid.sql [moved from src/core/SQL/SQLite/4/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/5/delete_buffers_for_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/delete_ircservers_for_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/delete_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/delete_networks_by_uid.sql [moved from src/core/SQL/SQLite/4/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/5/delete_quasseluser.sql [moved from src/core/SQL/SQLite/4/delete_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/5/insert_buffer.sql [moved from src/core/SQL/SQLite/4/insert_buffer.sql with 100% similarity]
src/core/SQL/SQLite/5/insert_message.sql [moved from src/core/SQL/SQLite/4/insert_message.sql with 100% similarity]
src/core/SQL/SQLite/5/insert_network.sql [moved from src/core/SQL/SQLite/4/insert_network.sql with 100% similarity]
src/core/SQL/SQLite/5/insert_quasseluser.sql [moved from src/core/SQL/SQLite/4/insert_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/5/insert_sender.sql [moved from src/core/SQL/SQLite/4/insert_sender.sql with 100% similarity]
src/core/SQL/SQLite/5/insert_server.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/select_authuser.sql [moved from src/core/SQL/SQLite/4/select_authuser.sql with 100% similarity]
src/core/SQL/SQLite/5/select_bufferByName.sql [moved from src/core/SQL/SQLite/4/select_bufferByName.sql with 100% similarity]
src/core/SQL/SQLite/5/select_buffers.sql [moved from src/core/SQL/SQLite/4/select_buffers.sql with 100% similarity]
src/core/SQL/SQLite/5/select_lastMessage.sql [moved from src/core/SQL/SQLite/4/select_lastMessage.sql with 100% similarity]
src/core/SQL/SQLite/5/select_messageRange.sql [moved from src/core/SQL/SQLite/4/select_messageRange.sql with 100% similarity]
src/core/SQL/SQLite/5/select_messages.sql [moved from src/core/SQL/SQLite/4/select_messages.sql with 100% similarity]
src/core/SQL/SQLite/5/select_messagesOffset.sql [moved from src/core/SQL/SQLite/4/select_messagesOffset.sql with 100% similarity]
src/core/SQL/SQLite/5/select_messagesSince.sql [moved from src/core/SQL/SQLite/4/select_messagesSince.sql with 100% similarity]
src/core/SQL/SQLite/5/select_messagesSinceOffset.sql [moved from src/core/SQL/SQLite/4/select_messagesSinceOffset.sql with 100% similarity]
src/core/SQL/SQLite/5/select_networkExists.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/select_networks_for_user.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/select_servers_for_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/select_userid.sql [moved from src/core/SQL/SQLite/4/select_userid.sql with 100% similarity]
src/core/SQL/SQLite/5/setup_000_quasseluser.sql [moved from src/core/SQL/SQLite/4/setup_000_quasseluser.sql with 80% similarity]
src/core/SQL/SQLite/5/setup_010_sender.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/setup_020_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/setup_030_buffer.sql [moved from src/core/SQL/SQLite/4/setup_030_buffer.sql with 71% similarity]
src/core/SQL/SQLite/5/setup_040_buffer_idx.sql [moved from src/core/SQL/SQLite/4/setup_040_buffer_idx.sql with 100% similarity]
src/core/SQL/SQLite/5/setup_050_buffer_cname_idx.sql [moved from src/core/SQL/SQLite/4/setup_050_buffer_cname_idx.sql with 100% similarity]
src/core/SQL/SQLite/5/setup_060_backlog.sql [moved from src/core/SQL/SQLite/4/setup_060_backlog.sql with 100% similarity]
src/core/SQL/SQLite/5/setup_070_coreinfo.sql [moved from src/core/SQL/SQLite/4/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/SQLite/5/setup_080_ircservers.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/setup_999_version.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/update_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/update_username.sql [moved from src/core/SQL/SQLite/4/update_username.sql with 100% similarity]
src/core/SQL/SQLite/5/update_userpassword.sql [moved from src/core/SQL/SQLite/4/update_userpassword.sql with 100% similarity]
src/core/SQL/SQLite/5/upgrade_000_rename_networktable.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/upgrade_010_create_newnetworktable.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/upgrade_020_copy_networktable.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/upgrade_180_create_ircservers.sql [new file with mode: 0644]
src/core/SQL/SQLite/5/upgrade_999_update_schemaversion.sql [new file with mode: 0644]
src/core/core.cpp
src/core/core.h
src/core/coresession.cpp
src/core/sql.qrc
src/core/sqlitestorage.cpp
src/core/sqlitestorage.h
src/core/storage.h
src/qtui/settingspages/networkssettingspage.cpp
version.inc

index 8cc0682..2ad6ffa 100644 (file)
@@ -76,6 +76,8 @@ void Client::init() {
   _networkModel = new NetworkModel(this);
   connect(this, SIGNAL(bufferUpdated(BufferInfo)),
           _networkModel, SLOT(bufferUpdated(BufferInfo)));
+  connect(this, SIGNAL(networkRemoved(NetworkId)),
+         _networkModel, SLOT(networkRemoved(NetworkId)));
 
   _bufferModel = new BufferModel(_networkModel);
 
index 52e5740..755a2c6 100644 (file)
@@ -592,7 +592,7 @@ Buffer *NetworkModel::getBufferByIndex(const QModelIndex &index) const {
 
 // experimental stuff :)
 QModelIndex NetworkModel::networkIndex(NetworkId networkId) {
-  return indexById(networkId.toInt());
+  return indexById(qHash(networkId));
 }
 
 NetworkItem *NetworkModel::existsNetworkItem(NetworkId networkId) {
@@ -611,12 +611,16 @@ NetworkItem *NetworkModel::networkItem(NetworkId networkId) {
   return netItem;
 }
 
+void NetworkModel::networkRemoved(const NetworkId &networkId) {
+  rootItem->removeChildById(qHash(networkId));
+}
+
 QModelIndex NetworkModel::bufferIndex(BufferId bufferId) {
   AbstractTreeItem *netItem, *bufferItem;
   for(int i = 0; i < rootItem->childCount(); i++) {
     netItem = rootItem->child(i);
-    if((bufferItem = netItem->childById(bufferId.toInt()))) {
-      return indexById(bufferItem->id(), networkIndex(netItem->id()));
+    if((bufferItem = netItem->childById(qHash(bufferId)))) {
+      return indexByItem(bufferItem);
     }
   }
   return QModelIndex();
@@ -719,11 +723,11 @@ bool NetworkModel::dropMimeData(const QMimeData *data, Qt::DropAction action, in
   if(bufferId == parent.data(BufferIdRole).value<BufferId>())
     return false; 
   
-  Q_ASSERT(rootItem->childById(netId.toInt()));
-  Q_ASSERT(rootItem->childById(netId.toInt())->childById(bufferId.toInt()));
+  Q_ASSERT(rootItem->childById(qHash(netId)));
+  Q_ASSERT(rootItem->childById(qHash(netId))->childById(qHash(bufferId)));
 
   // source must be a query too
-  BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(netId.toInt())->childById(bufferId.toInt())->data(0, BufferTypeRole).toInt();
+  BufferItem::Type sourceType = (BufferItem::Type)rootItem->childById(qHash(netId))->childById(qHash(bufferId))->data(0, BufferTypeRole).toInt();
   if(sourceType != BufferItem::QueryType)
     return false;
     
@@ -772,3 +776,4 @@ const Network *NetworkModel::networkByIndex(const QModelIndex &index) const {
   NetworkId networkId = netVariant.value<NetworkId>();
   return Client::network(networkId);
 }
+
index 244b99b..c3dbaf4 100644 (file)
@@ -254,7 +254,8 @@ public:
 public slots:
   void bufferUpdated(BufferInfo bufferInfo);
   void updateBufferActivity(const Message &msg);
-
+  void networkRemoved(const NetworkId &networkId);
+  
 private:
   QModelIndex networkIndex(NetworkId networkId);
   NetworkItem *networkItem(NetworkId networkId);
diff --git a/src/core/SQL/SQLite/4/setup_010_sender.sql b/src/core/SQL/SQLite/4/setup_010_sender.sql
deleted file mode 100644 (file)
index 66d5755..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-CREATE TABLE sender (
-       senderid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
-       sender TEXT UNIQUE NOT NULL)
-
-         
diff --git a/src/core/SQL/SQLite/4/setup_020_network.sql b/src/core/SQL/SQLite/4/setup_020_network.sql
deleted file mode 100644 (file)
index 9a84689..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-CREATE TABLE network (
-       networkid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
-       userid INTEGER NOT NULL,
-       networkname TEXT NOT NULL,
-       UNIQUE (userid, networkname))
diff --git a/src/core/SQL/SQLite/4/setup_080_version.sql b/src/core/SQL/SQLite/4/setup_080_version.sql
deleted file mode 100644 (file)
index 8cc4cdc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '4')
index ee5adc9..9954c58 100644 (file)
@@ -4,5 +4,5 @@ CREATE TABLE buffer (
        groupid INTEGER,
        networkid INTEGER NOT NULL,
        buffername TEXT NOT NULL,
-       buffercname TEXT NOT NULL
+       buffercname TEXT NOT NULL -- CANONICAL BUFFER NAME (lowercase version)
 )
\ No newline at end of file
diff --git a/src/core/SQL/SQLite/5/delete_backlog_for_network.sql b/src/core/SQL/SQLite/5/delete_backlog_for_network.sql
new file mode 100644 (file)
index 0000000..07a893f
--- /dev/null
@@ -0,0 +1,2 @@
+DELETE FROM backlog
+WHERE bufferid IN (SELECT bufferid FROM buffer WHERE networkid = :networkid)
diff --git a/src/core/SQL/SQLite/5/delete_buffers_for_network.sql b/src/core/SQL/SQLite/5/delete_buffers_for_network.sql
new file mode 100644 (file)
index 0000000..9b9ccdb
--- /dev/null
@@ -0,0 +1,2 @@
+DELETE FROM buffer
+WHERE networkid = :networkid
diff --git a/src/core/SQL/SQLite/5/delete_ircservers_for_network.sql b/src/core/SQL/SQLite/5/delete_ircservers_for_network.sql
new file mode 100644 (file)
index 0000000..c74e597
--- /dev/null
@@ -0,0 +1,2 @@
+DELETE FROM ircserver
+WHERE networkid = :networkid
diff --git a/src/core/SQL/SQLite/5/delete_network.sql b/src/core/SQL/SQLite/5/delete_network.sql
new file mode 100644 (file)
index 0000000..7200ee4
--- /dev/null
@@ -0,0 +1,2 @@
+DELETE FROM network
+WHERE networkid = :networkid
diff --git a/src/core/SQL/SQLite/5/insert_server.sql b/src/core/SQL/SQLite/5/insert_server.sql
new file mode 100644 (file)
index 0000000..1a1d4bc
--- /dev/null
@@ -0,0 +1,2 @@
+INSERT INTO ircserver (userid, networkid, hostname, port, password, ssl)
+VALUES (:userid, :networkid, :hostname, :port, :password, :ssl)
diff --git a/src/core/SQL/SQLite/5/select_networkExists.sql b/src/core/SQL/SQLite/5/select_networkExists.sql
new file mode 100644 (file)
index 0000000..ce11c53
--- /dev/null
@@ -0,0 +1,3 @@
+SELECT networkname
+FROM network
+WHERE userid = :userid AND networkid = :networkid
diff --git a/src/core/SQL/SQLite/5/select_networks_for_user.sql b/src/core/SQL/SQLite/5/select_networks_for_user.sql
new file mode 100644 (file)
index 0000000..ff6d801
--- /dev/null
@@ -0,0 +1,5 @@
+SELECT networkid, networkname, identityid, usecustomencoding, encodingcodec, decodingcodec,
+       userandomserver, perform, useautoidentify, autoidentifyservice, autoidentifypassword,
+       useautoreconnect, autoreconnectinterval, autoreconnectretries, rejoinchannels
+FROM network
+WHERE userid = :userid
\ No newline at end of file
diff --git a/src/core/SQL/SQLite/5/select_servers_for_network.sql b/src/core/SQL/SQLite/5/select_servers_for_network.sql
new file mode 100644 (file)
index 0000000..a8fb64f
--- /dev/null
@@ -0,0 +1,3 @@
+SELECT hostname, port, password, ssl
+FROM ircserver
+WHERE networkid = :networkid
@@ -1,6 +1,7 @@
 CREATE TABLE quasseluser (
        userid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        username TEXT UNIQUE NOT NULL,
-       password BLOB NOT NULL)
+       password BLOB NOT NULL
+)
 
          
diff --git a/src/core/SQL/SQLite/5/setup_010_sender.sql b/src/core/SQL/SQLite/5/setup_010_sender.sql
new file mode 100644 (file)
index 0000000..4e7251e
--- /dev/null
@@ -0,0 +1,6 @@
+CREATE TABLE sender ( -- THE SENDER OF IRC MESSAGES
+       senderid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+       sender TEXT UNIQUE NOT NULL
+)
+
+         
diff --git a/src/core/SQL/SQLite/5/setup_020_network.sql b/src/core/SQL/SQLite/5/setup_020_network.sql
new file mode 100644 (file)
index 0000000..33a6fb8
--- /dev/null
@@ -0,0 +1,19 @@
+CREATE TABLE network (
+       networkid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+       userid INTEGER NOT NULL,
+       networkname TEXT NOT NULL,
+       identityid INTEGER NOT NULL DEFAULT 1,
+       usecustomencoding INTEGER NOT NULL DEFAULT 0, -- BOOL
+       encodingcodec TEXT NOT NULL DEFAULT "ISO-8859-15",
+       decodingcodec TEXT NOT NULL DEFAULT "ISO-8859-15",
+       userandomserver INTEGER NOT NULL DEFAULT 0, -- BOOL
+       perform TEXT,
+       useautoidentify INTEGER NOT NULL DEFAULT 0, -- BOOL
+       autoidentifyservice TEXT,
+       autoidentifypassword TEXT,
+       useautoreconnect INTEGER NOT NULL DEFAULT 0, -- BOOL
+       autoreconnectinterval INTEGER NOT NULL DEFAULT 0,
+       autoreconnectretries INTEGER NOT NULL DEFAULT 0,
+       rejoinchannels INTEGER NOT NULL DEFAULT 0, -- BOOL
+       UNIQUE (userid, networkname)
+)
similarity index 71%
rename from src/core/SQL/SQLite/4/setup_030_buffer.sql
rename to src/core/SQL/SQLite/5/setup_030_buffer.sql
index 9a118ff..4387d5a 100644 (file)
@@ -4,5 +4,5 @@ CREATE TABLE buffer (
        groupid INTEGER,
        networkid INTEGER NOT NULL,
        buffername TEXT NOT NULL,
-       buffercname TEXT NOT NULL
+       buffercname TEXT NOT NULL -- CANONICAL BUFFER NAME (lowercase version)
 )
diff --git a/src/core/SQL/SQLite/5/setup_080_ircservers.sql b/src/core/SQL/SQLite/5/setup_080_ircservers.sql
new file mode 100644 (file)
index 0000000..89a1698
--- /dev/null
@@ -0,0 +1,9 @@
+CREATE TABLE ircserver (
+    serverid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+    userid INTEGER NOT NULL,
+    networkid INTEGER NOT NULL,
+    hostname TEXT NOT NULL,
+    port INTEGER NOT NULL DEFAULT 6667,
+    password TEXT,
+    ssl INTEGER NOT NULL DEFAULT 0
+)
diff --git a/src/core/SQL/SQLite/5/setup_999_version.sql b/src/core/SQL/SQLite/5/setup_999_version.sql
new file mode 100644 (file)
index 0000000..1199051
--- /dev/null
@@ -0,0 +1 @@
+INSERT INTO coreinfo (key, value) VALUES ('schemaversion', '5')
diff --git a/src/core/SQL/SQLite/5/update_network.sql b/src/core/SQL/SQLite/5/update_network.sql
new file mode 100644 (file)
index 0000000..41c0da3
--- /dev/null
@@ -0,0 +1,16 @@
+UPDATE network SET
+networkname = :networkname,
+identityid = :identityid,
+usecustomencoding = :usecustomencoding,
+encodingcodec = :encodingcodec,
+decodingcodec = :decodingcodec,
+userandomserver = :userandomserver,
+perform = :perform,
+useautoidentify = :useautoidentify,
+autoidentifyservice = :autoidentifyservice,
+autoidentifypassword = :autoidentifypassword,
+useautoreconnect = :useautoreconnect,
+autoreconnectinterval = :autoreconnectinterval,
+autoreconnectretries = :autoreconnectretries,
+rejoinchannels = :rejoinchannels
+WHERE networkid = :networkid
diff --git a/src/core/SQL/SQLite/5/upgrade_000_rename_networktable.sql b/src/core/SQL/SQLite/5/upgrade_000_rename_networktable.sql
new file mode 100644 (file)
index 0000000..0dc9ef4
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE network RENAME TO networkold
diff --git a/src/core/SQL/SQLite/5/upgrade_010_create_newnetworktable.sql b/src/core/SQL/SQLite/5/upgrade_010_create_newnetworktable.sql
new file mode 100644 (file)
index 0000000..33a6fb8
--- /dev/null
@@ -0,0 +1,19 @@
+CREATE TABLE network (
+       networkid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+       userid INTEGER NOT NULL,
+       networkname TEXT NOT NULL,
+       identityid INTEGER NOT NULL DEFAULT 1,
+       usecustomencoding INTEGER NOT NULL DEFAULT 0, -- BOOL
+       encodingcodec TEXT NOT NULL DEFAULT "ISO-8859-15",
+       decodingcodec TEXT NOT NULL DEFAULT "ISO-8859-15",
+       userandomserver INTEGER NOT NULL DEFAULT 0, -- BOOL
+       perform TEXT,
+       useautoidentify INTEGER NOT NULL DEFAULT 0, -- BOOL
+       autoidentifyservice TEXT,
+       autoidentifypassword TEXT,
+       useautoreconnect INTEGER NOT NULL DEFAULT 0, -- BOOL
+       autoreconnectinterval INTEGER NOT NULL DEFAULT 0,
+       autoreconnectretries INTEGER NOT NULL DEFAULT 0,
+       rejoinchannels INTEGER NOT NULL DEFAULT 0, -- BOOL
+       UNIQUE (userid, networkname)
+)
diff --git a/src/core/SQL/SQLite/5/upgrade_020_copy_networktable.sql b/src/core/SQL/SQLite/5/upgrade_020_copy_networktable.sql
new file mode 100644 (file)
index 0000000..975018b
--- /dev/null
@@ -0,0 +1,2 @@
+INSERT INTO network (networkid, userid, networkname)
+SELECT networkid, userid, networkname FROM networkold;
diff --git a/src/core/SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql b/src/core/SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql
new file mode 100644 (file)
index 0000000..9073c43
--- /dev/null
@@ -0,0 +1 @@
+DROP TABLE networkold
diff --git a/src/core/SQL/SQLite/5/upgrade_180_create_ircservers.sql b/src/core/SQL/SQLite/5/upgrade_180_create_ircservers.sql
new file mode 100644 (file)
index 0000000..3afca5e
--- /dev/null
@@ -0,0 +1,9 @@
+CREATE TABLE ircserver (
+    serverid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+    userid INTEGER NOT NULL,
+    networkid INTEGER NOT NULL,
+    hostname TEXT NOT NULL,
+    port INTEGER NOT NULL DEFAULT 6667,
+    password TEXT,
+    ssl INTEGER NOT NULL DEFAULT 0 -- BOOL 
+)
diff --git a/src/core/SQL/SQLite/5/upgrade_999_update_schemaversion.sql b/src/core/SQL/SQLite/5/upgrade_999_update_schemaversion.sql
new file mode 100644 (file)
index 0000000..1606e17
--- /dev/null
@@ -0,0 +1,3 @@
+UPDATE coreinfo
+SET value='5'
+WHERE key = 'schemaversion'
index e03543d..407eac8 100644 (file)
@@ -205,9 +205,9 @@ void Core::syncStorage() {
 }
 
 /*** Storage Access ***/
-bool Core::createNetworkId(UserId user, NetworkInfo &info) {
+bool Core::createNetwork(UserId user, NetworkInfo &info) {
   QMutexLocker locker(&mutex);
-  NetworkId networkId = instance()->storage->createNetworkId(user, info);
+  NetworkId networkId = instance()->storage->createNetwork(user, info);
   if(!networkId.isValid())
     return false;
 
@@ -215,6 +215,21 @@ bool Core::createNetworkId(UserId user, NetworkInfo &info) {
   return true;
 }
 
+bool Core::updateNetwork(UserId user, const NetworkInfo &info) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->updateNetwork(user, info);
+}
+
+bool Core::removeNetwork(UserId user, const NetworkId &networkId) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->removeNetwork(user, networkId);
+}
+
+QList<NetworkInfo> Core::networks(UserId user) {
+  QMutexLocker locker(&mutex);
+  return instance()->storage->networks(user);
+}
+
 NetworkId Core::networkId(UserId user, const QString &network) {
   QMutexLocker locker(&mutex);
   return instance()->storage->getNetworkId(user, network);
index 6b0126c..7f1f9c2 100644 (file)
@@ -53,15 +53,41 @@ class Core : public QObject {
     /*** Storage access ***/
     // These methods are threadsafe.
 
-    //! Create a NetworkId in the Storage and store it in the given NetworkInfo
+    //! Create a Network in the Storage and store it's Id in the given NetworkInfo
     /** \note This method is thredsafe.
      *
      *  \param user        The core user
      *  \param networkInfo a NetworkInfo definition to store the newly created ID in
      *  \return true if successfull.
      */
-    static bool createNetworkId(UserId user, NetworkInfo &info);
+    static bool createNetwork(UserId user, NetworkInfo &info);
        
+    //! Apply the changes to NetworkInfo info to the storage engine
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \param networkInfo The Updated NetworkInfo
+     *  \return true if successfull.
+     */
+    static bool updateNetwork(UserId user, const NetworkInfo &info);
+
+    //! Permanently remove a Network and all the data associated with it.
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \param networkId   The network to delete
+     *  \return true if successfull.
+     */
+    static bool removeNetwork(UserId user, const NetworkId &networkId);
+  
+    //! Returns a list of all NetworkInfos for the given UserId user
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \return QList<NetworkInfo>.
+     */
+    static QList<NetworkInfo> networks(UserId user);
+
     //! Get the NetworkId for a network name.
     /** \note This method is threadsafe.
      *
index 8e66738..33aeae8 100644 (file)
@@ -128,38 +128,21 @@ void CoreSession::loadSettings() {
     createIdentity(i);
   }
 
-  // FIXME switch to a pure DB storage
-  foreach(NetworkId id, s.networkIds()) {
-    NetworkInfo info = s.networkInfo(id);
-    createNetwork(info);
-  }
 
-  // FIXME Migrate old settings if available...
-  if(!_networks.count()) {
-    QVariantMap networks = s.sessionValue("Networks").toMap();
-    if(networks.keys().count()) {
-      qWarning() << "Migrating your old network settings to the new format!";
-      foreach(QString netname, networks.keys()) {
-        QVariantMap network = networks[netname].toMap();
-        NetworkId netid = Core::networkId(user(), netname);
-        NetworkInfo info;
-        info.networkId = netid;
-        info.networkName = netname;
-        info.identity = 1;
-        info.codecForEncoding = "ISO-8859-15";
-        info.codecForDecoding = "ISO-8859-15";
-        QVariantList slist;
-        foreach(QVariant v, network["Servers"].toList()) {
-          QVariantMap server;
-          server["Host"] = v.toMap()["Address"];
-          server["Port"] = v.toMap()["Port"];
-          slist << server;
-        }
-        info.serverList = slist;
-        createNetwork(info);
-      }
+  // migration to pure DB storage
+  QList<NetworkId> netIds = s.networkIds();
+  if(!netIds.isEmpty()) {
+    qDebug() << "Migrating Networksettings to DB Storage for User:" << user();
+    foreach(NetworkId id, netIds) {
+      NetworkInfo info = s.networkInfo(id);
+      Core::updateNetwork(user(), info);
+      s.removeNetworkInfo(id);
     }
   }
+
+  foreach(NetworkInfo info, Core::networks(user())) {
+    createNetwork(info);
+  }
 }
 
 void CoreSession::saveSessionState() const {
@@ -419,7 +402,7 @@ void CoreSession::createNetwork(const NetworkInfo &info_) {
   int id;
 
   if(!info.networkId.isValid())
-    Core::createNetworkId(user(), info);
+    Core::createNetwork(user(), info);
 
   Q_ASSERT(info.networkId.isValid());
 
@@ -433,8 +416,6 @@ void CoreSession::createNetwork(const NetworkInfo &info_) {
   net->setProxy(signalProxy());
   _networks[id] = net;
   signalProxy()->synchronize(net);
-  CoreUserSettings s(user());
-  s.storeNetworkInfo(info);
   emit networkCreated(id);
 }
 
@@ -444,16 +425,13 @@ void CoreSession::updateNetwork(const NetworkInfo &info) {
     return;
   }
   _networks[info.networkId]->setNetworkInfo(info);
-  CoreUserSettings s(user());
-  s.storeNetworkInfo(info);
+  Core::updateNetwork(user(), info);
 }
 
 void CoreSession::removeNetwork(NetworkId id) {
   Network *net = _networks.take(id);
-  if(net) {
+  if(net && Core::removeNetwork(user(), id)) {
     emit networkRemoved(id);
-    CoreUserSettings s(user());
-    s.removeNetworkInfo(id);
     net->deleteLater();
   }
 }
index 7b75c7e..be8a434 100644 (file)
@@ -7,36 +7,6 @@
     <file>./SQL/SQLite/2/upgrade_010_update_schemaversion.sql</file>
     <file>./SQL/SQLite/3/upgrade_000_update_backlog_flags.sql</file>
     <file>./SQL/SQLite/3/upgrade_010_update_schemaversion.sql</file>
-    <file>./SQL/SQLite/4/delete_backlog_by_uid.sql</file>
-    <file>./SQL/SQLite/4/delete_buffers_by_uid.sql</file>
-    <file>./SQL/SQLite/4/delete_networks_by_uid.sql</file>
-    <file>./SQL/SQLite/4/delete_quasseluser.sql</file>
-    <file>./SQL/SQLite/4/insert_buffer.sql</file>
-    <file>./SQL/SQLite/4/insert_message.sql</file>
-    <file>./SQL/SQLite/4/insert_network.sql</file>
-    <file>./SQL/SQLite/4/insert_quasseluser.sql</file>
-    <file>./SQL/SQLite/4/insert_sender.sql</file>
-    <file>./SQL/SQLite/4/select_authuser.sql</file>
-    <file>./SQL/SQLite/4/select_bufferByName.sql</file>
-    <file>./SQL/SQLite/4/select_buffers.sql</file>
-    <file>./SQL/SQLite/4/select_lastMessage.sql</file>
-    <file>./SQL/SQLite/4/select_messageRange.sql</file>
-    <file>./SQL/SQLite/4/select_messages.sql</file>
-    <file>./SQL/SQLite/4/select_messagesOffset.sql</file>
-    <file>./SQL/SQLite/4/select_messagesSince.sql</file>
-    <file>./SQL/SQLite/4/select_messagesSinceOffset.sql</file>
-    <file>./SQL/SQLite/4/select_userid.sql</file>
-    <file>./SQL/SQLite/4/setup_000_quasseluser.sql</file>
-    <file>./SQL/SQLite/4/setup_010_sender.sql</file>
-    <file>./SQL/SQLite/4/setup_020_network.sql</file>
-    <file>./SQL/SQLite/4/setup_030_buffer.sql</file>
-    <file>./SQL/SQLite/4/setup_040_buffer_idx.sql</file>
-    <file>./SQL/SQLite/4/setup_050_buffer_cname_idx.sql</file>
-    <file>./SQL/SQLite/4/setup_060_backlog.sql</file>
-    <file>./SQL/SQLite/4/setup_070_coreinfo.sql</file>
-    <file>./SQL/SQLite/4/setup_080_version.sql</file>
-    <file>./SQL/SQLite/4/update_username.sql</file>
-    <file>./SQL/SQLite/4/update_userpassword.sql</file>
     <file>./SQL/SQLite/4/upgrade_000_rename_buffertable.sql</file>
     <file>./SQL/SQLite/4/upgrade_010_create_buffertable.sql</file>
     <file>./SQL/SQLite/4/upgrade_020_copy_buffertable.sql</file>
     <file>./SQL/SQLite/4/upgrade_040_create_buffer_idx.sql</file>
     <file>./SQL/SQLite/4/upgrade_050_create_buffer_cname_idx.sql</file>
     <file>./SQL/SQLite/4/upgrade_999_update_schemaversion.sql</file>
+    <file>./SQL/SQLite/5/delete_backlog_by_uid.sql</file>
+    <file>./SQL/SQLite/5/delete_backlog_for_network.sql</file>
+    <file>./SQL/SQLite/5/delete_buffers_by_uid.sql</file>
+    <file>./SQL/SQLite/5/delete_buffers_for_network.sql</file>
+    <file>./SQL/SQLite/5/delete_ircservers_for_network.sql</file>
+    <file>./SQL/SQLite/5/delete_network.sql</file>
+    <file>./SQL/SQLite/5/delete_networks_by_uid.sql</file>
+    <file>./SQL/SQLite/5/delete_quasseluser.sql</file>
+    <file>./SQL/SQLite/5/insert_buffer.sql</file>
+    <file>./SQL/SQLite/5/insert_message.sql</file>
+    <file>./SQL/SQLite/5/insert_network.sql</file>
+    <file>./SQL/SQLite/5/insert_quasseluser.sql</file>
+    <file>./SQL/SQLite/5/insert_sender.sql</file>
+    <file>./SQL/SQLite/5/insert_server.sql</file>
+    <file>./SQL/SQLite/5/select_authuser.sql</file>
+    <file>./SQL/SQLite/5/select_bufferByName.sql</file>
+    <file>./SQL/SQLite/5/select_buffers.sql</file>
+    <file>./SQL/SQLite/5/select_lastMessage.sql</file>
+    <file>./SQL/SQLite/5/select_messageRange.sql</file>
+    <file>./SQL/SQLite/5/select_messages.sql</file>
+    <file>./SQL/SQLite/5/select_messagesOffset.sql</file>
+    <file>./SQL/SQLite/5/select_messagesSince.sql</file>
+    <file>./SQL/SQLite/5/select_messagesSinceOffset.sql</file>
+    <file>./SQL/SQLite/5/select_networkExists.sql</file>
+    <file>./SQL/SQLite/5/select_networks_for_user.sql</file>
+    <file>./SQL/SQLite/5/select_servers_for_network.sql</file>
+    <file>./SQL/SQLite/5/select_userid.sql</file>
+    <file>./SQL/SQLite/5/setup_000_quasseluser.sql</file>
+    <file>./SQL/SQLite/5/setup_010_sender.sql</file>
+    <file>./SQL/SQLite/5/setup_020_network.sql</file>
+    <file>./SQL/SQLite/5/setup_030_buffer.sql</file>
+    <file>./SQL/SQLite/5/setup_040_buffer_idx.sql</file>
+    <file>./SQL/SQLite/5/setup_050_buffer_cname_idx.sql</file>
+    <file>./SQL/SQLite/5/setup_060_backlog.sql</file>
+    <file>./SQL/SQLite/5/setup_070_coreinfo.sql</file>
+    <file>./SQL/SQLite/5/setup_080_ircservers.sql</file>
+    <file>./SQL/SQLite/5/setup_999_version.sql</file>
+    <file>./SQL/SQLite/5/update_network.sql</file>
+    <file>./SQL/SQLite/5/update_username.sql</file>
+    <file>./SQL/SQLite/5/update_userpassword.sql</file>
+    <file>./SQL/SQLite/5/upgrade_000_rename_networktable.sql</file>
+    <file>./SQL/SQLite/5/upgrade_010_create_newnetworktable.sql</file>
+    <file>./SQL/SQLite/5/upgrade_020_copy_networktable.sql</file>
+    <file>./SQL/SQLite/5/upgrade_030_drop_oldnetworktable.sql</file>
+    <file>./SQL/SQLite/5/upgrade_180_create_ircservers.sql</file>
+    <file>./SQL/SQLite/5/upgrade_999_update_schemaversion.sql</file>
 </qresource>
 </RCC>
index a20640c..893fbcd 100644 (file)
@@ -141,7 +141,7 @@ void SqliteStorage::delUser(UserId user) {
   emit userRemoved(user);
 }
 
-NetworkId SqliteStorage::createNetworkId(UserId user, const NetworkInfo &info) {
+NetworkId SqliteStorage::createNetwork(UserId user, const NetworkInfo &info) {
   NetworkId networkId;
   QSqlQuery query(logDb());
   query.prepare(queryString("insert_network"));
@@ -152,10 +152,187 @@ NetworkId SqliteStorage::createNetworkId(UserId user, const NetworkInfo &info) {
   networkId = getNetworkId(user, info.networkName);
   if(!networkId.isValid()) {
     watchQuery(&query);
+  } else {
+    updateNetwork(user, info);
   }
   return networkId;
 }
 
+bool SqliteStorage::updateNetwork(UserId user, const NetworkInfo &info) {
+  if(!isValidNetwork(user, info.networkId))
+     return false;
+  
+  QSqlQuery updateQuery(logDb());
+  updateQuery.prepare(queryString("update_network"));
+  updateQuery.bindValue(":networkname", info.networkName);
+  updateQuery.bindValue(":identityid", info.identity.toInt());
+  updateQuery.bindValue(":usecustomencoding", info.useCustomEncodings ? 1 : 0);
+  updateQuery.bindValue(":encodingcodec", QString(info.codecForEncoding));
+  updateQuery.bindValue(":decodingcodec", QString(info.codecForDecoding));
+  updateQuery.bindValue(":userandomserver", info.useRandomServer ? 1 : 0);
+  updateQuery.bindValue(":perform", info.perform.join("\n"));
+  updateQuery.bindValue(":useautoidentify", info.useAutoIdentify ? 1 : 0);
+  updateQuery.bindValue(":autoidentifyservice", info.autoIdentifyService);
+  updateQuery.bindValue(":autoidentifypassword", info.autoIdentifyPassword);
+  updateQuery.bindValue(":useautoreconnect", info.useAutoReconnect ? 1 : 0);
+  updateQuery.bindValue(":autoreconnectinterval", info.autoReconnectInterval);
+  updateQuery.bindValue(":autoreconnectretries", info.autoReconnectRetries);
+  updateQuery.bindValue(":rejoinchannels", info.rejoinChannels ? 1 : 0);
+  updateQuery.bindValue(":networkid", info.networkId.toInt());
+  updateQuery.exec();
+  if(!watchQuery(&updateQuery))
+    return false;
+
+  QSqlQuery dropServersQuery(logDb());
+  dropServersQuery.prepare("DELETE FROM ircserver WHERE networkid = :networkid");
+  dropServersQuery.bindValue(":networkid", info.networkId.toInt());
+  dropServersQuery.exec();
+  if(!watchQuery(&dropServersQuery))
+    return false;
+
+  QSqlQuery insertServersQuery(logDb());
+  insertServersQuery.prepare(queryString("insert_server"));
+  foreach(QVariant server_, info.serverList) {
+    QVariantMap server = server_.toMap();
+    insertServersQuery.bindValue(":hostname", server["Host"]);
+    insertServersQuery.bindValue(":port", server["Port"].toInt());
+    insertServersQuery.bindValue(":password", server["Password"]);
+    insertServersQuery.bindValue(":ssl", server["UseSSL"].toBool() ? 1 : 0);
+    insertServersQuery.bindValue(":userid", user.toInt());
+    insertServersQuery.bindValue(":networkid", info.networkId.toInt());
+
+    insertServersQuery.exec();
+    if(!watchQuery(&insertServersQuery))
+      return false;
+  }
+  
+  return true;
+}
+
+bool SqliteStorage::removeNetwork(UserId user, const NetworkId &networkId) {
+  if(!isValidNetwork(user, networkId))
+     return false;
+
+  bool withTransaction = logDb().driver()->hasFeature(QSqlDriver::Transactions);
+  if(withTransaction) {
+    sync();
+    if(!logDb().transaction()) {
+      qWarning() << "SqliteStorage::removeNetwork(): cannot start transaction. continuing with out rollback support!";
+      withTransaction = false;
+    }
+  }
+  
+  QSqlQuery deleteBacklogQuery(logDb());
+  deleteBacklogQuery.prepare(queryString("delete_backlog_for_network"));
+  deleteBacklogQuery.bindValue(":networkid", networkId.toInt());
+  deleteBacklogQuery.exec();
+  if(!watchQuery(&deleteBacklogQuery)) {
+    if(withTransaction)
+      logDb().rollback();
+    return false;
+  }
+  
+  QSqlQuery deleteBuffersQuery(logDb());
+  deleteBuffersQuery.prepare(queryString("delete_buffers_for_network"));
+  deleteBuffersQuery.bindValue(":networkid", networkId.toInt());
+  deleteBuffersQuery.exec();
+  if(!watchQuery(&deleteBuffersQuery)) {
+    if(withTransaction)
+      logDb().rollback();
+    return false;
+  }
+  
+  QSqlQuery deleteServersQuery(logDb());
+  deleteServersQuery.prepare(queryString("delete_ircservers_for_network"));
+  deleteServersQuery.bindValue(":networkid", networkId.toInt());
+  deleteServersQuery.exec();
+  if(!watchQuery(&deleteServersQuery)) {
+    if(withTransaction)
+      logDb().rollback();
+    return false;
+  }
+  
+  QSqlQuery deleteNetworkQuery(logDb());
+  deleteNetworkQuery.prepare(queryString("delete_network"));
+  deleteNetworkQuery.bindValue(":networkid", networkId.toInt());
+  deleteNetworkQuery.exec();
+  if(!watchQuery(&deleteNetworkQuery)) {
+    if(withTransaction)
+      logDb().rollback();
+    return false;
+  }
+
+  logDb().commit();
+  return true;
+}
+
+QList<NetworkInfo> SqliteStorage::networks(UserId user) {
+  QList<NetworkInfo> nets;
+
+  QSqlQuery networksQuery(logDb());
+  networksQuery.prepare(queryString("select_networks_for_user"));
+  networksQuery.bindValue(":userid", user.toInt());
+  
+  QSqlQuery serversQuery(logDb());
+  serversQuery.prepare(queryString("select_servers_for_network"));
+
+  networksQuery.exec();
+  if(!watchQuery(&networksQuery))
+    return nets;
+
+  while(networksQuery.next()) {
+    NetworkInfo net;
+    net.networkId = networksQuery.value(0).toInt();
+    net.networkName = networksQuery.value(1).toString();
+    net.identity = networksQuery.value(2).toInt();
+    net.useCustomEncodings = networksQuery.value(3).toInt() == 1 ? true : false;
+    net.codecForEncoding = networksQuery.value(4).toString().toAscii();
+    net.codecForDecoding = networksQuery.value(5).toString().toAscii();
+    net.useRandomServer = networksQuery.value(6).toInt() == 1 ? true : false;
+    net.perform = networksQuery.value(7).toString().split("\n");
+    net.useAutoIdentify = networksQuery.value(8).toInt() == 1 ? true : false;
+    net.autoIdentifyService = networksQuery.value(9).toString();
+    net.autoIdentifyPassword = networksQuery.value(10).toString();
+    net.useAutoReconnect = networksQuery.value(11).toInt() == 1 ? true : false;
+    net.autoReconnectInterval = networksQuery.value(12).toUInt();
+    net.autoReconnectRetries = networksQuery.value(13).toInt();
+    net.rejoinChannels = networksQuery.value(14).toInt() == 1 ? true : false;
+
+    serversQuery.bindValue(":networkid", net.networkId.toInt());
+    serversQuery.exec();
+    if(!watchQuery(&serversQuery))
+      return nets;
+
+    QVariantList servers;
+    while(serversQuery.next()) {
+      QVariantMap server;
+      server["Host"] = serversQuery.value(0).toString();
+      server["Port"] = serversQuery.value(1).toInt();
+      server["Password"] = serversQuery.value(2).toString();
+      server["UseSSL"] = serversQuery.value(3).toInt() == 1 ? true : false;
+      servers << server;
+    }
+    net.serverList = servers;
+    nets << net;
+  }
+  return nets;
+}
+
+bool SqliteStorage::isValidNetwork(UserId user, const NetworkId &networkId) {
+  QSqlQuery query(logDb());
+  query.prepare(queryString("select_networkExists"));
+  query.bindValue(":userid", user.toInt());
+  query.bindValue(":networkid", networkId.toInt());
+  query.exec();
+
+  watchQuery(&query); // there should not occur any errors
+  if(!query.first())
+    return false;
+  
+  Q_ASSERT(!query.next());
+  return true;
+}
+
 NetworkId SqliteStorage::getNetworkId(UserId user, const QString &network) {
   QSqlQuery query(logDb());
   query.prepare("SELECT networkid FROM network "
index b6ba748..bee848b 100644 (file)
@@ -52,7 +52,10 @@ public slots:
   virtual void delUser(UserId user);
   
   /* Network handling */
-  virtual NetworkId createNetworkId(UserId user, const NetworkInfo &info);
+  virtual NetworkId createNetwork(UserId user, const NetworkInfo &info);
+  virtual bool updateNetwork(UserId user, const NetworkInfo &info);
+  virtual bool removeNetwork(UserId user, const NetworkId &networkId);
+  virtual QList<NetworkInfo> networks(UserId user);
   
   /* Buffer handling */
   virtual BufferInfo getBufferInfo(UserId user, const NetworkId &networkId, const QString &buffer = "");
@@ -72,6 +75,7 @@ protected:
   
 private:
   static QString backlogFile();
+  bool isValidNetwork(UserId user, const NetworkId &networkId);
   NetworkId getNetworkId(UserId user, const QString &network);
   void createBuffer(UserId user, const NetworkId &networkId, const QString &buffer);
 };
index 649bdc4..95bbb2d 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "types.h"
 #include "message.h"
-struct NetworkInfo;
+#include "network.h"
 
 class Storage : public QObject {
   Q_OBJECT
@@ -109,13 +109,39 @@ class Storage : public QObject {
 
     /* Network handling */
 
-    //! Create a new unique Network in the storage backend
+    //! Create a new Network in the storage backend and return it unique Id
     /** \param user        The core user who owns this network
      *  \param networkInfo The networkInfo holding the network definition
      *  \return the NetworkId of the newly created Network. Possibly invalid.
      */
-    virtual NetworkId createNetworkId(UserId user, const NetworkInfo &info) = 0;
+    virtual NetworkId createNetwork(UserId user, const NetworkInfo &info) = 0;
 
+    //! Apply the changes to NetworkInfo info to the storage engine
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \param networkInfo The Updated NetworkInfo
+     *  \return true if successfull.
+     */
+    virtual bool updateNetwork(UserId user, const NetworkInfo &info) = 0;
+
+    //! Permanently remove a Network and all the data associated with it.
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \param networkId   The network to delete
+     *  \return true if successfull.
+     */
+    virtual bool removeNetwork(UserId user, const NetworkId &networkId) = 0;
+
+    //! Returns a list of all NetworkInfos for the given UserId user
+    /** \note This method is thredsafe.
+     *
+     *  \param user        The core user
+     *  \return QList<NetworkInfo>.
+     */
+    virtual QList<NetworkInfo> networks(UserId user) = 0;
+  
     //! Get the unique NetworkId of the network for a user.
     /** \param user    The core user who owns this network
      *  \param network The network name
index 8b448e0..4fb60da 100644 (file)
@@ -175,10 +175,6 @@ void NetworksSettingsPage::setWidgetStates() {
     ui.upServer->setEnabled(false);
     ui.downServer->setEnabled(false);
   }
-
-  // FIXME disable network creation/deletion because of the storage issue
-  ui.deleteNetwork->setEnabled(false);
-  ui.renameNetwork->setEnabled(false);
 }
 
 void NetworksSettingsPage::setItemState(NetworkId id, QListWidgetItem *item) {
@@ -418,8 +414,7 @@ void NetworksSettingsPage::on_deleteNetwork_clicked() {
   if(ui.networkList->selectedItems().count()) {
     NetworkId netid = ui.networkList->selectedItems()[0]->data(Qt::UserRole).value<NetworkId>();
     int ret = QMessageBox::question(this, tr("Delete Network?"),
-                                    tr("Do you really want to delete the network \"%1\" and all related settings, including the backlog?"
-                                       "<br><br><em>NOTE: Backlog deletion hasn't actually been implemented yet.</em>").arg(networkInfos[netid].networkName),
+                                    tr("Do you really want to delete the network \"%1\" and all related settings, including the backlog?").arg(networkInfos[netid].networkName),
                                     QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
     if(ret == QMessageBox::Yes) {
       currentId = 0;
index 5e2776f..0f7e9ec 100644 (file)
@@ -5,14 +5,14 @@
 
   quasselVersion = "0.2.0-pre";
   quasselDate = "2008-02-11";
-  quasselBuild = 505;
+  quasselBuild = 506;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 480;
   clientVersionNeeded = quasselVersion;
 
   //! Minimum core build number the client needs
-  coreBuildNeeded = 480;
+  coreBuildNeeded = 506;
   coreVersionNeeded = quasselVersion;
 
 }