QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCTileCacheWorker.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QElapsedTimer>
4#include <QtCore/QMutex>
5#include <QtCore/QQueue>
6#include <QtCore/QString>
7#include <QtCore/QThread>
8#include <QtCore/QWaitCondition>
9
10#include <memory>
11
12#ifdef QGC_UNITTEST_BUILD
13#include <functional>
14#endif
15
16class QGCMapTask;
18
19#ifdef QGC_UNITTEST_BUILD
20struct QGCCacheTile;
21#endif
22
23class QGCCacheWorker : public QThread
24{
25 Q_OBJECT
26
27public:
28 explicit QGCCacheWorker(QObject *parent = nullptr);
30
31 void setDatabaseFile(const QString &path) { if (isRunning()) { return; } _databasePath = path; }
32
33#ifdef QGC_UNITTEST_BUILD
42 static void setUnitTestTileGenerator(std::function<QGCCacheTile*(const QString &hash)> generator);
43#endif
44
45public slots:
46 bool enqueueTask(QGCMapTask *task);
47 void stop();
48
49signals:
50 void updateTotals(quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);
51
52protected:
53 void run() final;
54
55private:
56 void _runTask(QGCMapTask *task);
57
58 void _saveTile(QGCMapTask *task);
59 void _getTile(QGCMapTask *task);
60 void _getTileSets(QGCMapTask *task);
61 void _createTileSet(QGCMapTask *task);
62 void _getTileDownloadList(QGCMapTask *task);
63 void _updateTileDownloadState(QGCMapTask *task);
64 void _pruneCache(QGCMapTask *task);
65 void _deleteTileSet(QGCMapTask *task);
66 void _renameTileSet(QGCMapTask *task);
67 void _resetCacheDatabase(QGCMapTask *task);
68 void _importSets(QGCMapTask *task);
69 void _exportSets(QGCMapTask *task);
70 bool _testTask(QGCMapTask *task);
71 void _emitTotals();
72
73 std::unique_ptr<QGCTileCacheDatabase> _database;
74 QMutex _taskQueueMutex;
75 QQueue<QGCMapTask*> _taskQueue;
76 QWaitCondition _waitc;
77 QString _databasePath;
78 QElapsedTimer _updateTimer;
79 int _updateTimeout = kShortTimeoutMs;
80 std::atomic_bool _dbValid = false;
81 std::atomic_bool _stopRequested = false;
82
83 static constexpr int kShortTimeoutMs = 2000;
84 static constexpr int kLongTimeoutMs = 5000;
85
86#ifdef QGC_UNITTEST_BUILD
87 static std::function<QGCCacheTile*(const QString&)> _unitTestTileGenerator;
88#endif
89};
bool enqueueTask(QGCMapTask *task)
void updateTotals(quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize)
void setDatabaseFile(const QString &path)