diff --git a/src/blackcore/simulatorcommon.cpp b/src/blackcore/simulatorcommon.cpp index 16b65eb13..687c84fdb 100644 --- a/src/blackcore/simulatorcommon.cpp +++ b/src/blackcore/simulatorcommon.cpp @@ -71,6 +71,8 @@ namespace BlackCore if (sApp && sApp->getWebDataServices()) { connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, &CSimulatorCommon::ps_allSwiftDataRead); + connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbAirportsRead, this, &CSimulatorCommon::ps_airportsRead); + connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbModelMatchingEntities, this, &CSimulatorCommon::ps_modelMatchingEntities); } // info @@ -215,7 +217,7 @@ namespace BlackCore else { // we wait for the data - connect(sApp->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, [ = ] + connect(sApp->getWebDataServices(), &CWebDataServices::swiftDbModelMatchingEntities, this, [ = ] { this->reverseLookupAndUpdateOwnAircraftModel(model); }); @@ -246,6 +248,16 @@ namespace BlackCore // void } + void CSimulatorCommon::ps_modelMatchingEntities() + { + // void + } + + void CSimulatorCommon::ps_airportsRead() + { + // void + } + CAircraftModel CSimulatorCommon::getDefaultModel() const { return m_defaultModel; diff --git a/src/blackcore/simulatorcommon.h b/src/blackcore/simulatorcommon.h index 5f928a208..5acf5fb7d 100644 --- a/src/blackcore/simulatorcommon.h +++ b/src/blackcore/simulatorcommon.h @@ -104,6 +104,12 @@ namespace BlackCore //! All swift data read from DB virtual void ps_allSwiftDataRead(); + //! DB models read + virtual void ps_modelMatchingEntities(); + + //! DB Airports read + virtual void ps_airportsRead(); + protected: //! Constructor CSimulatorCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info, diff --git a/src/blackcore/webdataservices.cpp b/src/blackcore/webdataservices.cpp index 6b9ccc1d2..84f97aac5 100644 --- a/src/blackcore/webdataservices.cpp +++ b/src/blackcore/webdataservices.cpp @@ -170,6 +170,11 @@ namespace BlackCore return false; } + void CWebDataServices::resetSignalFlags() + { + m_signaledEntities.clear(); + } + bool CWebDataServices::hasDbAircraftData() const { return (this->getModelsCount() > 0) && (this->getLiveriesCount() > 0) && (this->getDistributorsCount() > 0) && (this->getAircraftIcaoCodesCount() > 0); @@ -825,6 +830,13 @@ namespace BlackCore this); } + bool CWebDataServices::signalEntitiesRead(CEntityFlags::Entity entities) + { + if (m_signaledEntities.contains(entities)) { return false; } + m_signaledEntities.insert(entities); + return true; + } + void CWebDataServices::ps_receivedBookings(const CAtcStationList &stations) { CLogMessage(this).info("Read %1 ATC bookings from network") << stations.size(); @@ -840,7 +852,7 @@ namespace BlackCore CLogMessage(this).info("Read VATSIM data file, %1 lines") << lines; } - void CWebDataServices::ps_readFromSwiftDb(CEntityFlags::Entity entity, CEntityFlags::ReadState state, int number) + void CWebDataServices::ps_readFromSwiftDb(CEntityFlags::Entity entities, CEntityFlags::ReadState state, int number) { static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::webservice()})); @@ -850,24 +862,41 @@ namespace BlackCore const CStatusMessage::StatusSeverity severity = CEntityFlags::flagToSeverity(state); if (severity == CStatusMessage::SeverityWarning) { - CLogMessage(cats).warning("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); + CLogMessage(cats).warning("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entities) << number << CEntityFlags::flagToString(state); } else { - CLogMessage(cats).error("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); + CLogMessage(cats).error("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entities) << number << CEntityFlags::flagToString(state); } } else { - CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); + CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entities) << number << CEntityFlags::flagToString(state); } - this->m_swiftDbEntitiesRead |= entity; + this->m_swiftDbEntitiesRead |= entities; const int allUsedEntities = static_cast(this->allDbEntiiesForUsedReaders()); if (((static_cast(this->m_swiftDbEntitiesRead)) & allUsedEntities) == allUsedEntities) { emit allSwiftDbDataRead(); } + + // individual signals + if (state == CEntityFlags::ReadFinished || state == CEntityFlags::ReadFinishedRestricted) + { + if (entities.testFlag(CEntityFlags::AirportEntity) && signalEntitiesRead(CEntityFlags::AirportEntity)) { emit swiftDbAirportsRead(); } + if (entities.testFlag(CEntityFlags::AirlineIcaoEntity) && signalEntitiesRead(CEntityFlags::AirlineIcaoEntity)) { emit swiftDbAirlineIcaoRead(); } + if (entities.testFlag(CEntityFlags::AircraftIcaoEntity) && signalEntitiesRead(CEntityFlags::AircraftIcaoEntity)) { emit swiftDbAircraftIcaoRead(); } + if (entities.testFlag(CEntityFlags::ModelEntity) && signalEntitiesRead(CEntityFlags::ModelEntity)) { emit swiftDbModelsRead(); } + if (m_swiftDbEntitiesRead.testFlag(CEntityFlags::AllIcaoEntities) && signalEntitiesRead(CEntityFlags::AllIcaoEntities)) + { + emit swiftDbAllIcaoEntities(); + } + if (m_swiftDbEntitiesRead.testFlag(CEntityFlags::ModelMatchingEntities) && signalEntitiesRead(CEntityFlags::ModelMatchingEntities)) + { + emit swiftDbModelMatchingEntities(); + } + } } void CWebDataServices::readDeferredInBackground(CEntityFlags::Entity entities, int delayMs) diff --git a/src/blackcore/webdataservices.h b/src/blackcore/webdataservices.h index 70c592feb..1e5c942f7 100644 --- a/src/blackcore/webdataservices.h +++ b/src/blackcore/webdataservices.h @@ -350,6 +350,9 @@ namespace BlackCore //! Can connect to swift DB? bool canConnectSwiftDb() const; + //! Reset the flags what was already signaled + void resetSignalFlags(); + //! All DB data for an aircraft entity available? bool hasDbAircraftData() const; @@ -369,7 +372,32 @@ namespace BlackCore //! All swift DB data have been read void allSwiftDbDataRead(); - //! Header of shared file read + // simplified signals + // 1) simple signature + // 2) fired direct after read, no need to wait for other entities + + //! \name Simplified read signals + //! @{ + //! All models read + void swiftDbModelsRead(); + + //! Aircraft ICAO data read + void swiftDbAircraftIcaoRead(); + + //! Airline ICAO data read + void swiftDbAirlineIcaoRead(); + + //! Airports read + void swiftDbAirportsRead(); + + //! All ICAO entities + void swiftDbAllIcaoEntities(); + + //! All entities needed for model matching + void swiftDbModelMatchingEntities(); + //! @} + + //! //! Header of shared file read void sharedFileHeaderRead(BlackMisc::Network::CEntityFlags::Entity entity, const QString &fileName, bool success); public slots: @@ -390,7 +418,7 @@ namespace BlackCore void ps_vatsimDataFileRead(int lines); //! Read finished from reader - void ps_readFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState state, int number); + void ps_readFromSwiftDb(BlackMisc::Network::CEntityFlags::Entity entities, BlackMisc::Network::CEntityFlags::ReadState state, int number); private: //! Init the readers @@ -402,12 +430,16 @@ namespace BlackCore //! Init the writers void initWriters(); + //! Remember this entity/those enties already have been signaled + bool signalEntitiesRead(BlackMisc::Network::CEntityFlags::Entity entities); + CWebReaderFlags::WebReader m_readers = CWebReaderFlags::WebReaderFlag::None; //!< which readers are available BlackCore::Db::CDatabaseReaderConfigList m_dbReaderConfig; //!< how to read DB data BlackMisc::Network::CEntityFlags::Entity m_entitiesPeriodicallyRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< those entities which are permanently updated by timers BlackMisc::Network::CEntityFlags::Entity m_swiftDbEntitiesRead = BlackMisc::Network::CEntityFlags::NoEntity; //!< entities read - bool m_initialRead = false; //!< Initial read started - int m_infoObjectTrials = 0; //!< Tried to read info objects + bool m_initialRead = false; //!< Initial read started + int m_infoObjectTrials = 0; //!< Tried to read info objects + QSet m_signaledEntities; //!< remember signales entites // for reading XML and VATSIM data files Vatsim::CVatsimStatusFileReader *m_vatsimStatusReader = nullptr; @@ -420,7 +452,7 @@ namespace BlackCore Db::CAirportDataReader *m_airportDataReader = nullptr; // writing objects directly into DB - Db::CDatabaseWriter *m_databaseWriter = nullptr; + Db::CDatabaseWriter *m_databaseWriter = nullptr; }; } // namespace diff --git a/src/blackgui/components/aircraftmodelstringcompleter.cpp b/src/blackgui/components/aircraftmodelstringcompleter.cpp index 2b2e61ac6..832ccc81d 100644 --- a/src/blackgui/components/aircraftmodelstringcompleter.cpp +++ b/src/blackgui/components/aircraftmodelstringcompleter.cpp @@ -36,7 +36,7 @@ namespace BlackGui ui->le_modelString->setValidator(new CUpperCaseValidator(ui->le_modelString)); connect(ui->le_modelString, &QLineEdit::editingFinished, this, &CAircraftModelStringCompleter::ps_textChanged); - connect(sGui->getWebDataServices(), &CWebDataServices::allSwiftDbDataRead, this, &CAircraftModelStringCompleter::ps_swiftWebDataRead); + connect(sGui->getWebDataServices(), &CWebDataServices::swiftDbModelsRead, this, &CAircraftModelStringCompleter::ps_swiftModelDataRead); connect(ui->rb_Db, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui); connect(ui->rb_ModelSet, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui); connect(ui->rb_OwnModels, &QRadioButton::clicked, this, &CAircraftModelStringCompleter::ps_initGui); @@ -156,7 +156,7 @@ namespace BlackGui this->ps_initGui(); } - void CAircraftModelStringCompleter::ps_swiftWebDataRead() + void CAircraftModelStringCompleter::ps_swiftModelDataRead() { this->ps_initGui(); } diff --git a/src/blackgui/components/aircraftmodelstringcompleter.h b/src/blackgui/components/aircraftmodelstringcompleter.h index 48a812325..3804db741 100644 --- a/src/blackgui/components/aircraftmodelstringcompleter.h +++ b/src/blackgui/components/aircraftmodelstringcompleter.h @@ -92,7 +92,7 @@ namespace BlackGui void ps_simulatorConnected(int status); //! All swift data have been read - void ps_swiftWebDataRead(); + void ps_swiftModelDataRead(); private: QScopedPointer ui; diff --git a/src/blackmisc/network/entityflags.h b/src/blackmisc/network/entityflags.h index 8bc6ce54c..97b8abfb3 100644 --- a/src/blackmisc/network/entityflags.h +++ b/src/blackmisc/network/entityflags.h @@ -49,6 +49,7 @@ namespace BlackMisc AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded + ModelMatchingEntities = AllIcaoEntities | LiveryEntity | ModelEntity, //!< all needed for model matching AllDbEntities = AllIcaoAndCountries | DistributorLiveryModel | InfoObjectEntity | AirportEntity, //!< All DB stuff AllDbEntitiesNoInfoObjects = AllIcaoAndCountries | DistributorLiveryModel | AirportEntity, //!< All DB entities, no info objects AllDbEntitiesNoInfoObjectsNoAirports = AllIcaoAndCountries | DistributorLiveryModel //!< All DB entities, no info objects and airports diff --git a/src/plugins/simulator/fscommon/simulatorfscommon.cpp b/src/plugins/simulator/fscommon/simulatorfscommon.cpp index 5bf9da1b0..f669365ae 100644 --- a/src/plugins/simulator/fscommon/simulatorfscommon.cpp +++ b/src/plugins/simulator/fscommon/simulatorfscommon.cpp @@ -110,14 +110,14 @@ namespace BlackSimPlugin return true; } - void CSimulatorFsCommon::ps_allSwiftDataRead() + void CSimulatorFsCommon::ps_airportsRead() { const CAirportList webServiceAirports = this->getWebServiceAirports(); if (!webServiceAirports.isEmpty()) { this->m_airportsInRangeFromSimulator.updateMissingParts(webServiceAirports); } - CSimulatorCommon::ps_allSwiftDataRead(); + CSimulatorCommon::ps_airportsRead(); } } // namespace } // namespace diff --git a/src/plugins/simulator/fscommon/simulatorfscommon.h b/src/plugins/simulator/fscommon/simulatorfscommon.h index 4704fa9ce..5c3e9f84b 100644 --- a/src/plugins/simulator/fscommon/simulatorfscommon.h +++ b/src/plugins/simulator/fscommon/simulatorfscommon.h @@ -47,7 +47,7 @@ namespace BlackSimPlugin protected slots: //! \copydoc BlackCore::CSimulatorCommon::ps_allSwiftDataRead - virtual void ps_allSwiftDataRead() override; + virtual void ps_airportsRead() override; protected: //! Constructor