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

0001 /*
0002     SPDX-FileCopyrightText: 2023 Jonah BrĂ¼chert <jbb@kaidan.im>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QPointer>
0010 
0011 #include "abstractbackend.h"
0012 
0013 #include <map>
0014 
0015 namespace KPublicTransport {
0016 
0017 namespace LTGLink {
0018 struct Station {
0019     int id;
0020     QString name;
0021     QString searchableName;
0022     float latitude;
0023     float longitude;
0024 };
0025 }
0026 
0027 class LTGLinkBackend : public QObject, public AbstractBackend
0028 {
0029     Q_OBJECT
0030 
0031 public:
0032     static inline constexpr const char* type() { return "ltglink"; }
0033     Capabilities capabilities() const override;
0034     bool needsLocationQuery(const Location &loc, AbstractBackend::QueryType type) const override;
0035     bool queryJourney(const JourneyRequest &req, JourneyReply *reply, QNetworkAccessManager *nam) const override;
0036     bool queryLocation(const LocationRequest &req, LocationReply *reply, QNetworkAccessManager *nam) const override;
0037 
0038 private:
0039     AsyncTask<void> *downloadStationData(Reply *reply, QNetworkAccessManager *nam);
0040 
0041     static Location stationToLocation(const LTGLink::Station &station);
0042     Location lookupStation(int ltglinkint) const;
0043 
0044     std::map<int, LTGLink::Station> m_stations;
0045     QPointer<AsyncTask<void>> m_stationDataTask = nullptr;
0046 };
0047 
0048 }