}
+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");
} // 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());
+ }
}