File indexing completed on 2024-04-28 15:39:05
0001 // SPDX-FileCopyrightText: 2020-2022 Tobias Leupold <tl at stonemx dot de> 0002 // 0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #ifndef ELEVATIONENGINE_H 0006 #define ELEVATIONENGINE_H 0007 0008 // Qt includes 0009 #include <QObject> 0010 #include <QHash> 0011 #include <QVector> 0012 0013 // Local classes 0014 class Settings; 0015 class Coordinates; 0016 0017 // Qt classes 0018 class QNetworkAccessManager; 0019 class QNetworkReply; 0020 class QTimer; 0021 0022 class ElevationEngine : public QObject 0023 { 0024 Q_OBJECT 0025 0026 public: 0027 enum Target { 0028 Image, 0029 Bookmark 0030 }; 0031 0032 explicit ElevationEngine(QObject *parent, Settings *settings); 0033 void request(Target target, const QVector<QString> &ids, 0034 const QVector<Coordinates> &coordinates); 0035 0036 Q_SIGNALS: 0037 void lookupFailed(const QString &errorMessage); 0038 void notAllPresent(int locationsCount, int elevationsCount); 0039 void elevationProcessed(Target target, const QVector<QString> &ids, 0040 const QVector<double> &elevations); 0041 0042 private Q_SLOTS: 0043 void processNextRequest(); 0044 void cleanUpRequest(QNetworkReply *request); 0045 void processReply(QNetworkReply *reply); 0046 0047 private: // Functions 0048 void removeRequest(QNetworkReply *request); 0049 0050 private: // Variables 0051 struct RequestData 0052 { 0053 Target target; 0054 QVector<QString> ids; 0055 }; 0056 0057 Settings *m_settings; 0058 0059 QNetworkAccessManager *m_manager; 0060 0061 QTimer *m_requestTimer; 0062 QVector<Target> m_queuedTargets; 0063 QVector<QVector<QString>> m_queuedIds; 0064 QVector<QString> m_queuedLocations; 0065 0066 QHash<QNetworkReply *, RequestData> m_requests; 0067 0068 }; 0069 0070 #endif // ELEVATIONENGINE_H