mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 11:55:35 +08:00
refs #602, CWebDataServices and CCookieManager now part of CApplication
* New hint flag: DB data for the client will no longer be web loaded but fetched from cache whenever possible * No public constructors for the 2 classes * adjusted main
This commit is contained in:
committed by
Mathew Sutcliffe
parent
4b7ba4f117
commit
65af7d87da
@@ -7,8 +7,8 @@
|
||||
* contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "application.h"
|
||||
#include "contextnetworkimpl.h"
|
||||
#include "corefacade.h"
|
||||
#include "contextapplication.h"
|
||||
#include "contextsimulator.h"
|
||||
#include "contextownaircraftimpl.h"
|
||||
@@ -57,9 +57,9 @@ namespace BlackCore
|
||||
this->m_networkDataUpdateTimer->start(30 * 1000);
|
||||
|
||||
// 3. data reader, start reading when setup is synced with xx delay
|
||||
this->m_webDataReader = new CWebDataServices(CWebReaderFlags::AllReaders, this);
|
||||
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing web data services");
|
||||
this->m_webReaderSignalConnections.append(
|
||||
this->m_webDataReader->connectDataReadSignal(
|
||||
sApp->getWebDataServices()->connectDataReadSignal(
|
||||
this, // the object here must be the same as in the bind
|
||||
std::bind(&CContextNetwork::webServiceDataRead, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)
|
||||
)
|
||||
@@ -67,8 +67,7 @@ namespace BlackCore
|
||||
|
||||
// 4. Airspace contents
|
||||
Q_ASSERT_X(this->getRuntime()->getCContextOwnAircraft(), Q_FUNC_INFO, "this and own aircraft context must be local");
|
||||
Q_ASSERT_X(this->m_webDataReader, Q_FUNC_INFO, "Missing reader");
|
||||
this->m_airspace = new CAirspaceMonitor(this->getRuntime()->getCContextOwnAircraft(), this->m_network, this->m_webDataReader, this);
|
||||
this->m_airspace = new CAirspaceMonitor(this->getRuntime()->getCContextOwnAircraft(), this->m_network, sApp->getWebDataServices(), this);
|
||||
connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationsOnline, this, &CContextNetwork::changedAtcStationsOnline);
|
||||
connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationsBooked, this, &CContextNetwork::changedAtcStationsBooked);
|
||||
connect(this->m_airspace, &CAirspaceMonitor::changedAtcStationOnlineConnectionStatus, this, &CContextNetwork::changedAtcStationOnlineConnectionStatus);
|
||||
@@ -135,7 +134,6 @@ namespace BlackCore
|
||||
{
|
||||
this->disconnect(); // all signals
|
||||
this->disconnectReaderSignals(); // disconnect
|
||||
this->m_webDataReader->gracefulShutdown();
|
||||
|
||||
if (this->isConnected()) { this->disconnectFromNetwork(); }
|
||||
if (this->m_airspace) { this->m_airspace->gracefulShutdown(); }
|
||||
@@ -374,16 +372,16 @@ namespace BlackCore
|
||||
|
||||
CServerList CContextNetwork::getVatsimFsdServers() const
|
||||
{
|
||||
Q_ASSERT_X(this->m_webDataReader, Q_FUNC_INFO, "Missing data reader");
|
||||
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader");
|
||||
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||
return this->m_webDataReader->getVatsimFsdServers();
|
||||
return sApp->getWebDataServices()->getVatsimFsdServers();
|
||||
}
|
||||
|
||||
CServerList CContextNetwork::getVatsimVoiceServers() const
|
||||
{
|
||||
Q_ASSERT_X(this->m_webDataReader, Q_FUNC_INFO, "Missing data reader");
|
||||
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing data reader");
|
||||
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||
return this->m_webDataReader->getVatsimVoiceServers();
|
||||
return sApp->getWebDataServices()->getVatsimVoiceServers();
|
||||
}
|
||||
|
||||
void CContextNetwork::ps_fsdConnectionStatusChanged(INetwork::ConnectionStatus from, INetwork::ConnectionStatus to)
|
||||
@@ -569,8 +567,8 @@ namespace BlackCore
|
||||
void CContextNetwork::readAtcBookingsFromSource() const
|
||||
{
|
||||
if (this->isDebugEnabled()) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||
Q_ASSERT_X(this->m_webDataReader, Q_FUNC_INFO, "missing reader");
|
||||
this->m_webDataReader->readInBackground(BlackMisc::Network::CEntityFlags::BookingEntity);
|
||||
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "missing reader");
|
||||
sApp->getWebDataServices()->readInBackground(BlackMisc::Network::CEntityFlags::BookingEntity);
|
||||
}
|
||||
|
||||
bool CContextNetwork::updateAircraftRendered(const CCallsign &callsign, bool rendered, const CIdentifier &originator)
|
||||
|
||||
@@ -238,7 +238,6 @@ namespace BlackCore
|
||||
private:
|
||||
CAirspaceMonitor *m_airspace = nullptr;
|
||||
INetwork *m_network = nullptr;
|
||||
CWebDataServices *m_webDataReader = nullptr; //!< web service readers
|
||||
QList<QMetaObject::Connection> m_webReaderSignalConnections;
|
||||
INetwork::ConnectionStatus m_currentStatus = INetwork::Disconnected; //!< used to detect pending connections
|
||||
QTimer *m_networkDataUpdateTimer = nullptr; //!< general updates such as ATIS, frequencies, see requestDataUpdates()
|
||||
|
||||
@@ -18,29 +18,6 @@ using namespace BlackMisc;
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
CCookieManager *CCookieManager::instance()
|
||||
{
|
||||
static CCookieManager *manager = nullptr;
|
||||
if (!manager)
|
||||
{
|
||||
Q_ASSERT_X(CThreadUtils::isCurrentThreadApplicationThread(), Q_FUNC_INFO, "Supposed to run in application thread");
|
||||
manager = new CCookieManager(QCoreApplication::instance());
|
||||
}
|
||||
return manager;
|
||||
}
|
||||
|
||||
void CCookieManager::resetParent()
|
||||
{
|
||||
instance()->setParent(nullptr);
|
||||
}
|
||||
|
||||
void CCookieManager::setToAccessManager(QNetworkAccessManager *manager)
|
||||
{
|
||||
if (!manager) { return; }
|
||||
manager->setCookieJar(instance());
|
||||
resetParent();
|
||||
}
|
||||
|
||||
CCookieManager::CCookieManager(QObject *parent) : QNetworkCookieJar(parent)
|
||||
{
|
||||
// code
|
||||
|
||||
@@ -21,14 +21,17 @@
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
class CApplication;
|
||||
|
||||
/*!
|
||||
* Centralized cookie manager,
|
||||
* which allows thread safe sharing of cookies
|
||||
* Cookie manager, which allows thread safe sharing of cookies
|
||||
*/
|
||||
class BLACKCORE_EXPORT CCookieManager : QNetworkCookieJar
|
||||
class BLACKCORE_EXPORT CCookieManager : public QNetworkCookieJar
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
friend class CApplication;
|
||||
|
||||
public:
|
||||
//! cookiesForUrl::setCookiesFromUrl
|
||||
//! \threadsafe
|
||||
@@ -58,19 +61,10 @@ namespace BlackCore
|
||||
//! \threadsafe
|
||||
virtual bool updateCookie(const QNetworkCookie &cookie) override;
|
||||
|
||||
//! Our central access manager
|
||||
static CCookieManager *instance();
|
||||
|
||||
//! Set the central instance to the given access manager
|
||||
static void setToAccessManager(QNetworkAccessManager *manager);
|
||||
|
||||
private:
|
||||
//! Constructor
|
||||
CCookieManager(QObject *parent = nullptr);
|
||||
|
||||
//! Reset the parent, required when CookieManager is set to QNetworkAccessManager
|
||||
static void resetParent();
|
||||
|
||||
mutable QReadWriteLock m_lock { QReadWriteLock::Recursive };
|
||||
};
|
||||
|
||||
|
||||
@@ -36,9 +36,8 @@ using namespace BlackMisc::Weather;
|
||||
|
||||
namespace BlackCore
|
||||
{
|
||||
CWebDataServices::CWebDataServices(
|
||||
CWebReaderFlags::WebReader readerFlags, QObject *parent) :
|
||||
QObject(parent), m_readerFlags(readerFlags)
|
||||
CWebDataServices::CWebDataServices(CWebReaderFlags::WebReader readerFlags, CWebReaderFlags::DbReaderHint hint, QObject *parent) :
|
||||
QObject(parent), m_readerFlags(readerFlags), m_dbHint(hint)
|
||||
{
|
||||
if (!sApp) { return; } // shutting down
|
||||
|
||||
@@ -47,7 +46,6 @@ namespace BlackCore
|
||||
this->setObjectName("CWebDataReader");
|
||||
this->initReaders(readerFlags);
|
||||
this->initWriters();
|
||||
|
||||
this->readInBackground(CEntityFlags::AllEntities, 500);
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ namespace BlackCore
|
||||
class CIcaoDataReader;
|
||||
class CModelDataReader;
|
||||
class CDatabaseWriter;
|
||||
class CApplication;
|
||||
|
||||
/*!
|
||||
* Encapsulates reading data from web sources
|
||||
@@ -49,10 +50,9 @@ namespace BlackCore
|
||||
Q_OBJECT
|
||||
Q_INTERFACES(BlackMisc::Network::IWebDataServicesProvider)
|
||||
|
||||
public:
|
||||
//! Constructor
|
||||
CWebDataServices(CWebReaderFlags::WebReader readerFlags, QObject *parent = nullptr);
|
||||
friend class CApplication;
|
||||
|
||||
public:
|
||||
//! Shutdown
|
||||
void gracefulShutdown();
|
||||
|
||||
@@ -71,6 +71,9 @@ namespace BlackCore
|
||||
//! Reader flags
|
||||
CWebReaderFlags::WebReader getReaderFlags() const { return m_readerFlags; }
|
||||
|
||||
//! Reader flags
|
||||
CWebReaderFlags::DbReaderHint getDbHint() const { return m_dbHint; }
|
||||
|
||||
//! Log categories
|
||||
static const BlackMisc::CLogCategoryList &getLogCategories();
|
||||
|
||||
@@ -133,10 +136,13 @@ namespace BlackCore
|
||||
|
||||
// ------------------------ provider functionality end ----------------------------
|
||||
|
||||
protected:
|
||||
//! Constructor
|
||||
CWebDataServices(CWebReaderFlags::WebReader readerFlags, CWebReaderFlags:: DbReaderHint hint, QObject *parent = nullptr);
|
||||
|
||||
// ---------------------------------------------
|
||||
// Consider to use the connect method of the provider to connect by entity
|
||||
// ---------------------------------------------
|
||||
|
||||
public slots:
|
||||
//! First read (allows to immediately read in background)
|
||||
void readInBackground(BlackMisc::Network::CEntityFlags::Entity entities = BlackMisc::Network::CEntityFlags::AllEntities, int delayMs = 0);
|
||||
@@ -165,6 +171,7 @@ namespace BlackCore
|
||||
void initWriters();
|
||||
|
||||
CWebReaderFlags::WebReader m_readerFlags = CWebReaderFlags::WebReaderFlag::None; //!< which readers are available
|
||||
CWebReaderFlags::DbReaderHint m_dbHint = CWebReaderFlags::NoHint; //!< how to read DB data
|
||||
bool m_initialRead = false; //!< Initial read conducted
|
||||
BlackMisc::CData<BlackCore::Data::GlobalSetup> m_setup {this, &CWebDataServices::ps_setupChanged}; //!< setup cache
|
||||
|
||||
|
||||
@@ -40,6 +40,16 @@ namespace BlackCore
|
||||
};
|
||||
Q_DECLARE_FLAGS(WebReader, WebReaderFlag)
|
||||
|
||||
//! How to read DB data
|
||||
enum DbReaderHintFlag
|
||||
{
|
||||
NoHint = 0,
|
||||
FromDb = 1 << 1, ///< directly from DB
|
||||
FromJsonFile = 1 << 2, ///< from the JSON files
|
||||
FromCache = 1 << 3, ///< try cache first
|
||||
};
|
||||
Q_DECLARE_FLAGS(DbReaderHint, DbReaderHintFlag)
|
||||
|
||||
//! Relationship between reader and entity
|
||||
static WebReader entityToReader(BlackMisc::Network::CEntityFlags::Entity entity);
|
||||
|
||||
@@ -53,6 +63,9 @@ namespace BlackCore
|
||||
|
||||
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReaderFlag)
|
||||
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::WebReader)
|
||||
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::DbReaderHintFlag)
|
||||
Q_DECLARE_METATYPE(BlackCore::CWebReaderFlags::DbReaderHint)
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::WebReader)
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::CWebReaderFlags::DbReaderHint)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -28,7 +28,9 @@ using namespace BlackGui;
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication qa(argc, argv);
|
||||
Q_UNUSED(qa);
|
||||
CGuiApplication a("swift mapping tool", CIcons::swiftDatabase48());
|
||||
a.useWebDataServices(BlackCore::CWebReaderFlags::AllSwiftDbReaders, BlackCore::CWebReaderFlags::FromDb);
|
||||
a.start();
|
||||
CSwiftData w;
|
||||
w.show();
|
||||
|
||||
@@ -32,8 +32,7 @@ using namespace BlackGui::Components;
|
||||
CSwiftData::CSwiftData(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
CIdentifiable(this),
|
||||
ui(new Ui::CSwiftData),
|
||||
m_webDataReader(new CWebDataServices(CWebReaderFlags::AllSwiftDbReaders, this))
|
||||
ui(new Ui::CSwiftData)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->init();
|
||||
@@ -58,7 +57,7 @@ void CSwiftData::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
this->performGracefulShutdown();
|
||||
QApplication::exit();
|
||||
sGui->exit();
|
||||
}
|
||||
|
||||
void CSwiftData::ps_appendLogMessage(const CStatusMessage &message)
|
||||
@@ -100,9 +99,9 @@ void CSwiftData::initLogDisplay()
|
||||
|
||||
void CSwiftData::initReaders()
|
||||
{
|
||||
Q_ASSERT_X(this->m_webDataReader, Q_FUNC_INFO, "Missing reader");
|
||||
this->ui->comp_MainInfoArea->setProvider(this->m_webDataReader);
|
||||
this->ui->comp_InfoBar->setProvider(this->m_webDataReader);
|
||||
Q_ASSERT_X(sApp->getWebDataServices(), Q_FUNC_INFO, "Missing reader");
|
||||
this->ui->comp_MainInfoArea->setProvider(sApp->getWebDataServices());
|
||||
this->ui->comp_InfoBar->setProvider(sApp->getWebDataServices());
|
||||
// web data will be read automatically when setup is syncronized
|
||||
}
|
||||
|
||||
@@ -139,11 +138,7 @@ void CSwiftData::initMenu()
|
||||
|
||||
void CSwiftData::performGracefulShutdown()
|
||||
{
|
||||
if (this->m_webDataReader)
|
||||
{
|
||||
m_webDataReader->gracefulShutdown();
|
||||
m_webDataReader = nullptr;
|
||||
}
|
||||
// void
|
||||
}
|
||||
|
||||
void CSwiftData::displayConsole()
|
||||
|
||||
@@ -72,7 +72,6 @@ private:
|
||||
|
||||
QScopedPointer<Ui::CSwiftData> ui;
|
||||
BlackGui::CManagedStatusBar m_statusBar;
|
||||
BlackCore::CWebDataServices *m_webDataReader = nullptr;
|
||||
BlackMisc::CData<BlackCore::Data::GlobalSetup> m_setup {this, &CSwiftData::ps_setupChanged}; //!< setup cache
|
||||
BlackMisc::CData<BlackCore::Data::UpdateInfo> m_updateInfo { this }; //!< download / version data
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@ CSwiftGuiStdApplication::CSwiftGuiStdApplication() : CGuiApplication("swift pilo
|
||||
this->addParserOption(this->m_cmdFacadeMode);
|
||||
this->addWindowModeOption();
|
||||
this->addDBusAddressOption();
|
||||
this->useWebDataServices(CWebReaderFlags::AllReaders, CWebReaderFlags::FromCache);
|
||||
}
|
||||
|
||||
bool CSwiftGuiStdApplication::startHookIn()
|
||||
|
||||
Reference in New Issue
Block a user