Ref T515, further utility functions to validate models

This commit is contained in:
Klaus Basan
2019-01-18 21:15:27 +01:00
committed by Mat Sutcliffe
parent bb9b5e8e97
commit de680f4fcd
8 changed files with 98 additions and 11 deletions

View File

@@ -154,6 +154,11 @@ namespace BlackMisc
.arg(this->getLivery().asHtmlSummary(" ")).replace(" ", " ");
}
bool CAircraftModel::matchesFileName(const QString &fileName) const
{
return stringCompare(fileName, m_fileName, CFileUtils::osFileNameCaseSensitivity());
}
CStatusMessageList CAircraftModel::verifyModelData() const
{
CStatusMessageList msgs;
@@ -744,15 +749,13 @@ namespace BlackMisc
bool CAircraftModel::matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const
{
if (sensitivity == Qt::CaseInsensitive) { return caseInsensitiveStringCompare(modelString, m_modelString); }
return m_modelString == modelString;
return stringCompare(modelString, m_modelString, sensitivity);
}
bool CAircraftModel::matchesModelStringOrAlias(const QString &modelString, Qt::CaseSensitivity sensitivity) const
{
if (this->matchesModelString(modelString, sensitivity)) { return true; }
if (sensitivity == Qt::CaseInsensitive) { return caseInsensitiveStringCompare(modelString, m_modelStringAlias); }
return m_modelStringAlias == modelString;
return stringCompare(modelString, m_modelStringAlias, sensitivity);
}
int CAircraftModel::calculateScore(const CAircraftModel &compareModel, bool preferColorLiveries, CStatusMessageList *log) const

View File

@@ -430,6 +430,9 @@ namespace BlackMisc
//! File name?
bool hasFileName() const { return !m_fileName.isEmpty(); }
//! Matching file name?
bool matchesFileName(const QString &fileName) const;
//! Does the corresponding file exist?
bool hasExistingCorrespondingFile() const;

View File

@@ -688,6 +688,30 @@ namespace BlackMisc
return this->removeIf(&CAircraftModel::getAircraftIcaoCode, aircraftIcao, &CAircraftModel::getAirlineIcaoCode, airline);
}
int CAircraftModelList::removeIfNotFsFamily()
{
if (this->isEmpty()) { return 0; }
CAircraftModelList fsOnly = this->getAllFsFamilyModels();
if (fsOnly.size() == this->size()) { return 0; }
const int delta = this->size() - fsOnly.size();
*this = fsOnly;
return delta;
}
CAircraftModelList CAircraftModelList::removeIfFileButNotInSet(const QString &fileName, const QSet<QString> &modelStrings)
{
CAircraftModelList removed;
for (const CAircraftModel &model : *this)
{
if (!model.matchesFileName(fileName)) { continue; }
if (modelStrings.contains(model.getModelString())) { continue; }
removed.push_back(model);
}
this->removeIfIn(removed);
return removed;
}
bool CAircraftModelList::replaceOrAddModelWithString(const CAircraftModel &addOrReplaceModel, Qt::CaseSensitivity sensitivity)
{
bool r = false;
@@ -1013,6 +1037,18 @@ namespace BlackMisc
return combinedCodes;
}
QSet<QString> CAircraftModelList::getAllFileNames() const
{
const bool cs = CFileUtils::isFileNameCaseSensitive();
QSet<QString> files;
for (const CAircraftModel &model : *this)
{
if (!model.hasFileName()) { continue; }
files.insert(cs ? model.getFileName() : model.getFileNameLowerCase());
}
return files;
}
QString CAircraftModelList::getCombinedTypesAsString(const QString &separator) const
{
return this->getCombinedTypes().values().join(separator);
@@ -1178,15 +1214,19 @@ namespace BlackMisc
QSet<QString> workingFiles;
int failedFilesCount = 0;
// sorting allows to skip multiple files as once when a file fails
CAircraftModelList sorted(*this);
if (!alreadySorted) { sorted.sortByFileName(); }
const bool caseSensitive = CFileUtils::isFileNameCaseSensitive();
for (const CAircraftModel &model : *this)
for (const CAircraftModel &model : as_const(sorted))
{
bool ok = false;
do
{
if (!model.hasModelString())
{
const CStatusMessage m(this, CStatusMessage::SeverityError, "No model string");
const CStatusMessage m(this, CStatusMessage::SeverityError, "No model string", true);
msgs.push_back(m);
break;
}

View File

@@ -281,6 +281,14 @@ namespace BlackMisc
//! \return number of elements removed
int removeByAircraftAndAirline(const Aviation::CAircraftIcaoCode &aircraftIcao, const Aviation::CAirlineIcaoCode &airline);
//! Remove if NOT FS family model, ie. FSX/P3D/FS9
//! \return number of elements removed
int removeIfNotFsFamily();
//! Remove those models of a particular file, but not in the given set
//! \remark mostly used for FSX/FS9/P3D consolidation
CAircraftModelList removeIfFileButNotInSet(const QString &fileName, const QSet<QString> &modelStrings);
//! Replace or add based on model string
//! \return element removed?
bool replaceOrAddModelWithString(const CAircraftModel &addOrReplaceModel, Qt::CaseSensitivity sensitivity);
@@ -372,6 +380,9 @@ namespace BlackMisc
//! All combined types
QSet<QString> getCombinedTypes() const;
//! All file names
QSet<QString> getAllFileNames() const;
//! All combined types as string
QString getCombinedTypesAsString(const QString &separator = ", ") const;

View File

@@ -57,6 +57,16 @@ namespace BlackMisc
return titles;
}
QSet<QString> CAircraftCfgEntriesList::getTitleSetUpperCase() const
{
QSet<QString> titlesUc;
for (const CAircraftCfgEntries &entries : *this)
{
titlesUc.insert(entries.getTitle().toUpper());
}
return titlesUc;
}
QString CAircraftCfgEntriesList::getTitlesAsString(bool sorted, const QString &separator) const
{
return this->getTitles(sorted).join(separator);

View File

@@ -23,6 +23,7 @@
#include <QMetaType>
#include <QString>
#include <QStringList>
#include <QSet>
#include <Qt>
#include <tuple>
@@ -49,6 +50,9 @@ namespace BlackMisc
//! All titles (aka model names)
QStringList getTitles(bool sorted = false) const;
//! Titles as set in upper case
QSet<QString> getTitleSetUpperCase() const;
//! All titles as string
QString getTitlesAsString(bool sorted, const QString &separator = ", ") const;

View File

@@ -369,6 +369,16 @@ namespace BlackMisc
return m_counts[CSimulatorInfo::NumberOfSimulators];
}
int CCountPerSimulator::getCountForFsFamilySimulators() const
{
return this->getCount(CSimulatorInfo::fsx()) + this->getCount(CSimulatorInfo::p3d()) + this->getCount(CSimulatorInfo::fs9());
}
int CCountPerSimulator::getCountForFsxFamilySimulators() const
{
return this->getCount(CSimulatorInfo::fsx()) + this->getCount(CSimulatorInfo::p3d());
}
int CCountPerSimulator::getMaximum() const
{
return *std::min_element(m_counts.begin(), m_counts.end());
@@ -401,11 +411,11 @@ namespace BlackMisc
QString CCountPerSimulator::toQString() const
{
return u"FSX: " % QString::number(m_counts[0]) %
u" P3D: " % QString::number(m_counts[1]) %
u" FS9: " % QString::number(m_counts[2]) %
return u"FSX: " % QString::number(m_counts[0]) %
u" P3D: " % QString::number(m_counts[1]) %
u" FS9: " % QString::number(m_counts[2]) %
u" XPlane: " % QString::number(m_counts[3]) %
u" FG: " % QString::number(m_counts[4]);
u" FG: " % QString::number(m_counts[4]);
}
void CCountPerSimulator::setCount(int count, const CSimulatorInfo &simulator)

View File

@@ -222,9 +222,15 @@ namespace BlackMisc
//! Object count for given simulator
int getCount(const CSimulatorInfo &simulator) const;
//! Unkown count
//! Unknown count
int getCountForUnknownSimulators() const;
//! P3D, FSX, or FS9
int getCountForFsFamilySimulators() const;
//! P3D or FSX
int getCountForFsxFamilySimulators() const;
//! Set count
void setCount(int count, const CSimulatorInfo &simulator);