From: APTX Date: Wed, 18 Sep 2013 18:26:17 +0000 (+0200) Subject: Fix notification subscribing/unsubscribing. X-Git-Url: https://gitweb.aptx.org/?a=commitdiff_plain;h=1ae8dcdca57f218237887e6bd742d9168ff831ae;p=localmylist.git Fix notification subscribing/unsubscribing. --- diff --git a/localmylist/database.cpp b/localmylist/database.cpp index 6a49653..bf192bf 100644 --- a/localmylist/database.cpp +++ b/localmylist/database.cpp @@ -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 ¬ification, 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 ¬ification, subscribedNotifications) + d->db.driver()->unsubscribeFromNotification(notification); +} + OpenFileData Database::readOpenFileData(QSqlQuery &q) { OpenFileData data; diff --git a/localmylist/database.h b/localmylist/database.h index 89e700d..c06f6d8 100644 --- a/localmylist/database.h +++ b/localmylist/database.h @@ -212,6 +212,7 @@ private slots: private: void subscribeToNotifications(); + void unsubscribeFromNotifications(); bool checkError(QSqlQuery &query, bool prepared = false); bool retryExec(QSqlQuery &query, bool prepared);