96 lines
2.8 KiB
C++
96 lines
2.8 KiB
C++
/*
|
|
Speed Climbing Stopwatch - Simple Stopwatch for Climbers
|
|
Copyright (C) 2018 Itsblue Development - Dorian Zeder
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published
|
|
by the Free Software Foundation, version 3 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "headers/sqlprofilemodel.h"
|
|
|
|
static void createTable()
|
|
{
|
|
if (QSqlDatabase::database().tables().contains(QStringLiteral("Contacts"))) {
|
|
// The table already exists; we don't need to do anything.
|
|
return;
|
|
}
|
|
|
|
QSqlQuery query;
|
|
|
|
//creat eth etable to store the profiles
|
|
if (!query.exec(
|
|
"CREATE TABLE IF NOT EXISTS `profiles` ( "
|
|
" `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
|
|
" `name` TEXT NOT NULL "
|
|
" );")) {
|
|
qFatal("Failed to query database: %s", qPrintable(query.lastError().text()));
|
|
}
|
|
|
|
//create the table to store the times
|
|
if (!query.exec(
|
|
"CREATE TABLE IF NOT EXISTS `times` ("
|
|
" `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
|
|
" `profileid` INTEGER NOT NULL,"
|
|
" `time` INTEGER NOT NULL, "
|
|
" `timestamp` INTEGER NOT NULL"
|
|
" );")) {
|
|
qFatal("Failed to query database: %s", qPrintable(query.lastError().text()));
|
|
}
|
|
}
|
|
|
|
SqlProfileModel::SqlProfileModel(QObject *parent) : QSqlTableModel(parent)
|
|
{
|
|
qDebug("ProfileModel constructor");
|
|
createTable();
|
|
setTable("profiles");
|
|
setEditStrategy(QSqlTableModel::OnManualSubmit);
|
|
select();
|
|
}
|
|
|
|
QVariant SqlProfileModel::data(const QModelIndex &index, int role) const
|
|
{
|
|
if (role < Qt::UserRole)
|
|
return QSqlTableModel::data(index, role);
|
|
|
|
const QSqlRecord sqlRecord = record(index.row());
|
|
return sqlRecord.value(role - Qt::UserRole);
|
|
}
|
|
|
|
QHash<int, QByteArray> SqlProfileModel::roleNames() const
|
|
{
|
|
QHash<int, QByteArray> names;
|
|
names[Qt::UserRole + 0] = "id";
|
|
names[Qt::UserRole + 1] = "name";
|
|
|
|
return names;
|
|
}
|
|
|
|
bool SqlProfileModel::append(QString name)
|
|
{
|
|
qDebug() << name;
|
|
QSqlRecord newRecord = record();
|
|
newRecord.setValue("name", name);
|
|
|
|
if (!insertRecord(rowCount(), newRecord)) {
|
|
qWarning() << "Failed to add profile:" << lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
submitAll();
|
|
return(true);
|
|
}
|
|
|
|
void SqlProfileModel::remove(int row)
|
|
{
|
|
removeRows(row, 1);
|
|
submitAll();
|
|
}
|