@@ -18,7 +18,6 @@
19#include <QtConcurrent>
19#include <QtConcurrent>
20#include <QDebug>
20#include <QDebug>
21−#include <QFutureSynchronizer>
22#include <QSqlQuery>
21#include <QSqlQuery>
23#include <QSqlError>
22#include <QSqlError>
24#include <QSqlResult>
23#include <QSqlResult>
@@ -33,24 +32,23 @@ inline QString sanitiseString(QString string) {
33 .remove(QLatin1Char('\\'));
32 .remove(QLatin1Char('\\'));
36−WindowStateStorage::WindowStateStorage(QObject *parent):
35+WindowStateStorage::WindowStateStorage(const QString& dbName, QObject *parent):
37 QObject(parent)
36 QObject(parent)
39 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
38 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
40 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
39 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
42 dir.mkpath(dbPath);
41 dir.mkpath(dbPath);
42+ if (dbName != nullptr) {
43+ m_db.setDatabaseName(dbName);
43− m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
45+ m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
47WindowStateStorage::~WindowStateStorage()
50WindowStateStorage::~WindowStateStorage()
49− QFutureSynchronizer<void> futureSync;
50− for (int i = 0; i < m_asyncQueries.count(); ++i) {
51− futureSync.addFuture(m_asyncQueries[i]);
53− futureSync.waitForFinished();
54 m_db.close();
52 m_db.close();
@@ -110,19 +108,6 @@ int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
110 return query.value("stage").toInt();
108 return query.value("stage").toInt();
113−void WindowStateStorage::executeAsyncQuery(const QString &queryString)
115− QMutexLocker l(&s_mutex);
118− bool ok = query.exec(queryString);
120− qWarning() << "Error executing query" << queryString
121− << "Driver error:" << query.lastError().driverText()
122− << "Database error:" << query.lastError().databaseText();
126QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue) const
111QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue) const
128 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
113 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
@@ -171,16 +156,13 @@ void WindowStateStorage::initdb()
171void WindowStateStorage::saveValue(const QString &queryString)
156void WindowStateStorage::saveValue(const QString &queryString)
173 QMutexLocker mutexLocker(&s_mutex);
158 QMutexLocker mutexLocker(&s_mutex);
174−
159+ QSqlQuery query;
175− QFuture<void> future = QtConcurrent::run(&m_threadPool, executeAsyncQuery, queryString);
160+ auto ok = query.exec(queryString);
176− m_asyncQueries.append(future);
161+ if (!ok) {
177−
162+ qWarning() << "Error executing query" << queryString
178− QFutureWatcher<void> *futureWatcher = new QFutureWatcher<void>();
163+ << "Driver error:" << query.lastError().driverText()
179− futureWatcher->setFuture(future);
164+ << "Database error:" << query.lastError().databaseText();
180− connect(futureWatcher, &QFutureWatcher<void>::finished,
165+ }
182− [=](){ m_asyncQueries.removeAll(futureWatcher->future());
183− futureWatcher->deleteLater(); });
186QSqlQuery WindowStateStorage::getValue(const QString &queryString) const
168QSqlQuery WindowStateStorage::getValue(const QString &queryString) const