void RouteFinder::requestFinished() { //qDebug() << "Route response received from Ytv."; QXmlStreamReader xml(this->reply->readAll()); //this->reply->disconnect(this, SLOT(requestFinished())); this->reply->deleteLater(); this->reply = NULL; while (!xml.atEnd()) { //qDebug() << "Reading next element"; xml.readNext(); QString xmlName(xml.name().toString()); //qDebug() << "Element name: " + xmlName + " Type: " + xml.tokenString(); if (xmlName == "ROUTE" && xml.isStartElement()) { this->routes.append(parseRoute(xml)); } } //qDebug() << "Finished processing RouteFinder"; emit(finished()); return; }
bool QGeoRouteXmlParser::parseRootElement() { if (!m_reader->readNextStartElement()) { m_reader->raiseError("Expected a root element named \"CalculateRoute\" (no root element found)."); return false; } bool updateroute = false; if (m_reader->name() != "CalculateRoute" && m_reader->name() != "GetRoute") { m_reader->raiseError(QString("The root element is expected to have the name \"CalculateRoute\" or \"GetRoute\" (root element was named \"%1\").").arg(m_reader->name().toString())); return false; } else if (m_reader->name() == "GetRoute") { updateroute = true; } if (m_reader->readNextStartElement()) { if (m_reader->name() != "Response") { m_reader->raiseError(QString("Expected a element named \"Response\" (element was named \"%1\").").arg(m_reader->name().toString())); return false; } } while (m_reader->readNextStartElement()) { if (m_reader->name() == "MetaInfo") { m_reader->skipCurrentElement(); } else if (m_reader->name() == "Route") { QGeoRoute route; route.setRequest(m_request); if (updateroute) route.setTravelMode(QGeoRouteRequest::TravelMode(int(m_request.travelModes()))); if (!parseRoute(&route)) continue; //route parsing failed move on to the next m_results.append(route); } else if (m_reader->name() == "Progress") { //TODO: updated route progress m_reader->skipCurrentElement(); } else { m_reader->raiseError(QString("Did not expect a child element named \"%1\".").arg( m_reader->name().toString())); return false; } } return true; }