store path to conference map in database
authorkirilma <kirilma@localhost>
Wed, 5 May 2010 13:56:14 +0000 (13:56 +0000)
committerkirilma <kirilma@localhost>
Wed, 5 May 2010 13:56:14 +0000 (13:56 +0000)
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

src/fosdem.sql
src/gui/conferenceeditor.cpp
src/mvc/conference.cpp
src/mvc/conference.h
src/sql/sqlengine.cpp
src/sql/sqlengine.h

index c2358dcd122515db231814eb95a4218a4b5aaf0f..09913fe2c72457c900d27ba8a589dfd7618372e6 100644 (file)
@@ -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');
index 34eb7e3bc279358b590a730fbf165913a24e4911..696b79d88ac4225e3c5ff701ecbbcce6011aab87 100644 (file)
@@ -21,6 +21,7 @@
 #include "conferencemodel.h"
 #include "urlinputdialog.h"
 #include "mapwindow.h"
+#include "errormessage.h"
 
 #include <QInputDialog>
 #include <QItemSelectionModel>
@@ -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;
 
index 6c00f5e314e4158cbab8c0a68f6b3a452138027a..7d31b5d40cde8db7110aa9a46e84bf8051afcf99 100644 (file)
@@ -31,7 +31,9 @@ QSqlRecord const Conference::sColumns = Conference::toRecord(QList<QSqlField>()
     << 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");
 
index cd4f656eab29c7e1bc099b91e272f5da9c8bf7b2..b6283435690f8c1a4bfc05261735a60e3c863000 100644 (file)
@@ -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 */
index 28344b9d224cd0c5f3b6fc77d05ce9033f8f9bdc..c87ce2b480b6582a83c2e08e4155644cb37bfc6b 100644 (file)
@@ -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'");
+    }
+}
index 9bee26845e1455d499aaa7d60150653bae13ddfb..7e7ff88a91d475a72ddeaca23af5afe0d18a43ea 100644 (file)
@@ -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<QString, QVariant>& params);
+
+        static void checkConferenceMap(QSqlDatabase &aDatabase);
 };
 
 #endif /* SQLENGINE_H */