From deddf7c957f7888c476c9e1e033cb8769c4cafc9 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 29 Jan 2018 08:08:15 +0100 Subject: [PATCH] Ref T237, init caches from resource files (means the files delivered with swift) * initFromLocalResourceFiles reads all local DB data * made 2 functions virtual readFromJsonFiles, readFromJsonFilesInBackground --- src/blackcore/db/airportdatareader.h | 9 +++------ src/blackcore/db/databasereader.cpp | 26 +++++++++++++++++++++++++- src/blackcore/db/databasereader.h | 10 ++++++++++ src/blackcore/db/icaodatareader.cpp | 2 +- src/blackcore/db/icaodatareader.h | 10 ++++------ src/blackcore/db/infodatareader.cpp | 16 ++++++++++++++++ src/blackcore/db/infodatareader.h | 4 ++++ src/blackcore/db/modeldatareader.h | 8 +++----- src/blackcore/webdataservices.cpp | 14 +++++++------- 9 files changed, 73 insertions(+), 26 deletions(-) diff --git a/src/blackcore/db/airportdatareader.h b/src/blackcore/db/airportdatareader.h index 033d6ca11..f7596edda 100644 --- a/src/blackcore/db/airportdatareader.h +++ b/src/blackcore/db/airportdatareader.h @@ -48,12 +48,9 @@ namespace BlackCore //! \threadsafe int getAirportsCount() const; - //! Read from static data file - BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::AirportEntity); - - //! Read from static data file in background - //! \return succesfully started? - bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::AirportEntity); + // data read from local data + virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; + virtual bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; // base class overrides virtual BlackMisc::Network::CEntityFlags::Entity getSupportedEntities() const override; diff --git a/src/blackcore/db/databasereader.cpp b/src/blackcore/db/databasereader.cpp index 6c2f0b809..f483d08ae 100644 --- a/src/blackcore/db/databasereader.cpp +++ b/src/blackcore/db/databasereader.cpp @@ -15,6 +15,7 @@ #include "blackcore/application.h" #include "blackmisc/db/datastoreutility.h" #include "blackmisc/network/networkutils.h" +#include "blackmisc/directoryutils.h" #include "blackmisc/logcategory.h" #include "blackmisc/logcategorylist.h" #include "blackmisc/logmessage.h" @@ -580,7 +581,7 @@ namespace BlackCore bool CDatabaseReader::hasCacheTimestampNewerThan(CEntityFlags::Entity entity, const QDateTime &threshold) const { const QDateTime ts = this->getCacheTimestamp(entity); - if (!ts.isValid()) return false; + if (!ts.isValid()) { return false; } return ts > threshold; } @@ -589,6 +590,29 @@ namespace BlackCore return m_statusMessage; } + CStatusMessageList CDatabaseReader::initFromLocalResourceFiles() + { + static const QDateTime threshold = QDateTime::currentDateTimeUtc().addYears(-1); + const QSet eSet = CEntityFlags::asSingleEntities(this->getSupportedEntities()); + + CStatusMessageList msgs; + CEntityFlags::Entity entities = CEntityFlags::NoEntity; + for (CEntityFlags::Entity e : eSet) + { + if (this->hasCacheTimestampNewerThan(e, threshold)) + { + entities |= e; + } + { + msgs.push_back(CStatusMessage(this).info("Will not init from local file, there are already data for '%1'") << CEntityFlags::flagToString(e)); + } + } + + const CStatusMessageList readMsgs = this->readFromJsonFiles(CDirectoryUtils::staticDbFilesDirectory(), entities); + msgs.push_back(readMsgs); + return readMsgs; + } + void CDatabaseReader::setReplyStatus(QNetworkReply::NetworkError status, const QString &message) { QWriteLocker wl(&m_statusLock); diff --git a/src/blackcore/db/databasereader.h b/src/blackcore/db/databasereader.h index 588a722b4..18413f252 100644 --- a/src/blackcore/db/databasereader.h +++ b/src/blackcore/db/databasereader.h @@ -257,6 +257,16 @@ namespace BlackCore //! Severity used for log messages in case of no URLs void setSeverityNoWorkingUrl(BlackMisc::CStatusMessage::StatusSeverity s) { m_severityNoWorkingUrl = s; } + //! Init from local resource file + //! \remark normally used after installation for a 1st time init + BlackMisc::CStatusMessageList initFromLocalResourceFiles(); + + //! Data read from local data + virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) = 0; + + //! Data read from local data + virtual bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) = 0; + //! Log categories static const BlackMisc::CLogCategoryList &getLogCategories(); diff --git a/src/blackcore/db/icaodatareader.cpp b/src/blackcore/db/icaodatareader.cpp index da152629c..fe0469153 100644 --- a/src/blackcore/db/icaodatareader.cpp +++ b/src/blackcore/db/icaodatareader.cpp @@ -397,7 +397,7 @@ namespace BlackCore CStatusMessageList CIcaoDataReader::readFromJsonFiles(const QString &dir, CEntityFlags::Entity whatToRead) { - QDir directory(dir); + const QDir directory(dir); if (!directory.exists()) { return CStatusMessage(this).error("Missing directory '%1'") << dir; diff --git a/src/blackcore/db/icaodatareader.h b/src/blackcore/db/icaodatareader.h index 92f5af4c3..d70f572b1 100644 --- a/src/blackcore/db/icaodatareader.h +++ b/src/blackcore/db/icaodatareader.h @@ -133,15 +133,13 @@ namespace BlackCore //! \threadsafe bool areAllDataRead() const; - //! Read from static DB data file - BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::AllIcaoAndCountries); - - //! Read from static DB data file - bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::AllIcaoAndCountries); - //! Write to static DB data file bool writeToJsonFiles(const QString &dir) const; + // data read from local data + virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; + virtual bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; + // cache handling for base class virtual BlackMisc::Network::CEntityFlags::Entity getSupportedEntities() const override; virtual QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entity) const override; diff --git a/src/blackcore/db/infodatareader.cpp b/src/blackcore/db/infodatareader.cpp index aef60e953..58a854028 100644 --- a/src/blackcore/db/infodatareader.cpp +++ b/src/blackcore/db/infodatareader.cpp @@ -217,6 +217,22 @@ namespace BlackCore return CUrl(); } + CStatusMessageList CInfoDataReader::readFromJsonFiles(const QString &dir, CEntityFlags::Entity whatToRead) + { + Q_UNUSED(dir); + Q_UNUSED(whatToRead); + Q_ASSERT_X(false, Q_FUNC_INFO, "Not supported"); + return CStatusMessage(this).error("Not supported"); + } + + bool CInfoDataReader::readFromJsonFilesInBackground(const QString &dir, CEntityFlags::Entity whatToRead) + { + Q_UNUSED(dir); + Q_UNUSED(whatToRead); + Q_ASSERT_X(false, Q_FUNC_INFO, "Not supported"); + return false; + } + CEntityFlags::Entity CInfoDataReader::getSupportedEntities() const { return this->getEntityForMode(); diff --git a/src/blackcore/db/infodatareader.h b/src/blackcore/db/infodatareader.h index a7ad2472d..d2cffa30c 100644 --- a/src/blackcore/db/infodatareader.h +++ b/src/blackcore/db/infodatareader.h @@ -53,6 +53,10 @@ namespace BlackCore //! URL depending on mode, i.e. shared/DB BlackMisc::Network::CUrl getInfoObjectsUrl() const; + // data read from local data + virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; + virtual bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; + // cache handling for base class: no cache handling here in that case virtual BlackMisc::Network::CEntityFlags::Entity getSupportedEntities() const override; virtual QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entity) const override; diff --git a/src/blackcore/db/modeldatareader.h b/src/blackcore/db/modeldatareader.h index 5fcd9515a..96d51e67c 100644 --- a/src/blackcore/db/modeldatareader.h +++ b/src/blackcore/db/modeldatareader.h @@ -123,11 +123,9 @@ namespace BlackCore //! \threadsafe bool areAllDataRead() const; - //! Read from local JSON file - BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::DistributorLiveryModel); - - //! Read from static DB data file - bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead = BlackMisc::Network::CEntityFlags::DistributorLiveryModel); + // data read from local data + virtual BlackMisc::CStatusMessageList readFromJsonFiles(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; + virtual bool readFromJsonFilesInBackground(const QString &dir, BlackMisc::Network::CEntityFlags::Entity whatToRead) override; //! Write to JSON file bool writeToJsonFiles(const QString &dir) const; diff --git a/src/blackcore/webdataservices.cpp b/src/blackcore/webdataservices.cpp index 496e99657..f2238dbc6 100644 --- a/src/blackcore/webdataservices.cpp +++ b/src/blackcore/webdataservices.cpp @@ -1406,7 +1406,7 @@ namespace BlackCore if (this->getAirportsCount() > 0) { - QString json(QJsonDocument(this->getAirports().toJson()).toJson()); + const QString json(QJsonDocument(this->getAirports().toJson()).toJson()); const bool s = CFileUtils::writeStringToFileInBackground(json, CFileUtils::appendFilePaths(directory.absolutePath(), "airports.json")); if (!s) { return false; } } @@ -1423,22 +1423,22 @@ namespace BlackCore bool s = false; if (m_icaoDataReader) { - if (inBackground) { return m_icaoDataReader->readFromJsonFilesInBackground(dir); } - const CStatusMessageList msgs = m_icaoDataReader->readFromJsonFiles(dir); + if (inBackground) { return m_icaoDataReader->readFromJsonFilesInBackground(dir, m_icaoDataReader->getSupportedEntities()); } + const CStatusMessageList msgs = m_icaoDataReader->readFromJsonFiles(dir, m_icaoDataReader->getSupportedEntities()); if (msgs.isFailure()) { CLogMessage::preformatted(msgs); } s = msgs.isSuccess(); } if (s && m_modelDataReader) { - if (inBackground) { return m_modelDataReader->readFromJsonFilesInBackground(dir); } - const CStatusMessageList msgs = m_modelDataReader->readFromJsonFiles(dir); + if (inBackground) { return m_modelDataReader->readFromJsonFilesInBackground(dir, m_modelDataReader->getSupportedEntities()); } + const CStatusMessageList msgs = m_modelDataReader->readFromJsonFiles(dir, m_modelDataReader->getSupportedEntities()); if (msgs.isFailure()) { CLogMessage::preformatted(msgs); } s = msgs.isSuccess(); } if (s && m_airportDataReader) { - if (inBackground) { return m_airportDataReader->readFromJsonFilesInBackground(dir); } - const CStatusMessageList msgs = m_airportDataReader->readFromJsonFiles(dir); + if (inBackground) { return m_airportDataReader->readFromJsonFilesInBackground(dir, m_airportDataReader->getSupportedEntities()); } + const CStatusMessageList msgs = m_airportDataReader->readFromJsonFiles(dir, m_airportDataReader->getSupportedEntities()); if (msgs.isFailure()) { CLogMessage::preformatted(msgs); } s = msgs.isSuccess(); }