File indexing completed on 2024-05-12 04:42:40
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KPUBLICTRANSPORT_OPENTRIPPLANNERBACKEND_H 0008 #define KPUBLICTRANSPORT_OPENTRIPPLANNERBACKEND_H 0009 0010 #include "abstractbackend.h" 0011 0012 #include <QHash> 0013 0014 #include <vector> 0015 0016 class KGraphQLRequest; 0017 0018 namespace KPublicTransport { 0019 0020 class RentalVehicleNetwork; 0021 0022 /** Access to OpenTripPlanner GraphQL based backends. */ 0023 class OpenTripPlannerGraphQLBackend : public AbstractBackend 0024 { 0025 Q_GADGET 0026 Q_PROPERTY(QString endpoint MEMBER m_endpoint) 0027 Q_PROPERTY(QString apiVersion MEMBER m_apiVersion) 0028 Q_PROPERTY(QStringList supportedTransitModes MEMBER m_supportedTransitModes) 0029 Q_PROPERTY(QStringList supportedRentalModes MEMBER m_supportedRentalModes) 0030 Q_PROPERTY(QJsonValue extraHttpHeaders WRITE setExtraHttpHeaders) 0031 Q_PROPERTY(QJsonObject rentalVehicleNetworks WRITE setRentalVehicleNetworks) 0032 Q_PROPERTY(QString ifoptPrefix MEMBER m_ifoptPrefix) 0033 0034 public: 0035 OpenTripPlannerGraphQLBackend(); 0036 ~OpenTripPlannerGraphQLBackend() override; 0037 0038 static inline constexpr const char* type() { return "otpGraphQl"; } 0039 Capabilities capabilities() const override; 0040 bool needsLocationQuery(const Location &loc, AbstractBackend::QueryType type) const override; 0041 bool queryJourney(const JourneyRequest &req, JourneyReply *reply, QNetworkAccessManager *nam) const override; 0042 bool queryStopover(const StopoverRequest &req, StopoverReply *reply, QNetworkAccessManager *nam) const override; 0043 bool queryLocation(const LocationRequest &req, LocationReply *reply, QNetworkAccessManager *nam) const override; 0044 0045 private: 0046 KGraphQLRequest graphQLRequest() const; 0047 QUrl graphQLEndpoint() const; 0048 QString graphQLPath(const QString &fileName) const; 0049 0050 void setExtraHttpHeaders(const QJsonValue &v); 0051 void setRentalVehicleNetworks(const QJsonObject &obj); 0052 0053 QString m_endpoint; 0054 QString m_apiVersion; 0055 QStringList m_supportedTransitModes = { QStringLiteral("TRANSIT") }; 0056 QStringList m_supportedRentalModes = { QStringLiteral("BICYCLE") }; 0057 std::vector<std::pair<QByteArray, QByteArray>> m_extraHeaders; 0058 QHash<QString, RentalVehicleNetwork> m_rentalNetworks; 0059 QString m_ifoptPrefix; 0060 }; 0061 0062 } 0063 0064 #endif // KPUBLICTRANSPORT_OPENTRIPPLANNERBACKEND_H