2 // Copyright 2010 Mikko Keinänen
4 // This file is part of EmuFront.
7 // EmuFront is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License version 2 as published by
9 // the Free Software Foundation and appearing in the file gpl.txt included in the
10 // packaging of this file.
12 // EmuFront is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License
18 // along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
20 #include "databasemanager.h"
22 #include <QSqlDatabase>
23 #include <QSqlTableModel>
33 const QString DatabaseManager::DB_FILENAME = QString("emufront.db.sqlite");
34 const QString DatabaseManager::DATABASE = QString("QSQLITE");
35 const QString DatabaseManager::DB_TABLE_NAME_MEDIATYPE = QString("mediatype");
36 const QString DatabaseManager::DB_TABLE_NAME_PLATFORM = QString("platform");
37 const QString DatabaseManager::DB_TABLE_NAME_FILE= QString("file");
38 const QString DatabaseManager::DB_TABLE_NAME_FILEPATH = QString("filepath");
39 const QString DatabaseManager::DB_TABLE_NAME_SETUP = QString("setup");
40 const QString DatabaseManager::DB_TABLE_MEDIAIMAGECONTAINER = QString("mediaimagecontainer");
41 const QString DatabaseManager::DB_TABLE_MEDIAIMAGECONTAINER_MEDIAIMAGE = QString("mediaimagecontainer_mediaimage");
42 const QString DatabaseManager::DB_TABLE_EXECUTABLE = QString("executable");
44 DatabaseManager::DatabaseManager(QObject *parent)
50 DatabaseManager::~DatabaseManager()
52 // no need to explicitily destroy sqlTableModel
53 // because it is parented QObject and will
54 // be destroyed when parent is destroyed
58 You may wanna set the possible filters (filterDataObjects) before calling getDataModel.
59 After filtering do not set update to true. Data model is already updated.
61 QSqlQueryModel* DatabaseManager::getDataModel(bool update)
64 sqlTableModel = getData();
71 bool DatabaseManager::openDB()
73 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
74 db.setDatabaseName(DatabaseManager::getDbPath());
78 QString DatabaseManager::getDbPath()
82 path.append(QDir::home().path());
83 path.append(QDir::separator()).append(DB_FILENAME);
85 path.append(DB_FILENAME);
90 void DatabaseManager::resetModel()
92 if (!sqlTableModel) return;
96 // sql must return a count(*) value
97 int DatabaseManager::countRows(QString tableName, QString columnName, int id) const
99 QString sql = QString("SELECT COUNT(*) FROM %1 WHERE %2 = %3")
100 .arg(tableName).arg(columnName).arg(id);
102 QSqlQuery query(sql);
104 numEntries = query.value(0).toInt();
108 EmuFrontObject* DatabaseManager::getDataObject(int id)
111 return getFilteredDataObject();
114 EmuFrontObject* DatabaseManager::getDataObject(QString filter)
116 qDebug() << "Filtering data object" << filter;
117 QList<QString> filters;
118 filters.append(filter);
119 filterDataObjects(filters);
120 qDebug() << "...done filtering.";
121 return getFilteredDataObject();
124 EmuFrontObject* DatabaseManager::getFilteredDataObject()
126 EmuFrontObject *plf = 0;
127 // TODO: if record has more than one the first instance is returned
128 // ... check if this is ok in all cases!
129 if (sqlTableModel->rowCount() >= 1)
131 QSqlRecord record = sqlTableModel->record(0);
132 if (record.isEmpty())
134 throw new EmuFrontException(tr("No filtered data available"));
136 else plf = recordToDataObject(&record);
141 EmuFrontObject* DatabaseManager::getDataObjectFromModel(QModelIndex *index)
143 if (!sqlTableModel) sqlTableModel = getDataModel();
144 QSqlRecord record = sqlTableModel->record(index->row());
145 return recordToDataObject(&record);
148 int DatabaseManager::getCurrentTimeStamp() {
149 return QDateTime::currentDateTime().toTime_t();
152 int DatabaseManager::countDataObjectRefs(int id) const
156 q.prepare(getCountRefsSelect(id));
161 ret = rec.value(0).toInt();
163 qDebug() << "Found " << ret << " references.";