Now using exceptions to report errors in schedulexmlparser.cpp.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Wed, 27 Sep 2017 20:20:05 +0000 (22:20 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Wed, 27 Sep 2017 20:36:57 +0000 (22:36 +0200)
src/sql/schedulexmlparser.cpp

index 6ee619619c62cba1b99cd258eed083383354a530..15e3861b763c29963cb5e5522af658cf7849d267 100644 (file)
@@ -32,14 +32,19 @@ ScheduleXmlParser::ScheduleXmlParser(SqlEngine* sqlEngine, QObject *aParent): QO
 }
 
 
+class ParseException: public std::runtime_error {
+public:
+    ParseException(const QString& message): std::runtime_error(message.toStdString()) {}
+};
+
+
 void ScheduleXmlParser::parseDataImpl(const QByteArray &aData, const QString& url, int conferenceId) {
     QDomDocument document;
     QString xml_error;
     int xml_error_line;
     int xml_error_column;
-    if (!document.setContent (aData, false, &xml_error, &xml_error_line, &xml_error_column)) {
-        error_message("Could not parse schedule: " + xml_error + " at line " + QString("%1").arg(xml_error_line) + " column " + QString("%1").arg(xml_error_column));
-        return;
+    if (!document.setContent(aData, false, &xml_error, &xml_error_line, &xml_error_column)) {
+        throw ParseException("Could not parse schedule: " + xml_error + " at line " + QString("%1").arg(xml_error_line) + " column " + QString("%1").arg(xml_error_column));
     }
 
     QDomElement scheduleElement = document.firstChildElement("schedule");
@@ -165,16 +170,18 @@ void ScheduleXmlParser::parseDataImpl(const QByteArray &aData, const QString& ur
             } // parsing room elements
         } // parsing day elements
     } // schedule element
-    if (!conference_title.isNull()) {
-        transaction.commit();
-        emit parsingScheduleEnd(conferenceId);
-    } else {
-        error_message("Could not parse schedule");
-    }
+    if (conference_title.isNull()) throw ParseException("Could not parse schedule");
+
+    transaction.commit();
+    emit parsingScheduleEnd(conferenceId);
 }
 
 
 void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, int conferenceId) {
-    parseDataImpl(aData, url, conferenceId);
+    try {
+        parseDataImpl(aData, url, conferenceId);
+    } catch (ParseException& e) {
+        error_message(e.what());
+    }
 }