From fce4cb8a4d5351eaa6ad755ffe6ea9c11efd15ea Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 11 Mar 2017 00:38:36 +0100 Subject: [PATCH] refs #827, preferColorLiveries as parameter for scoreFull flag will be set in aircraft matcher --- src/blackcore/aircraftmatcher.cpp | 20 +++++++++++++++---- .../simulation/aircraftmodellist.cpp | 5 +---- src/blackmisc/simulation/aircraftmodellist.h | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/blackcore/aircraftmatcher.cpp b/src/blackcore/aircraftmatcher.cpp index 46e3aca63..6a598c551 100644 --- a/src/blackcore/aircraftmatcher.cpp +++ b/src/blackcore/aircraftmatcher.cpp @@ -542,6 +542,9 @@ namespace BlackCore { Q_UNUSED(mode); CAircraftModelList usedModelSet; + static const bool NoZeroScores = true; + static const bool PreferColorLiveries = true; + static const bool DoNotMindAboutColorLiveries = false; // VTOL ScoredModels map; @@ -560,25 +563,34 @@ namespace BlackCore // Aircraft and airline ICAO const CAircraftModelList byAircraftAndAirline(usedModelSet.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), remoteAircraft.getAirlineIcaoCode())); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using reduced set of %1 models by aircraft/airline ICAOs '%2'/'%3' for scoring").arg(byAircraftAndAirline.size()).arg(remoteAircraft.getAircraftIcaoCode().getDesignatorDbKey(), remoteAircraft.getAirlineIcaoCode().getVDesignatorDbKey()), getLogCategories()); - map = byAircraftAndAirline.scoreFull(remoteAircraft.getModel()); + + // we have airline and aircraft ICAO, so use airline liveries + map = byAircraftAndAirline.scoreFull(remoteAircraft.getModel(), DoNotMindAboutColorLiveries, NoZeroScores, log); } else if (remoteAircraft.hasAircraftDesignator() && usedModelSet.contains(&CAircraftModel::getAircraftIcaoCodeDesignator, remoteAircraft.getAircraftIcaoCodeDesignator())) { // Aircraft ICAO only const CAircraftModelList byAircraft(usedModelSet.findByIcaoDesignators(remoteAircraft.getAircraftIcaoCode(), CAirlineIcaoCode())); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using reduced set of %1 models by aircraft ICAO '%2' (no airline) for scoring").arg(byAircraft.size()).arg(remoteAircraft.getAircraftIcaoCode().getDesignatorDbKey()), getLogCategories()); - map = byAircraft.scoreFull(remoteAircraft.getModel()); + + // we do not have an airline for that aircraft, prefer color liveries + // this could also become a setting + map = byAircraft.scoreFull(remoteAircraft.getModel(), PreferColorLiveries, NoZeroScores, log); } else if (remoteAircraft.getAircraftIcaoCode().hasValidCombinedType() && usedModelSet.containsCombinedType(remoteAircraft.getAircraftIcaoCode().getCombinedType())) { const CAircraftModelList byAircraft(usedModelSet.findByCombinedType(remoteAircraft.getAircraftIcaoCode().getCombinedType())); CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using reduced set of %1 models by combined type '%2' for scoring").arg(byAircraft.size()).arg(remoteAircraft.getAircraftIcaoCode().getCombinedType()), getLogCategories()); - map = byAircraft.scoreFull(remoteAircraft.getModel()); + + // No aircraft / airline ICAO, we prefer color liveries + map = byAircraft.scoreFull(remoteAircraft.getModel(), PreferColorLiveries, NoZeroScores, log); } else { CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QString("Using set with %1 models").arg(usedModelSet.size()), getLogCategories()); - map = usedModelSet.scoreFull(remoteAircraft.getModel()); + + // Poor men`s matching + map = usedModelSet.scoreFull(remoteAircraft.getModel(), PreferColorLiveries, NoZeroScores, log); } CAircraftModel matchedModel; diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 2c8d2ea27..c590a70f0 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -586,12 +586,9 @@ namespace BlackMisc } } - ScoredModels CAircraftModelList::scoreFull(const CAircraftModel &remoteModel, bool ignoreZeroScores, CStatusMessageList *log) const + ScoredModels CAircraftModelList::scoreFull(const CAircraftModel &remoteModel, bool preferColorLiveries, bool ignoreZeroScores, CStatusMessageList *log) const { ScoredModels scoreMap; - // prefer colors if there is no airline - const bool hasAirlineDesignator = remoteModel.hasAirlineDesignator() && this->contains(&CAircraftModel::getAirlineIcaoCodeDesignator, remoteModel.getAirlineIcaoCodeDesignator()); - const bool preferColorLiveries = !hasAirlineDesignator; // prefer colors if there is no airline CMatchingUtils::addLogDetailsToList(log, remoteModel.getCallsign(), QString("Prefer color liveries: %1, airline: '%2'").arg(boolToYesNo(preferColorLiveries), remoteModel.getAirlineIcaoCodeDesignator())); diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index 9734d7290..7321953b5 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -226,7 +226,7 @@ namespace BlackMisc void normalizeFileNamesForDb(); //! Score by aircraft ICAO code - ScoredModels scoreFull(const CAircraftModel &remoteModel, bool ignoreZeroScores = true, CStatusMessageList *log = nullptr) const; + ScoredModels scoreFull(const CAircraftModel &remoteModel, bool preferColorLiveries, bool ignoreZeroScores = true, CStatusMessageList *log = nullptr) const; //! Completer strings QStringList toCompleterStrings(bool sorted = true) const;