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 c2358dc..09913fe 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 34eb7e3..696b79d 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 6c00f5e..7d31b5d 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 cd4f656..b628343 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 28344b9..c87ce2b 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 9bee268..7e7ff88 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 */