From 6a8c8c88892fb16f6d6595e344baf2f4a63667cc Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 24 Oct 2016 03:29:15 +0200 Subject: [PATCH] refs #748, airport JSON reader bug in changed URL fixed (URL was always flagged as changed) In same step some code cleanup --- src/blackcore/db/airportdatareader.cpp | 25 ++++++++++++++++++++++--- src/blackcore/db/airportdatareader.h | 7 +++++++ src/blackcore/db/icaodatareader.cpp | 8 ++++---- src/blackcore/db/modeldatareader.cpp | 8 ++++---- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/blackcore/db/airportdatareader.cpp b/src/blackcore/db/airportdatareader.cpp index b6f50d28b..8dab3f972 100644 --- a/src/blackcore/db/airportdatareader.cpp +++ b/src/blackcore/db/airportdatareader.cpp @@ -55,7 +55,7 @@ namespace BlackCore bool CAirportDataReader::hasChangedUrl(CEntityFlags::Entity entity) const { Q_UNUSED(entity); - return CDatabaseReader::isChangedUrl(this->m_readerUrlCache.get(), this->getAirportsUrl()); + return CDatabaseReader::isChangedUrl(this->m_readerUrlCache.get(), getBaseUrl()); } CUrl CAirportDataReader::getAirportsUrl() const @@ -93,8 +93,9 @@ namespace BlackCore latestTimestamp = lastModifiedMsSinceEpoch(nwReply); } - m_airportCache.set(airports, latestTimestamp); - emit dataRead(CEntityFlags::AirportEntity, CEntityFlags::ReadFinished, airports.size()); + this->m_airportCache.set(airports, latestTimestamp); + this->updateReaderUrl(getBaseUrl()); + emit this->dataRead(CEntityFlags::AirportEntity, CEntityFlags::ReadFinished, airports.size()); } void CAirportDataReader::ps_read(CEntityFlags::Entity entity, const QDateTime &newerThan) @@ -131,5 +132,23 @@ namespace BlackCore { // void } + + void CAirportDataReader::updateReaderUrl(const CUrl &url) + { + const CUrl current = this->m_readerUrlCache.get(); + if (current == url) { return; } + const CStatusMessage m = this->m_readerUrlCache.set(url); + if (m.isFailure()) + { + CLogMessage::preformatted(m); + } + } + + const CUrl &CAirportDataReader::getBaseUrl() + { + static const CUrl baseUrl(sApp->getGlobalSetup().getDbAirportReaderUrl()); + return baseUrl; + } + } // ns } // ns diff --git a/src/blackcore/db/airportdatareader.h b/src/blackcore/db/airportdatareader.h index 8dca45451..1c3999b71 100644 --- a/src/blackcore/db/airportdatareader.h +++ b/src/blackcore/db/airportdatareader.h @@ -70,6 +70,13 @@ namespace BlackCore //! Reader URL (we read from where?) used to detect changes of location BlackMisc::CData m_readerUrlCache {this, &CAirportDataReader::ps_baseUrlCacheChanged }; + + //! Update reader URL + void updateReaderUrl(const BlackMisc::Network::CUrl &url); + + //! Base URL + //! \threadsafe + static const BlackMisc::Network::CUrl &getBaseUrl(); }; } } // ns diff --git a/src/blackcore/db/icaodatareader.cpp b/src/blackcore/db/icaodatareader.cpp index d7417f370..0e2829487 100644 --- a/src/blackcore/db/icaodatareader.cpp +++ b/src/blackcore/db/icaodatareader.cpp @@ -243,7 +243,7 @@ namespace BlackCore } this->m_aircraftIcaoCache.set(codes, latestTimestamp); - this->updateReaderUrl(this->getBaseUrl()); + this->updateReaderUrl(getBaseUrl()); emit dataRead(CEntityFlags::AircraftIcaoEntity, CEntityFlags::ReadFinished, n); CLogMessage(this).info("Read %1 %2 from %3") << n << CEntityFlags::flagToString(CEntityFlags::AircraftIcaoEntity) << urlString; } @@ -271,7 +271,7 @@ namespace BlackCore } this->m_airlineIcaoCache.set(codes, latestTimestamp); - this->updateReaderUrl(this->getBaseUrl()); + this->updateReaderUrl(getBaseUrl()); emit dataRead(CEntityFlags::AirlineIcaoEntity, CEntityFlags::ReadFinished, n); CLogMessage(this).info("Read %1 %2 from %3") << n << CEntityFlags::flagToString(CEntityFlags::AirlineIcaoEntity) << urlString; } @@ -297,7 +297,7 @@ namespace BlackCore } this->m_countryCache.set(countries, latestTimestamp); - this->updateReaderUrl(this->getBaseUrl()); + this->updateReaderUrl(getBaseUrl()); emit dataRead(CEntityFlags::CountryEntity, CEntityFlags::ReadFinished, n); CLogMessage(this).info("Read %1 %2 from %3") << n << CEntityFlags::flagToString(CEntityFlags::CountryEntity) << urlString; } @@ -432,7 +432,7 @@ namespace BlackCore bool CIcaoDataReader::hasChangedUrl(CEntityFlags::Entity entity) const { Q_UNUSED(entity); - return CDatabaseReader::isChangedUrl(this->m_readerUrlCache.get(), this->getBaseUrl()); + return CDatabaseReader::isChangedUrl(this->m_readerUrlCache.get(), getBaseUrl()); } CUrl CIcaoDataReader::getAircraftIcaoUrl(bool shared) const diff --git a/src/blackcore/db/modeldatareader.cpp b/src/blackcore/db/modeldatareader.cpp index 7fd194278..14e6420be 100644 --- a/src/blackcore/db/modeldatareader.cpp +++ b/src/blackcore/db/modeldatareader.cpp @@ -282,7 +282,7 @@ namespace BlackCore latestTimestamp = lastModifiedMsSinceEpoch(nwReply.data()); } this->m_liveryCache.set(liveries, latestTimestamp); - this->updateReaderUrl(this->getBaseUrl()); + this->updateReaderUrl(getBaseUrl()); // never emit when lock is held -> deadlock emit dataRead(CEntityFlags::LiveryEntity, res.isRestricted() ? CEntityFlags::ReadFinishedRestricted : CEntityFlags::ReadFinished, n); @@ -325,7 +325,7 @@ namespace BlackCore latestTimestamp = lastModifiedMsSinceEpoch(nwReply.data()); } this->m_distributorCache.set(distributors, latestTimestamp); - this->updateReaderUrl(this->getBaseUrl()); + this->updateReaderUrl(getBaseUrl()); emit dataRead(CEntityFlags::DistributorEntity, res.isRestricted() ? CEntityFlags::ReadFinishedRestricted : CEntityFlags::ReadFinished, n); CLogMessage(this).info("Read %1 %2 from %3") << n << CEntityFlags::flagToString(CEntityFlags::DistributorEntity) << urlString; @@ -368,7 +368,7 @@ namespace BlackCore latestTimestamp = lastModifiedMsSinceEpoch(nwReply.data()); } this->m_modelCache.set(models, latestTimestamp); - this->updateReaderUrl(this->getBaseUrl()); + this->updateReaderUrl(getBaseUrl()); emit dataRead(CEntityFlags::ModelEntity, res.isRestricted() ? CEntityFlags::ReadFinishedRestricted : CEntityFlags::ReadFinished, n); CLogMessage(this).info("Read %1 %2 from %3") << n << CEntityFlags::flagToString(CEntityFlags::ModelEntity) << urlString; @@ -505,7 +505,7 @@ namespace BlackCore bool CModelDataReader::hasChangedUrl(CEntityFlags::Entity entity) const { Q_UNUSED(entity); - return CDatabaseReader::isChangedUrl(this->m_readerUrlCache.get(), this->getBaseUrl()); + return CDatabaseReader::isChangedUrl(this->m_readerUrlCache.get(), getBaseUrl()); } const CUrl &CModelDataReader::getBaseUrl()