diff --git a/src/blackcore/db/databasereaderconfig.cpp b/src/blackcore/db/databasereaderconfig.cpp index 7e8e993fa..2d9df6f86 100644 --- a/src/blackcore/db/databasereaderconfig.cpp +++ b/src/blackcore/db/databasereaderconfig.cpp @@ -42,6 +42,14 @@ namespace BlackCore return static_cast(this->m_entities); } + bool CDatabaseReaderConfig::supportsEntities(CEntityFlags::Entity entities) const + { + const int myEntities = static_cast(this->getEntities()); + const int testEnties = static_cast(entities); + const int common = myEntities & testEnties; + return (common == testEnties) || (common == myEntities); + } + CDbFlags::DataRetrievalMode CDatabaseReaderConfig::getRetrievalMode() const { return static_cast(this->m_retrievalFlags); @@ -63,7 +71,28 @@ namespace BlackCore { if (!this->isValid()) { return false; } if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; } - return (this->getRetrievalMode().testFlag(CDbFlags::DbDirect) || this->getRetrievalMode().testFlag(CDbFlags::Shared)); + return (this->getRetrievalMode().testFlag(CDbFlags::DbReading)); + } + + bool CDatabaseReaderConfig::needsSharedHeader() const + { + if (!this->isValid()) { return false; } + if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; } + return (this->getRetrievalMode().testFlag(CDbFlags::Shared) || this->getRetrievalMode().testFlag(CDbFlags::SharedHeadersOnly)); + } + + bool CDatabaseReaderConfig::needsSharedHeaderLoaded() const + { + if (!this->isValid()) { return false; } + if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; } + return (this->getRetrievalMode().testFlag(CDbFlags::Shared)); + } + + bool CDatabaseReaderConfig::possiblyWritesToSwiftDb() const + { + if (!this->isValid()) { return false; } + if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; } + return (this->getRetrievalMode().testFlag(CDbFlags::DbWriting)); } bool CDatabaseReaderConfig::possiblyReadsFromCache() const @@ -124,6 +153,35 @@ namespace BlackCore return false; } + bool CDatabaseReaderConfigList::possiblyWritesToSwiftDb() const + { + for (const CDatabaseReaderConfig &config : *this) + { + if (config.possiblyWritesToSwiftDb()) { return true; } + } + return false; + } + + bool CDatabaseReaderConfigList::needsSharedHeaders(CEntityFlags::Entity entities) const + { + for (const CDatabaseReaderConfig &config : *this) + { + if (!config.supportsEntities(entities)) { continue; } + if (config.needsSharedHeader()) { return true; } + } + return false; + } + + bool CDatabaseReaderConfigList::needsSharedHeadersLoaded(CEntityFlags::Entity entities) const + { + for (const CDatabaseReaderConfig &config : *this) + { + if (!config.supportsEntities(entities)) { continue; } + if (config.needsSharedHeaderLoaded()) { return true; } + } + return false; + } + CEntityFlags::Entity CDatabaseReaderConfigList::getEntitesCachedOrReadFromDB() const { CEntityFlags::Entity entities = CEntityFlags::NoEntity; @@ -139,51 +197,65 @@ namespace BlackCore CDatabaseReaderConfigList CDatabaseReaderConfigList::forMappingTool() { - const CTime timeout(5.0, CTimeUnit::min()); - const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb; + const CTime cacheLifetime(5.0, CTimeUnit::min()); + CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb; + retrievalFlags |= CDbFlags::DbWriting; CDatabaseReaderConfigList l; - l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore, timeout)); // not needed in mapping tool - l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, timeout)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore, cacheLifetime)); // not needed in mapping tool + l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime)); return l; } CDatabaseReaderConfigList CDatabaseReaderConfigList::forPilotClient() { - const CTime timeout(24.0, CTimeUnit::h()); - const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb; + const CTime cacheLifetime(30.0, CTimeUnit::d()); + const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheAndSharedHeaders; + CDbFlags::DataRetrievalMode retrievalFlagsWriting = retrievalFlags; + retrievalFlagsWriting |= CDbFlags::DbWriting; + CDatabaseReaderConfigList l; - l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, timeout)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlagsWriting, cacheLifetime)); // for wizard + l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime)); return l; } CDatabaseReaderConfigList CDatabaseReaderConfigList::forLauncher() { - return forPilotClient(); + const CTime cacheLifetime(30.0, CTimeUnit::d()); + const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenShared; + CDatabaseReaderConfigList l; + l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore, cacheLifetime)); // not needed in mapping tool + l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime)); + return l; } CDatabaseReaderConfigList CDatabaseReaderConfigList::allDirectDbAccess() { - const CTime timeout(0.0, CTimeUnit::min()); - const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::DbDirect; + const CTime cacheLifetime(0.0, CTimeUnit::min()); + const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::DbReading; CDatabaseReaderConfigList l; - l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, timeout)); - l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, timeout)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime)); + l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime)); return l; } } // ns diff --git a/src/blackcore/db/databasereaderconfig.h b/src/blackcore/db/databasereaderconfig.h index c564db8a1..1a994ec47 100644 --- a/src/blackcore/db/databasereaderconfig.h +++ b/src/blackcore/db/databasereaderconfig.h @@ -50,6 +50,9 @@ namespace BlackCore //! Supported entities BlackMisc::Network::CEntityFlags::Entity getEntities() const; + //! Supports given entites? + bool supportsEntities(BlackMisc::Network::CEntityFlags::Entity entities) const; + //! Supported modes BlackMisc::Db::CDbFlags::DataRetrievalMode getRetrievalMode() const; @@ -62,6 +65,15 @@ namespace BlackCore //! Will read from swift DB bool possiblyReadsFromSwiftDb() const; + //! Needs the shared header + bool needsSharedHeader() const; + + //! Needs the shared header loaded before it can be continued + bool needsSharedHeaderLoaded() const; + + //! Will write to swift DB + bool possiblyWritesToSwiftDb() const; + //! Will read from cache bool possiblyReadsFromCache() const; @@ -70,7 +82,7 @@ namespace BlackCore private: int m_entities = BlackMisc::Network::CEntityFlags::NoEntity; //!< BlackMisc::Network::CEntityFlags::Entity - int m_retrievalFlags = BlackMisc::Db::CDbFlags::DbDirect; //!< BlackMisc::Db::CDbFlags::DataRetrievalMode + int m_retrievalFlags = BlackMisc::Db::CDbFlags::DbReading; //!< BlackMisc::Db::CDbFlags::DataRetrievalMode BlackMisc::PhysicalQuantities::CTime m_cacheLifetime; BLACK_METACLASS( @@ -106,6 +118,15 @@ namespace BlackCore //! Will read from swift DB bool possiblyReadsFromSwiftDb() const; + //! Will write to swift DB + bool possiblyWritesToSwiftDb() const; + + //! Needs any shared header + bool needsSharedHeaders(BlackMisc::Network::CEntityFlags::Entity entities) const; + + //! Needs any shared header loaded before continued + bool needsSharedHeadersLoaded(BlackMisc::Network::CEntityFlags::Entity entities) const; + //! Entities which will use cache or DB, so no canceled or ignored ones BlackMisc::Network::CEntityFlags::Entity getEntitesCachedOrReadFromDB() const;