]> Some of my projects - localmylist.git/commitdiff
Fix notification subscribing/unsubscribing.
authorAPTX <marek321@gmail.com>
Wed, 18 Sep 2013 18:26:17 +0000 (20:26 +0200)
committerAPTX <marek321@gmail.com>
Wed, 18 Sep 2013 18:26:17 +0000 (20:26 +0200)
localmylist/database.cpp
localmylist/database.h

index 6a4965325d866d3db98c5df015b4cbf62068119a..bf192bfe94566f22bb102248537270cb0f5d798b 100644 (file)
@@ -1720,6 +1720,9 @@ bool Database::connect()
        exec("SET standard_conforming_strings = 'off'");
 #endif
 
+       // If the previous connection was terminated in an unusual way, the DB
+       // driver will not delete its subscriptions and refuse to subscribe again.
+       unsubscribeFromNotifications();
        subscribeToNotifications();
        emit connected();
 
@@ -1734,16 +1737,15 @@ void Database::disconnect()
        d->preparedQueries.clear();
        d->transactionLevel = 0;
 
-       auto subscribedNotifications = d->db.driver()->subscribedToNotifications();
-       foreach (const QString &notification, subscribedNotifications)
-               d->db.driver()->unsubscribeFromNotification(notification);
-
        if (!d->db.isOpen())
        {
                qDebug() << "Not connected";
                return;
        }
 
+       // Unsubscribing only works when connected
+       unsubscribeFromNotifications();
+
        d->db.close();
 
        emit disconnected();
@@ -1974,6 +1976,13 @@ void Database::subscribeToNotifications()
        d->db.driver()->subscribeToNotification("file_location_delete");
 }
 
+void Database::unsubscribeFromNotifications()
+{
+       auto subscribedNotifications = d->db.driver()->subscribedToNotifications();
+       foreach (const QString &notification, subscribedNotifications)
+               d->db.driver()->unsubscribeFromNotification(notification);
+}
+
 OpenFileData Database::readOpenFileData(QSqlQuery &q)
 {
        OpenFileData data;
index 89e700d90dcc12b0e1ffa75a873ad9c26b2930f4..c06f6d8ca2d6e04dbb1f88f37e2ebf38ec0debde 100644 (file)
@@ -212,6 +212,7 @@ private slots:
 
 private:
        void subscribeToNotifications();
+       void unsubscribeFromNotifications();
 
        bool checkError(QSqlQuery &query, bool prepared = false);
        bool retryExec(QSqlQuery &query, bool prepared);