Ref T199, bootstrap (aka setup) cache explicitly initialized

* initMultiSimulatorCache
* initCaches detecting bootstrap and init via high level functions
This commit is contained in:
Klaus Basan
2018-01-13 00:35:27 +01:00
parent 312d01d35b
commit eac422f853
2 changed files with 36 additions and 23 deletions

View File

@@ -10,6 +10,7 @@
#include "ui_copyconfigurationcomponent.h" #include "ui_copyconfigurationcomponent.h"
#include "copyconfigurationcomponent.h" #include "copyconfigurationcomponent.h"
#include "configurationwizard.h" #include "configurationwizard.h"
#include "blackcore/data/globalsetup.h"
#include "blackgui/guiapplication.h" #include "blackgui/guiapplication.h"
#include "blackconfig/buildconfig.h" #include "blackconfig/buildconfig.h"
#include "blackmisc/directoryutils.h" #include "blackmisc/directoryutils.h"
@@ -27,6 +28,8 @@ using namespace BlackMisc::Simulation;
using namespace BlackMisc::Simulation::Data; using namespace BlackMisc::Simulation::Data;
using namespace BlackConfig; using namespace BlackConfig;
using namespace BlackGui; using namespace BlackGui;
using namespace BlackCore;
using namespace BlackCore::Data;
namespace BlackGui namespace BlackGui
{ {
@@ -91,7 +94,7 @@ namespace BlackGui
if (!destination.exists()) { return 0; } if (!destination.exists()) { return 0; }
// init model caches if applicable (.rev file entries) // init model caches if applicable (.rev file entries)
this->initModelCaches(files); this->initCaches(files);
int c = 0; int c = 0;
QStringList copied; QStringList copied;
@@ -341,35 +344,25 @@ namespace BlackGui
return files; return files;
} }
void CCopyConfigurationComponent::initModelCaches(const QStringList &files) void CCopyConfigurationComponent::initCaches(const QStringList &files)
{ {
if (files.isEmpty()) { return; } if (files.isEmpty()) { return; }
if (!ui->rb_Cache->isChecked()) { return; } if (!ui->rb_Cache->isChecked()) { return; }
for (const QString &file : files) for (const QString &file : files)
{ {
CStatusMessage msg;
IMultiSimulatorModelCaches *cache = nullptr;
if (file.contains("modelset", Qt::CaseInsensitive)) if (file.contains("modelset", Qt::CaseInsensitive))
{ {
cache = &m_modelSetCaches; this->initMultiSimulatorCache(&m_modelSetCaches, file);
} }
else if (file.contains("modelcache", Qt::CaseInsensitive)) else if (file.contains("modelcache", Qt::CaseInsensitive))
{ {
cache = &m_modelCaches; this->initMultiSimulatorCache(&m_modelCaches, file);
} }
else else if (file.contains(CDirectoryUtils::bootstrapFileName()))
{ {
continue; CData<TGlobalSetup> setup { this }; //!< data cache setup
} const CGlobalSetup s = CGlobalSetup::fromJsonFile(file, true);
setup.set(s);
const CSimulatorInfo info = cache->getSimulatorForFilename(file);
if (info.isNoSimulator()) continue;
if (cache->isSaved(info)) continue; // already a file and hence in .rev
const QFileInfo fi(file);
msg = cache->setCacheTimestamp(fi.lastModified(), info); // create cache file and timestamp in .rev
if (msg.isFailure())
{
CLogMessage(this).preformatted(msg);
} }
} }
@@ -377,6 +370,19 @@ namespace BlackGui
CGuiApplication::processEventsFor(2500); CGuiApplication::processEventsFor(2500);
} }
void CCopyConfigurationComponent::initMultiSimulatorCache(IMultiSimulatorModelCaches *cache, const QString &fileName)
{
const CSimulatorInfo info = cache->getSimulatorForFilename(fileName);
if (info.isNoSimulator()) return;
if (cache->isSaved(info)) return; // already a file and hence in .rev
const QFileInfo fi(fileName);
const CStatusMessage msg = cache->setCacheTimestamp(fi.lastModified(), info); // create cache file and timestamp in .rev
if (msg.isFailure())
{
CLogMessage(this).preformatted(msg);
}
}
void CCopyConfigurationComponent::initOtherSwiftVersions() void CCopyConfigurationComponent::initOtherSwiftVersions()
{ {
ui->cb_OtherVersions->clear(); ui->cb_OtherVersions->clear();

View File

@@ -99,8 +99,11 @@ namespace BlackGui
//! Get the selected files //! Get the selected files
QStringList getSelectedFiles() const; QStringList getSelectedFiles() const;
//! Init model caches if required (create .rev entries with high level functions) //! Init caches if required (create .rev entries with high level functions)
void initModelCaches(const QStringList &files); void initCaches(const QStringList &files);
//! Init a multi simulator cache (modelset/models)
void initMultiSimulatorCache(BlackMisc::Simulation::Data::IMultiSimulatorModelCaches *cache, const QString &fileName);
//! Init the other swift versions //! Init the other swift versions
void initOtherSwiftVersions(); void initOtherSwiftVersions();
@@ -116,9 +119,13 @@ namespace BlackGui
bool m_nameFilterDisables = false; //!< name filter disables or hides bool m_nameFilterDisables = false; //!< name filter disables or hides
bool m_withBootstrapFile = false; bool m_withBootstrapFile = false;
// caches will be initialized (default files on disk) // caches will be explicitly initialized in initCaches
BlackMisc::Simulation::Data::CModelCaches m_modelCaches{false, this}; BlackMisc::Simulation::Data::CModelCaches m_modelCaches{ false, this };
BlackMisc::Simulation::Data::CModelSetCaches m_modelSetCaches{false, this}; BlackMisc::Simulation::Data::CModelSetCaches m_modelSetCaches{ false, this };
// caches will be initialized so they can be overriden
// those caches do not harm if they exists default initialized
//! \fixme this is a workaround, as it creates files on disk even if those are not copied. It was much nicer if the cache would init themself if the file appears
BlackMisc::CData<BlackMisc::Simulation::Data::TModelSetLastSelection> m_modelSetCurrentSimulator { this }; BlackMisc::CData<BlackMisc::Simulation::Data::TModelSetLastSelection> m_modelSetCurrentSimulator { this };
BlackMisc::CData<BlackMisc::Simulation::Data::TModelCacheLastSelection> m_modelsCurrentSimulator { this }; BlackMisc::CData<BlackMisc::Simulation::Data::TModelCacheLastSelection> m_modelsCurrentSimulator { this };
BlackMisc::CData<BlackCore::Data::TLauncherSetup> m_launcherSetup { this }; BlackMisc::CData<BlackCore::Data::TLauncherSetup> m_launcherSetup { this };