File indexing completed on 2024-05-12 04:42:55
0001 /* 0002 SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #ifndef KPUBLICTRANSPORT_SCRIPTEDRESTONBOARDBACKEND_H 0007 #define KPUBLICTRANSPORT_SCRIPTEDRESTONBOARDBACKEND_H 0008 0009 #include "restonboardbackend_p.h" 0010 0011 #include <QThread> 0012 #include <QUrl> 0013 0014 #include <memory> 0015 0016 class QJSEngine; 0017 class QJSValue; 0018 class QTimer; 0019 0020 namespace KPublicTransport { 0021 0022 /** REST onboard API backend with response parsing done in JS. */ 0023 class ScriptedRestOnboardBackend : public RestOnboardBackend 0024 { 0025 Q_OBJECT 0026 Q_PROPERTY(QUrl positionEndpoint MEMBER m_positionEndpoint) 0027 Q_PROPERTY(QUrl journeyEndpoint MEMBER m_journeyEndpoint) 0028 Q_PROPERTY(QString script MEMBER m_scriptName) 0029 Q_PROPERTY(QString positionFunction MEMBER m_positionFunction) 0030 Q_PROPERTY(QString journeyFunction MEMBER m_journeyFunction) 0031 0032 public: 0033 explicit ScriptedRestOnboardBackend(QObject *parent = nullptr); 0034 ~ScriptedRestOnboardBackend(); 0035 0036 bool supportsPosition() const override final; 0037 bool supportsJourney() const override final; 0038 0039 QNetworkRequest createPositionRequest() const override final; 0040 QNetworkRequest createJourneyRequest() const override final; 0041 0042 Journey parseJourneyData(const QJsonValue &response) const override final; 0043 PositionData parsePositionData(const QJsonValue &response) const override final; 0044 0045 private: 0046 void setupEngine() const; 0047 void printScriptError(const QJSValue &error) const; 0048 0049 QUrl m_positionEndpoint; 0050 QUrl m_journeyEndpoint; 0051 0052 QString m_scriptName; 0053 QString m_positionFunction; 0054 QString m_journeyFunction; 0055 0056 mutable std::unique_ptr<QJSEngine> m_engine; 0057 0058 mutable QThread m_watchdogThread; 0059 mutable QTimer *m_watchdogTimer = nullptr; 0060 }; 0061 0062 } 0063 0064 #endif // KPUBLICTRANSPORT_SCRIPTEDRESTONBOARDBACKEND_H