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