3 ** Copyright 2010 Mikko Keinänen
5 ** This file is part of EmuFront.
8 ** EmuFront is free software: you can redistribute it and/or modify
9 ** it under the terms of the GNU General Public License version 2 as published by
10 ** the Free Software Foundation and appearing in the file gpl.txt included in the
11 ** packaging of this file.
13 ** EmuFront is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** GNU General Public License for more details.
18 ** You should have received a copy of the GNU General Public License
19 ** along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
21 #include "databasemanager.h"
23 #include <QSqlDatabase>
24 #include <QSqlTableModel>
34 const QString DatabaseManager::DB_FILENAME = QString("emufront.db.sqlite");
35 const QString DatabaseManager::DATABASE = QString("QSQLITE");
36 const QString DatabaseManager::DB_TABLE_NAME_MEDIATYPE = QString("mediatype");
37 const QString DatabaseManager::DB_TABLE_NAME_PLATFORM = QString("platform");
38 const QString DatabaseManager::DB_TABLE_NAME_FILE= QString("file");
39 const QString DatabaseManager::DB_TABLE_NAME_FILEPATH = QString("filepath");
40 const QString DatabaseManager::DB_TABLE_NAME_SETUP = QString("setup");
41 const QString DatabaseManager::DB_TABLE_MEDIAIMAGECONTAINER = QString("mediaimagecontainer");
42 const QString DatabaseManager::DB_TABLE_MEDIAIMAGECONTAINER_MEDIAIMAGE = QString("mediaimagecontainer_mediaimage");
43 const QString DatabaseManager::DB_TABLE_EXECUTABLE = QString("executable");
45 DatabaseManager::DatabaseManager(QObject *parent)
51 DatabaseManager::~DatabaseManager()
53 // no need to explicitily destroy sqlTableModel
54 // because it is parented QObject and will
55 // be destroyed when parent is destroyed
59 You may wanna set the possible filters (filterDataObjects) before calling getDataModel.
60 After filtering do not set update to true. Data model is already updated.
62 QSqlQueryModel* DatabaseManager::getDataModel(bool update)
65 sqlTableModel = getData();
72 bool DatabaseManager::openDB()
74 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
75 db.setDatabaseName(DatabaseManager::getDbPath());
79 QString DatabaseManager::getDbPath()
83 path.append(QDir::home().path());
84 path.append(QDir::separator()).append(DB_FILENAME);
86 path.append(DB_FILENAME);
91 void DatabaseManager::resetModel()
93 if (!sqlTableModel) return;
97 // sql must return a count(*) value
98 int DatabaseManager::countRows(QString tableName, QString columnName, int id) const
100 QString sql = QString("SELECT COUNT(*) FROM %1 WHERE %2 = %3")
101 .arg(tableName).arg(columnName).arg(id);
103 QSqlQuery query(sql);
105 numEntries = query.value(0).toInt();
110 /* Throws EmuFrontException if filtered data was not found. */
111 EmuFrontObject* DatabaseManager::getDataObject(int id)
114 return getFilteredDataObject();
117 /* Throws EmuFrontException if filtered data was not found. */
118 EmuFrontObject* DatabaseManager::getDataObject(QString filter)
120 QList<QString> filters;
121 filters.append(filter);
122 filterDataObjects(filters);
123 return getFilteredDataObject(); // throws EmuFrontException
126 /* Throws EmuFrontException if filtered data was not found. */
127 EmuFrontObject* DatabaseManager::getFilteredDataObject()
129 EmuFrontObject *plf = 0;
130 // TODO: if record has more than one the first instance is returned
131 // ... check if this is ok in all cases!
132 if (sqlTableModel->rowCount() >= 1)
134 QSqlRecord record = sqlTableModel->record(0);
135 if (record.isEmpty()) {
136 throw EmuFrontException(tr("No filtered data available"));
138 else plf = recordToDataObject(&record);
142 /* Throws EmuFrontException */
143 EmuFrontObject* DatabaseManager::getDataObjectFromModel(QModelIndex *index)
145 if (!sqlTableModel) sqlTableModel = getDataModel();
146 QSqlRecord record = sqlTableModel->record(index->row());
147 return recordToDataObject(&record);
150 int DatabaseManager::getCurrentTimeStamp() {
151 return QDateTime::currentDateTime().toTime_t();
154 int DatabaseManager::countDataObjectRefs(int id) const
158 q.prepare(getCountRefsSelect(id));
163 ret = rec.value(0).toInt();
165 qDebug() << "Found " << ret << " references.";