From: kirilma Date: Wed, 5 May 2010 13:56:14 +0000 (+0000) Subject: store path to conference map in database X-Git-Tag: 0.5.0~82 X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/commitdiff_plain/cec47c6b42ac062c54bed7dd992d609dc3d6a3c4 store path to conference map in database path stored as additional field in conference table if it's null or empty, "Show map" button is not shown if existing database does not have the field, it will be automatically added --- diff --git a/src/fosdem.sql b/src/fosdem.sql index c2358dc..09913fe 100644 --- a/src/fosdem.sql +++ b/src/fosdem.sql @@ -10,8 +10,9 @@ CREATE TABLE CONFERENCE ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , day_change INTEGER , timeslot_duration INTEGER , active INTEGER DEFAULT 0 - , url VARCHAR UNIQUE); -INSERT INTO "CONFERENCE" VALUES(1,'FOSDEM 2010','Free and Opensource Software Developers European Meeting','ULB (Campus Solbosch)','Brussels',1265414400,1265500800,2,28800,900,1,"http://fosdem.org/2010/schedule/xml"); + , url VARCHAR UNIQUE + , map VARCHAR); +INSERT INTO "CONFERENCE" VALUES(1,'FOSDEM 2010','Free and Opensource Software Developers European Meeting','ULB (Campus Solbosch)','Brussels',1265414400,1265500800,2,28800,900,1,"http://fosdem.org/2010/schedule/xml", ":/maps/campus.png"); CREATE TABLE TRACK ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , name VARCHAR UNIQUE NOT NULL ); INSERT INTO "TRACK" VALUES(1,'Keynotes'); diff --git a/src/gui/conferenceeditor.cpp b/src/gui/conferenceeditor.cpp index 34eb7e3..696b79d 100644 --- a/src/gui/conferenceeditor.cpp +++ b/src/gui/conferenceeditor.cpp @@ -21,6 +21,7 @@ #include "conferencemodel.h" #include "urlinputdialog.h" #include "mapwindow.h" +#include "errormessage.h" #include #include @@ -94,6 +95,14 @@ void ConferenceEditor::itemSelected(const QModelIndex& current, const QModelInde conf.start().toString("dd-MM-yyyy") + ", " + conf.end().toString("dd-MM-yyyy")); + + QString map = conf.map(); + if (map.isEmpty()) { + showMapButton->hide(); + } else { + showMapButton->show(); + } + conferenceInfo->setCurrentIndex(0); removeBtn->show(); } @@ -212,9 +221,12 @@ void ConferenceEditor::importFinished(const QString& title) void ConferenceEditor::conferenceMapClicked() { - QString mapPath = QString(":/maps/campus.png"); - if(!QFile::exists(mapPath)) - mapPath = QString(":/maps/rooms/not-available.png"); + Conference conf = Conference::getById(selected_id); + QString mapPath = conf.map(); + if(mapPath.isEmpty() or !QFile::exists(mapPath)) { + error_message("Map is not available"); + return; + } QString roomName; diff --git a/src/mvc/conference.cpp b/src/mvc/conference.cpp index 6c00f5e..7d31b5d 100644 --- a/src/mvc/conference.cpp +++ b/src/mvc/conference.cpp @@ -31,7 +31,9 @@ QSqlRecord const Conference::sColumns = Conference::toRecord(QList() << QSqlField("day_change", QVariant::Int) << QSqlField("timeslot_duration", QVariant::Int) << QSqlField("active", QVariant::Bool) - << QSqlField("url", QVariant::String)); + << QSqlField("url", QVariant::String) + << QSqlField("map", QVariant::String) + ); QString const Conference::sTableName = QString("conference"); diff --git a/src/mvc/conference.h b/src/mvc/conference.h index cd4f656..b628343 100644 --- a/src/mvc/conference.h +++ b/src/mvc/conference.h @@ -49,16 +49,8 @@ public: int dayChange() const { return value("day_change").toInt(); } // in seconds from 00:00 int timeslotDuration() const { return value("timeslot_duration").toInt(); } // in seconds bool isActive() const { return value("active").toBool(); } - QString url() const - { - QVariant val = value("url"); - qDebug() << __PRETTY_FUNCTION__ << val; - if (val.isValid()) { - return val.toString(); - } else { - return QString(); - } - } + QString url() const { return stringFromNullable(value("url")); } + QString map() const { return stringFromNullable(value("map")); } #if 0 void setId(int id) { setValue("id", id); } @@ -78,6 +70,16 @@ public: setValue("url", url.isNull() ? QVariant() : url); update("url"); } + +private: + static QString stringFromNullable(const QVariant& v) + { + if (v.isValid()) { + return v.toString(); + } else { + return QString(); + } + } }; #endif /* CONFERENCE_H */ diff --git a/src/sql/sqlengine.cpp b/src/sql/sqlengine.cpp index 28344b9..c87ce2b 100644 --- a/src/sql/sqlengine.cpp +++ b/src/sql/sqlengine.cpp @@ -62,6 +62,8 @@ QString SqlEngine::login(const QString &aDatabaseType, const QString &aDatabaseN database.open(); } + checkConferenceMap(database); + //LOG_INFO(QString("Opening '%1' database '%2'").arg(aDatabaseType).arg(aDatabaseName)); return result ? QString() : database.lastError().text(); @@ -377,3 +379,13 @@ bool SqlEngine::execQueryWithParameter(QSqlDatabase &aDatabase, const QString &a } } +void SqlEngine::checkConferenceMap(QSqlDatabase &aDatabase) +{ + QSqlQuery sqlQuery(aDatabase); + sqlQuery.prepare("SELECT map FROM conference"); + if (!sqlQuery.exec()) { + qWarning() << "column conference.map is missing; adding"; + execQuery(aDatabase, "ALTER TABLE conference ADD COLUMN map VARCHAR") + and execQuery(aDatabase, "UPDATE conference SET map = ':/maps/campus.png' WHERE title = 'FOSDEM 2010'"); + } +} diff --git a/src/sql/sqlengine.h b/src/sql/sqlengine.h index 9bee268..7e7ff88 100644 --- a/src/sql/sqlengine.h +++ b/src/sql/sqlengine.h @@ -47,6 +47,8 @@ class SqlEngine : public QObject static QString login(const QString &aDatabaseType, const QString &aDatabaseName); static bool execQuery(QSqlDatabase &aDatabase, const QString &aQuery); static bool execQueryWithParameter(QSqlDatabase &aDatabase, const QString &aQuery, const QHash& params); + + static void checkConferenceMap(QSqlDatabase &aDatabase); }; #endif /* SQLENGINE_H */