地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.3 KiB

/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
/**
* @file
* @brief Map Tile Cache Worker Thread
*
* @author Gus Grubba <mavlink@grubba.com>
*
*/
#ifndef QGC_TILE_CACHE_WORKER_H
#define QGC_TILE_CACHE_WORKER_H
#include <QString>
#include <QThread>
#include <QQueue>
#include <QMutex>
#include <QWaitCondition>
#include <QMutexLocker>
#include <QtSql/QSqlDatabase>
#include <QHostInfo>
#include "QGCLoggingCategory.h"
Q_DECLARE_LOGGING_CATEGORY(QGCTileCacheLog)
class QGCMapTask;
class QGCCachedTileSet;
//-----------------------------------------------------------------------------
class QGCCacheWorker : public QThread
{
Q_OBJECT
public:
QGCCacheWorker ();
~QGCCacheWorker ();
void quit ();
bool enqueueTask (QGCMapTask* task);
void setDatabaseFile (const QString& path);
protected:
void run ();
private slots:
void _lookupReady (QHostInfo info);
private:
void _saveTile (QGCMapTask* mtask);
void _getTile (QGCMapTask* mtask);
void _getTileSets (QGCMapTask* mtask);
void _createTileSet (QGCMapTask* mtask);
void _getTileDownloadList (QGCMapTask* mtask);
void _updateTileDownloadState(QGCMapTask* mtask);
void _deleteTileSet (QGCMapTask* mtask);
void _renameTileSet (QGCMapTask* mtask);
void _resetCacheDatabase (QGCMapTask* mtask);
void _pruneCache (QGCMapTask* mtask);
void _exportSets (QGCMapTask* mtask);
void _importSets (QGCMapTask* mtask);
bool _testTask (QGCMapTask* mtask);
void _testInternet ();
quint64 _findTile (const QString hash);
bool _findTileSetID (const QString name, quint64& setID);
void _updateSetTotals (QGCCachedTileSet* set);
bool _init ();
bool _createDB (QSqlDatabase *db, bool createDefault = true);
quint64 _getDefaultTileSet ();
void _updateTotals ();
signals:
void updateTotals (quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);
void internetStatus (bool active);
private:
QQueue<QGCMapTask*> _taskQueue;
QMutex _mutex;
QMutex _waitmutex;
QWaitCondition _waitc;
QString _databasePath;
QSqlDatabase* _db;
bool _valid;
bool _failed;
quint64 _defaultSet;
quint64 _totalSize;
quint32 _totalCount;
quint64 _defaultSize;
quint32 _defaultCount;
time_t _lastUpdate;
int _updateTimeout;
int _hostLookupID;
};
#endif // QGC_TILE_CACHE_WORKER_H