From 9782bbb1ca158c501a54d896c17434ea366725ea Mon Sep 17 00:00:00 2001 From: Philipp Spitzer Date: Wed, 27 Sep 2017 22:20:05 +0200 Subject: [PATCH] Now using exceptions to report errors in schedulexmlparser.cpp. --- src/sql/schedulexmlparser.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/sql/schedulexmlparser.cpp b/src/sql/schedulexmlparser.cpp index 6ee6196..15e3861 100644 --- a/src/sql/schedulexmlparser.cpp +++ b/src/sql/schedulexmlparser.cpp @@ -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()); + } } -- 2.39.5