From c57a9e2e5bb2d25daf824fb166871a5f2138e8ff Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 27 Oct 2016 02:03:10 +0200 Subject: [PATCH] Fixed reload all DB data issue reported by MS on slack * use triggerReloadFromDb * improved documentation MS report: `AllDbEntities` should be `AllDbEntitiesNoInfoObjects` in `CDataInfoAreaComponent::requestUpdateOfAllDbData`? Otherwise it triggers assert `!whatToRead.testFlag(CEntityFlags::InfoObjectEntity)` in `CWebDataServices::triggerRead`. --- src/blackcore/webdataservices.cpp | 20 +++++++++++++++++++ src/blackcore/webdataservices.h | 3 ++- .../components/datainfoareacomponent.cpp | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/blackcore/webdataservices.cpp b/src/blackcore/webdataservices.cpp index b9294c594..733f7798f 100644 --- a/src/blackcore/webdataservices.cpp +++ b/src/blackcore/webdataservices.cpp @@ -244,6 +244,15 @@ namespace BlackCore CEntityFlags::Entity CWebDataServices::triggerReloadFromDb(CEntityFlags::Entity whatToRead, const QDateTime &newerThan) { CEntityFlags::Entity triggeredRead = CEntityFlags::NoEntity; + + if (m_infoDataReader) + { + // when possible update info objects + CEntityFlags::Entity infoObjectEntity = CEntityFlags::InfoObjectEntity; + m_infoDataReader->startReadFromDbInBackgroundThread(infoObjectEntity, newerThan); + triggeredRead |= infoObjectEntity; + } + if (m_icaoDataReader) { if (whatToRead.testFlag(CEntityFlags::AircraftIcaoEntity) || whatToRead.testFlag(CEntityFlags::AirlineIcaoEntity) || whatToRead.testFlag(CEntityFlags::CountryEntity)) @@ -263,6 +272,17 @@ namespace BlackCore triggeredRead |= modelEntities; } } + + if (m_airportDataReader) + { + if (whatToRead.testFlag(CEntityFlags::AirportEntity)) + { + CEntityFlags::Entity airportEntity = whatToRead & CEntityFlags::AirportEntity; + m_airportDataReader->startReadFromDbInBackgroundThread(airportEntity, newerThan); + triggeredRead |= airportEntity; + } + } + return triggeredRead; } diff --git a/src/blackcore/webdataservices.h b/src/blackcore/webdataservices.h index 6622ab2c0..df9797023 100644 --- a/src/blackcore/webdataservices.h +++ b/src/blackcore/webdataservices.h @@ -311,9 +311,10 @@ namespace BlackCore BlackMisc::CStatusMessageList asyncPublishModels(const BlackMisc::Simulation::CAircraftModelList &models) const; //! Trigger read of new data + //! \note requires info objects loaded upfront and uses the full cache logic BlackMisc::Network::CEntityFlags::Entity triggerRead(BlackMisc::Network::CEntityFlags::Entity whatToRead, const QDateTime &newerThan = QDateTime()); - //! Trigger reload from DB + //! Trigger reload from DB, only loads the DB data and bypasses the caches checks and info objects BlackMisc::Network::CEntityFlags::Entity triggerReloadFromDb(BlackMisc::Network::CEntityFlags::Entity whatToRead, const QDateTime &newerThan = QDateTime()); //! Corresponding cache timestamp if applicable diff --git a/src/blackgui/components/datainfoareacomponent.cpp b/src/blackgui/components/datainfoareacomponent.cpp index 32eeacba7..7dff0657a 100644 --- a/src/blackgui/components/datainfoareacomponent.cpp +++ b/src/blackgui/components/datainfoareacomponent.cpp @@ -165,7 +165,7 @@ namespace BlackGui void CDataInfoAreaComponent::requestUpdateOfAllDbData() { - sGui->getWebDataServices()->triggerRead(CEntityFlags::AllDbEntities, QDateTime()); + sGui->getWebDataServices()->triggerReloadFromDb(CEntityFlags::AllDbEntitiesNoInfoObjectsNoAirports, QDateTime()); } void CDataInfoAreaComponent::requestUpdatedData(CEntityFlags::Entity entity)