File indexing completed on 2024-05-12 04:42:41
0001 /* 0002 SPDX-FileCopyrightText: 2024 Jonah BrĂ¼chert <jbb@kaidan.im> 0003 SPDX-FileCopyrightText: 2024 Stefan Vesovic <asphyxia@spline.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include "backends/abstractbackend.h" 0011 0012 #include <QPointer> 0013 0014 #include <unordered_map> 0015 0016 namespace KPublicTransport { 0017 0018 0019 struct SrbStation { 0020 QString name; 0021 float longitude = NAN; 0022 float latitude = NAN; 0023 int id; 0024 }; 0025 0026 class SrbijavozBackend : public KPublicTransport::AbstractBackend 0027 { 0028 public: 0029 SrbijavozBackend(); 0030 0031 static inline constexpr const char* type() { return "srbijavoz"; } 0032 0033 Capabilities capabilities() const override; 0034 0035 /** Returns whether or not a location query has to be performed for the given 0036 * Location before doing departure or journey queries for it. 0037 */ 0038 bool needsLocationQuery(const Location &loc, QueryType type) const override; 0039 0040 /** Perform a journey query. 0041 * @return @c true if performing an async operation, @c false otherwise. 0042 */ 0043 bool queryJourney(const JourneyRequest &request, JourneyReply *reply, QNetworkAccessManager *nam) const override; 0044 0045 /** Perform a location query. 0046 * @return @c true if performing an async operation, @c false otherwise. 0047 */ 0048 bool queryLocation(const LocationRequest &request, LocationReply *reply, QNetworkAccessManager *nam) const override; 0049 0050 private: 0051 void loadAuxData(); 0052 void applyStationQuirks(); 0053 0054 AsyncTask<void> *downloadStationData(Reply *reply, QNetworkAccessManager *nam); 0055 0056 QDateTime parseDateTime(const QString &timeString, const QDate &date, const QDateTime &knownPreviousTime = {}) const; 0057 0058 Location stationToLocation(const KPublicTransport::SrbStation &station) const; 0059 0060 QString makeSearchableName(QString name) const; 0061 0062 QString identifierName() const; 0063 0064 std::unordered_map<int, std::shared_ptr<SrbStation>> m_stationsById; 0065 std::unordered_map<QString, std::shared_ptr<SrbStation>> m_stationsBySearchName; 0066 0067 QPointer<AsyncTask<void>> m_fetchStationsTask = nullptr; 0068 }; 0069 0070 }