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 as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
12 // Foobar 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 Foobar. If not, see <http://www.gnu.org/licenses/>.
20 #include "databasemanager.h"
22 #include <QSqlDatabase>
23 #include <QSqlTableModel>
32 const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
33 const QString DatabaseManager::DATABASE = QString("QSQLITE");
34 const QString DatabaseManager::DB_TABLE_NAME_MEDIATYPE = QString("mediatype");
35 const QString DatabaseManager::DB_TABLE_NAME_PLATFORM = QString("platform");
36 const QString DatabaseManager::DB_TABLE_NAME_FILE= QString("file");
37 const QString DatabaseManager::DB_TABLE_NAME_FILEPATH = QString("filepath");
38 const QString DatabaseManager::DB_TABLE_NAME_SETUP = QString("setup");
40 DatabaseManager::DatabaseManager(QObject *parent)
46 DatabaseManager::~DatabaseManager()
48 // no need to explicitily destroy sqlTableModel
49 // because it is parented QObject and will
50 // be destroyed when parent is destroyed
53 QSqlQueryModel* DatabaseManager::getDataModel()
55 if (!sqlTableModel) sqlTableModel = getData();
59 bool DatabaseManager::openDB()
61 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
62 db.setDatabaseName(DatabaseManager::getDbPath());
66 QString DatabaseManager::getDbPath()
70 path.append(QDir::home().path());
71 path.append(QDir::separator()).append(DB_FILENAME);
73 path.append(DB_FILENAME);
78 void DatabaseManager::resetModel()
80 if (!sqlTableModel) return;
84 // sql must return a count(*) value
85 int DatabaseManager::countRows(QString tableName, QString columnName, int id) const
87 QString sql = QString("SELECT COUNT(*) FROM %1 WHERE %2 = %3")
88 .arg(tableName).arg(columnName).arg(id);
92 numEntries = query.value(0).toInt();
96 EmuFrontObject* DatabaseManager::getDataObject(int id)
99 EmuFrontObject *plf = 0;
100 if (sqlTableModel->rowCount() == 1)
102 QSqlRecord record = sqlTableModel->record(0);
103 if (record.isEmpty())
105 throw new EmuFrontException(tr("No data available for id %1").arg(id));
107 else plf = recordToDataObject(&record);
112 EmuFrontObject* DatabaseManager::getDataObjectFromModel(QModelIndex *index)
114 if (!sqlTableModel) sqlTableModel = getDataModel();
115 QSqlRecord record = sqlTableModel->record(index->row());
116 return recordToDataObject(&record);