17 #include "windowstatestorage.h"
19 #include <QtConcurrent>
26 QMutex WindowStateStorage::s_mutex;
28 WindowStateStorage::WindowStateStorage(QObject *parent):
31 QString dbPath = QDir::homePath() +
"/.cache/unity8/";
32 m_db = QSqlDatabase::addDatabase(
"QSQLITE");
35 m_db.setDatabaseName(dbPath +
"windowstatestorage.sqlite");
39 void WindowStateStorage::saveGeometry(
const QString &windowId,
const QRect &rect)
41 QString queryString = QString(
"INSERT OR REPLACE INTO geometry (windowId, x, y, width, height) values ('%1', '%2', '%3', '%4', '%5');")
48 QtConcurrent::run(executeAsyncQuery, queryString);
51 void WindowStateStorage::executeAsyncQuery(
const QString &queryString)
53 QMutexLocker l(&s_mutex);
56 bool ok = query.exec(queryString);
58 qWarning() <<
"Error executing query" << queryString
59 <<
"Driver error:" << query.lastError().driverText()
60 <<
"Database error:" << query.lastError().databaseText();
64 QRect WindowStateStorage::getGeometry(
const QString &windowId,
const QRect &defaultValue)
66 QMutexLocker l(&s_mutex);
67 QString queryString = QString(
"SELECT * FROM geometry WHERE windowId = '%1';")
71 bool ok = query.exec(queryString);
73 qWarning() <<
"Error retrieving window state for" << windowId
74 <<
"Driver error:" << query.lastError().driverText()
75 <<
"Database error:" << query.lastError().databaseText();
81 return QRect(query.value(
"x").toInt(), query.value(
"y").toInt(), query.value(
"width").toInt(), query.value(
"height").toInt());
84 void WindowStateStorage::initdb()
88 qWarning() <<
"Error opening state database:" << m_db.lastError().driverText() << m_db.lastError().databaseText();
92 if (!m_db.tables().contains(
"geometry")) {
94 query.exec(
"CREATE TABLE geometry(windowId TEXT UNIQUE, x INTEGER, y INTEGER, width INTEGER, height INTEGER);");