]> ToastFreeware Gitweb - toast/confclerk.git/blobdiff - src/sql/schedulexmlparser.cpp
Import schedules with dates attached to events correctly.
[toast/confclerk.git] / src / sql / schedulexmlparser.cpp
index 90c7714bb490ec16ca89dd031fd578b9fad79309..7bf7ed62f84c910658429b65413d931b392158fd 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <QDomDocument>
 #include <QHash>
+#include <QTime>
 
 #include "schedulexmlparser.h"
 #include "sqlengine.h"
@@ -50,6 +51,7 @@ void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, i
     if (!scheduleElement.isNull())
     {
         QDomElement conferenceElement = scheduleElement.firstChildElement("conference");
+        QTime conference_day_change;
         if (!conferenceElement.isNull())
         {
             emit(parsingScheduleBegin());
@@ -67,6 +69,7 @@ void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, i
             sqlEngine->addConferenceToDB(conference, conferenceId);
             conferenceId = conference["id"].toInt();
             conference_title = conference["title"];
+            conference_day_change = QTime(0, 0).addSecs(conference["day_change"].toInt());
         }
 
         // we need to get count of all events in order to emit 'progressStatus' signal
@@ -108,8 +111,18 @@ void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, i
                         QHash<QString,QString> event;
                         event["id"] = eventElement.attribute("id");;
                         event["conference_id"] = QString::number(conferenceId, 10);
-                        event["start"] = eventElement.firstChildElement("start").text(); // time eg. 10:00
-                        event["date"] = dayElement.attribute("date"); // date eg. 2009-02-07
+                        QTime event_start = QTime::fromString(eventElement.firstChildElement("start").text(), sqlEngine->TIME_FORMAT);
+                        event["start"] = event_start.toString(sqlEngine->TIME_FORMAT); // time eg. 10:00
+                        QDate event_date;
+                        QDomElement eventDateElement = eventElement.firstChildElement("date");
+                        if (!eventDateElement.isNull()) {
+                            QString date_str = eventDateElement.text(); // date eg. 2009-02-07T10:00:00+00:00
+                            event_date = QDate::fromString(date_str.left(sqlEngine->DATE_FORMAT.size()), sqlEngine->DATE_FORMAT);
+                        } else {
+                            event_date = QDate::fromString(dayElement.attribute("date"),sqlEngine->DATE_FORMAT); // date eg. 2009-02-07
+                            if (event_start < conference_day_change) event_date = event_date.addDays(1);
+                        }
+                        event["date"] = event_date.toString(sqlEngine->DATE_FORMAT); // date eg. 2009-02-07
                         event["duration"] = eventElement.firstChildElement("duration").text(); // time eg. 00:30
                         event["room_name"] = eventElement.firstChildElement("room").text(); // string eg. "Janson"
                         event["tag"] = eventElement.firstChildElement("tag").text(); // string eg. "welcome"