refs #720, adjusted model loader

* callback function to data consolidation (so I can refer to consolidation in BlackCore)
* use status message in parser
* avoid duplicate keys (WOAI has ambiguous model strings which are to be excluded)
This commit is contained in:
Klaus Basan
2016-08-09 01:33:32 +02:00
committed by Mathew Sutcliffe
parent d75b105ee3
commit 019b623f43
8 changed files with 90 additions and 60 deletions

View File

@@ -11,6 +11,7 @@
#include "blackmisc/range.h"
#include "blackmisc/simulation/aircraftmodel.h"
#include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h"
#include "blackmisc/statusmessagelist.h"
using namespace BlackMisc;
using namespace BlackMisc::Simulation;
@@ -26,7 +27,7 @@ namespace BlackMisc
{
if (title.isEmpty()) { return false; }
return this->containsBy(
[ = ](const CAircraftCfgEntries & entries) { return title.compare(entries.getTitle(), caseSensitivity) == 0; }
[ = ](const CAircraftCfgEntries & entries) { return title.compare(entries.getTitle(), caseSensitivity) == 0; }
);
}
@@ -57,25 +58,35 @@ namespace BlackMisc
return titles;
}
CAircraftModelList CAircraftCfgEntriesList::toAircraftModelList() const
CAircraftModelList CAircraftCfgEntriesList::toAircraftModelList(bool ignoreDuplicatesAndEmptyModelStrings, CStatusMessageList &msgs) const
{
CAircraftModelList ml;
QSet<QString> keys;
for (const CAircraftCfgEntries &entries : (*this))
{
if (ignoreDuplicatesAndEmptyModelStrings)
{
const QString key = entries.getTitle().toUpper();
if (key.isEmpty()) { continue; }
if (keys.contains(key))
{
CStatusMessage msg(this);
msg.warning("Duplicate model string %1 in %2 %3")
<< entries.getTitle() << entries.getFileDirectory() << entries.getFileName();
msgs.push_back(msg);
continue;
}
keys.insert(key);
}
ml.push_back(entries.toAircraftModel());
}
return ml;
}
CAircraftModelList CAircraftCfgEntriesList::toAircraftModelList(const CSimulatorInfo &simInfo) const
CAircraftModelList CAircraftCfgEntriesList::toAircraftModelList(const CSimulatorInfo &simInfo, bool ignoreDuplicatesAndEmptyModelStrings, CStatusMessageList &msgs) const
{
CAircraftModelList ml;
for (const CAircraftCfgEntries &entries : (*this))
{
CAircraftModel m(entries.toAircraftModel());
m.setSimulator(simInfo);
ml.push_back(m);
}
CAircraftModelList ml = this->toAircraftModelList(ignoreDuplicatesAndEmptyModelStrings, msgs);
ml.setSimulatorInfo(simInfo);
return ml;
}