File indexing completed on 2024-05-12 04:42:37
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_IVVASSPARSER_H 0008 #define KPUBLICTRANSPORT_IVVASSPARSER_H 0009 0010 #include <KPublicTransport/Location> 0011 0012 #include <QDateTime> 0013 #include <QString> 0014 #include <QTimeZone> 0015 0016 #include <vector> 0017 0018 class QByteArray; 0019 class QJsonObject; 0020 0021 namespace KPublicTransport { 0022 0023 class Journey; 0024 class Stopover; 0025 0026 /** Parser for IVV ASS responses. */ 0027 class IvvAssParser 0028 { 0029 public: 0030 explicit IvvAssParser(const QTimeZone &tz, const QString &locationIdentifier); 0031 0032 std::vector<Location> parseLocations(const QByteArray &data); 0033 std::vector<Stopover> parseStopovers(const QByteArray &data); 0034 std::vector<Journey> parseJourneys(const QByteArray &data); 0035 0036 QString errorMessage; 0037 0038 private: 0039 bool parseError(const QJsonObject &top); 0040 0041 struct EventTime { 0042 QDateTime scheduled; 0043 QDateTime expected; 0044 }; 0045 EventTime parseTime(const QJsonObject &obj, const char *baseKey, const char *scheduledKey) const; 0046 0047 struct LocationData 0048 { 0049 Location loc; 0050 QString platform; 0051 }; 0052 LocationData parseLocation(const QJsonObject &stopObj) const; 0053 0054 QTimeZone m_timezone; 0055 QString m_locationIdentifier; 0056 }; 0057 0058 } 0059 0060 #endif // KPUBLICTRANSPORT_IVVASSPARSER_H