File indexing completed on 2024-05-12 04:42:34
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_EFAXMLPARSER_H 0008 #define KPUBLICTRANSPORT_EFAXMLPARSER_H 0009 0010 #include "efaparser.h" 0011 0012 #include <KPublicTransport/Path> 0013 0014 #include <QPointF> 0015 0016 class QPolygonF; 0017 0018 namespace KPublicTransport { 0019 0020 class ScopedXmlStreamReader; 0021 0022 /** Parser for full XML responses from EFA services. 0023 * @internal only exported for unit tests 0024 */ 0025 class KPUBLICTRANSPORT_EXPORT EfaXmlParser : public EfaParser 0026 { 0027 public: 0028 std::vector<Location> parseStopFinderResponse(const QByteArray &data) override; 0029 std::vector<Stopover> parseDmResponse(const QByteArray &data) override; 0030 std::vector<Journey> parseTripResponse(const QByteArray &data) override; 0031 0032 private: 0033 void parseLocationCommon(Location &loc, const ScopedXmlStreamReader &reader) const; 0034 Location parseItdOdvAssignedStop(const ScopedXmlStreamReader &reader) const; 0035 Location parseOdvNameElem(ScopedXmlStreamReader &reader) const; 0036 0037 Stopover parseDmDeparture(ScopedXmlStreamReader &&reader) const; 0038 void parseTripDeparture(ScopedXmlStreamReader &&reader, JourneySection §ion) const; 0039 void parseTripArrival(ScopedXmlStreamReader &&reader, JourneySection §ion) const; 0040 0041 Stopover parsePartialTripIntermediateStop(ScopedXmlStreamReader &&reader) const; 0042 std::vector<Stopover> parsePartialTripStopSequence(ScopedXmlStreamReader &&reader) const; 0043 0044 std::vector<JourneySection> parseTripPartialRoute(ScopedXmlStreamReader &&reader) const; 0045 Journey parseTripRoute(ScopedXmlStreamReader &&reader) const; 0046 QStringList parseInfoLink(ScopedXmlStreamReader &&reader) const; 0047 QPolygonF parsePathCoordinates(ScopedXmlStreamReader &&reader) const; 0048 0049 struct PathDescription { 0050 QPointF point; 0051 int fromIndex = -1; 0052 int toIndex = -1; 0053 QString description; 0054 int travelTime = 0; 0055 int niveau = 0; 0056 int niveauDelta = 0; 0057 PathSection::Maneuver maneuver = PathSection::Move; 0058 }; 0059 0060 std::vector<PathDescription> parsePathDescriptionList(ScopedXmlStreamReader &&reader) const; 0061 void resolvePathDescription(std::vector<PathDescription> &descs) const; 0062 Path assemblePath(const std::vector<PathDescription> &descs, const QPolygonF &poly) const; 0063 QHash<QString, QString> parseGenericAttributeList(ScopedXmlStreamReader &&reader) const; 0064 0065 mutable QHash<QString, Location> m_locations; 0066 }; 0067 0068 } 0069 0070 #endif // KPUBLICTRANSPORT_EFAXMLPARSER_H