File indexing completed on 2024-05-12 04:42:36

0001 /*
0002     SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KPUBLICTRANSPORT_HAFASMGATEPARSER_H
0008 #define KPUBLICTRANSPORT_HAFASMGATEPARSER_H
0009 
0010 #include "kpublictransport_export.h"
0011 #include "hafasparser.h"
0012 #include "hafasconfiguration.h"
0013 
0014 #include <KPublicTransport/Disruption>
0015 #include <KPublicTransport/Line>
0016 #include <KPublicTransport/Reply>
0017 
0018 #include <unordered_map>
0019 #include <vector>
0020 
0021 #include <QColor>
0022 
0023 class QByteArray;
0024 class QJsonValue;
0025 
0026 namespace KPublicTransport {
0027 
0028 class Journey;
0029 class Location;
0030 class Stopover;
0031 
0032 struct Ico {
0033     QColor bg;
0034     QColor fg;
0035 };
0036 
0037 /** Hafas response parser.
0038  *  @internal exported for unit tests only
0039  */
0040 class KPUBLICTRANSPORT_EXPORT HafasMgateParser : public HafasParser
0041 {
0042 public:
0043     HafasMgateParser();
0044     ~HafasMgateParser();
0045     void setProductNameMappings(std::vector<HafasMgateProductNameMapping> &&productNameMappings);
0046 
0047     std::vector<Stopover> parseDepartures(const QByteArray &data) const;
0048     std::vector<Location> parseLocations(const QByteArray &data) const;
0049     std::vector<Journey> parseJourneys(const QByteArray &data);
0050 
0051     static QDateTime parseDateTime(const QString &date, const QJsonValue &time, const QJsonValue &tzOffset);
0052 
0053     QString m_previousJourneyContext;
0054     QString m_nextJourneyContext;
0055 private:
0056     Q_DISABLE_COPY(HafasMgateParser)
0057     std::vector<Stopover> parseStationBoardResponse(const QJsonObject &obj) const;
0058     std::vector<Route> parseProducts(const QJsonArray &prodL, const std::vector<Ico> &icos) const;
0059     std::vector<Location> parseLocations(const QJsonArray &locL) const;
0060     std::vector<Journey> parseTripSearch(const QJsonObject &obj);
0061     bool parseError(const QJsonObject &obj) const;
0062 
0063     std::vector<HafasMgateProductNameMapping> m_productNameMappings;
0064 };
0065 
0066 }
0067 
0068 #endif // KPUBLICTRANSPORT_HAFASMGATEPARSER_H