From 1ae8dcdca57f218237887e6bd742d9168ff831ae Mon Sep 17 00:00:00 2001 From: APTX Date: Wed, 18 Sep 2013 20:26:17 +0200 Subject: [PATCH] Fix notification subscribing/unsubscribing. --- localmylist/database.cpp | 17 +++++++++++++---- localmylist/database.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) 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); -- 2.52.0