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("my.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
57 QSqlQueryModel* DatabaseManager::getDataModel(bool update)
59 if (!sqlTableModel || (sqlTableModel && !update)) sqlTableModel = getData();
63 bool DatabaseManager::openDB()
65 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
66 db.setDatabaseName(DatabaseManager::getDbPath());
70 QString DatabaseManager::getDbPath()
74 path.append(QDir::home().path());
75 path.append(QDir::separator()).append(DB_FILENAME);
77 path.append(DB_FILENAME);
82 void DatabaseManager::resetModel()
84 if (!sqlTableModel) return;
88 // sql must return a count(*) value
89 int DatabaseManager::countRows(QString tableName, QString columnName, int id) const
91 QString sql = QString("SELECT COUNT(*) FROM %1 WHERE %2 = %3")
92 .arg(tableName).arg(columnName).arg(id);
96 numEntries = query.value(0).toInt();
100 EmuFrontObject* DatabaseManager::getDataObject(int id)
103 return getFilteredDataObject();
104 /*EmuFrontObject *plf = 0;
105 if (sqlTableModel->rowCount() == 1)
107 QSqlRecord record = sqlTableModel->record(0);
108 if (record.isEmpty())
110 throw new EmuFrontException(tr("No data available for id %1").arg(id));
112 else plf = recordToDataObject(&record);
117 EmuFrontObject* DatabaseManager::getDataObject(QString filter)
119 qDebug() << "Filtering data object" << filter;
120 QList<QString> filters;
121 filters.append(filter);
122 filterDataObjects(filters);
123 qDebug() << "...done filtering.";
124 return getFilteredDataObject();
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())
137 throw new EmuFrontException(tr("No filtered data available"));
139 else plf = recordToDataObject(&record);
144 EmuFrontObject* DatabaseManager::getDataObjectFromModel(QModelIndex *index)
146 if (!sqlTableModel) sqlTableModel = getDataModel();
147 QSqlRecord record = sqlTableModel->record(index->row());
148 return recordToDataObject(&record);
151 int DatabaseManager::getCurrentTimeStamp() {
152 return QDateTime::currentDateTime().toTime_t();