Beispiel #1
0
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;
}