mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-21 04:45:31 +08:00
Ref T310, utility functions for statistics (incl.renaming)
This commit is contained in:
@@ -250,18 +250,30 @@ namespace BlackMisc
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
QSet<QString> CAircraftIcaoCodeList::allIcaoCodes(bool onlyKnownDesignators) const
|
QSet<QString> CAircraftIcaoCodeList::allDesignators(bool noUnspecified) const
|
||||||
{
|
{
|
||||||
QSet<QString> c;
|
QSet<QString> c;
|
||||||
for (const CAircraftIcaoCode &icao : *this)
|
for (const CAircraftIcaoCode &icao : *this)
|
||||||
{
|
{
|
||||||
if (onlyKnownDesignators && !icao.hasKnownDesignator()) { continue; }
|
if (noUnspecified && !icao.hasKnownDesignator()) { continue; }
|
||||||
const QString d(icao.getDesignator());
|
const QString d(icao.getDesignator());
|
||||||
c.insert(d);
|
c.insert(d);
|
||||||
}
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSet<QString> CAircraftIcaoCodeList::allDesignatorsAndKey(bool noUnspecified) const
|
||||||
|
{
|
||||||
|
QSet<QString> c;
|
||||||
|
for (const CAircraftIcaoCode &icao : *this)
|
||||||
|
{
|
||||||
|
if (noUnspecified && !icao.hasKnownDesignator()) { continue; }
|
||||||
|
const QString d(icao.getDesignatorDbKey());
|
||||||
|
c.insert(d);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
QSet<QString> CAircraftIcaoCodeList::allFamilies() const
|
QSet<QString> CAircraftIcaoCodeList::allFamilies() const
|
||||||
{
|
{
|
||||||
QSet<QString> c;
|
QSet<QString> c;
|
||||||
|
|||||||
@@ -122,7 +122,10 @@ namespace BlackMisc
|
|||||||
QStringList toCompleterStrings(bool withIataCodes = false, bool withFamily = false, bool sort = true) const;
|
QStringList toCompleterStrings(bool withIataCodes = false, bool withFamily = false, bool sort = true) const;
|
||||||
|
|
||||||
//! All ICAO codes, no duplicates
|
//! All ICAO codes, no duplicates
|
||||||
QSet<QString> allIcaoCodes(bool noUnspecified = true) const;
|
QSet<QString> allDesignators(bool noUnspecified = true) const;
|
||||||
|
|
||||||
|
//! All ICAO codes and DB key, no duplicates
|
||||||
|
QSet<QString> allDesignatorsAndKey(bool noUnspecified = true) const;
|
||||||
|
|
||||||
//! All families, no duplicates
|
//! All families, no duplicates
|
||||||
QSet<QString> allFamilies() const;
|
QSet<QString> allFamilies() const;
|
||||||
|
|||||||
@@ -302,10 +302,9 @@ namespace BlackMisc
|
|||||||
|
|
||||||
QString CAirlineIcaoCode::getCombinedStringWithKey() const
|
QString CAirlineIcaoCode::getCombinedStringWithKey() const
|
||||||
{
|
{
|
||||||
QString s(getVDesignator());
|
return (this->hasValidDesignator() ? this->getVDesignator() : QStringLiteral("")) %
|
||||||
if (s.isEmpty()) s = "????";
|
(this->hasName() ? QStringLiteral(" ") % m_name : QStringLiteral("")) %
|
||||||
if (hasName()) { s = s.append(" ").append(getName()); }
|
this->getDbKeyAsStringInParentheses(" ");
|
||||||
return s.append(this->getDbKeyAsStringInParentheses(" "));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCode CAirlineIcaoCode::thisOrCallsignCode(const CCallsign &callsign) const
|
CAirlineIcaoCode CAirlineIcaoCode::thisOrCallsignCode(const CCallsign &callsign) const
|
||||||
|
|||||||
@@ -273,6 +273,28 @@ namespace BlackMisc
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSet<QString> CAirlineIcaoCodeList::allDesignators() const
|
||||||
|
{
|
||||||
|
QSet<QString> designators;
|
||||||
|
for (const CAirlineIcaoCode &icao : *this)
|
||||||
|
{
|
||||||
|
if (!icao.hasValidDesignator()) { continue; }
|
||||||
|
designators.insert(icao.getDesignator());
|
||||||
|
}
|
||||||
|
return designators;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSet<QString> CAirlineIcaoCodeList::allVDesignators() const
|
||||||
|
{
|
||||||
|
QSet<QString> designators;
|
||||||
|
for (const CAirlineIcaoCode &icao : *this)
|
||||||
|
{
|
||||||
|
if (!icao.hasValidDesignator()) { continue; }
|
||||||
|
designators.insert(icao.getVDesignator());
|
||||||
|
}
|
||||||
|
return designators;
|
||||||
|
}
|
||||||
|
|
||||||
bool CAirlineIcaoCodeList::containsDesignator(const QString &designator) const
|
bool CAirlineIcaoCodeList::containsDesignator(const QString &designator) const
|
||||||
{
|
{
|
||||||
if (designator.isEmpty()) { return false; }
|
if (designator.isEmpty()) { return false; }
|
||||||
|
|||||||
@@ -101,6 +101,12 @@ namespace BlackMisc
|
|||||||
//! String list for completion by name
|
//! String list for completion by name
|
||||||
QStringList toNameCompleterStrings(bool sort = true) const;
|
QStringList toNameCompleterStrings(bool sort = true) const;
|
||||||
|
|
||||||
|
//! All designators
|
||||||
|
QSet<QString> allDesignators() const;
|
||||||
|
|
||||||
|
//! All designators
|
||||||
|
QSet<QString> allVDesignators() const;
|
||||||
|
|
||||||
//! Contains given designator?
|
//! Contains given designator?
|
||||||
bool containsDesignator(const QString &designator) const;
|
bool containsDesignator(const QString &designator) const;
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,6 @@
|
|||||||
|
|
||||||
#include "blackmisc/simulation/aircraftmodellist.h"
|
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||||
#include "blackmisc/simulation/matchingutils.h"
|
#include "blackmisc/simulation/matchingutils.h"
|
||||||
#include "blackmisc/aviation/aircrafticaocode.h"
|
|
||||||
#include "blackmisc/aviation/airlineicaocode.h"
|
|
||||||
#include "blackmisc/aviation/callsign.h"
|
#include "blackmisc/aviation/callsign.h"
|
||||||
#include "blackmisc/aviation/livery.h"
|
#include "blackmisc/aviation/livery.h"
|
||||||
#include "blackmisc/math/mathutils.h"
|
#include "blackmisc/math/mathutils.h"
|
||||||
@@ -732,6 +730,24 @@ namespace BlackMisc
|
|||||||
return distributors;
|
return distributors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAircraftIcaoCodeList CAircraftModelList::getAircraftIcaoCodesFromDb() const
|
||||||
|
{
|
||||||
|
if (this->isEmpty()) { return CAircraftIcaoCodeList(); }
|
||||||
|
QSet<int> keys;
|
||||||
|
CAircraftIcaoCodeList icaos;
|
||||||
|
for (const CAircraftModel &model : *this)
|
||||||
|
{
|
||||||
|
const CAircraftIcaoCode icao = model.getAircraftIcaoCode();
|
||||||
|
if (!icao.hasValidDbKey()) { continue; }
|
||||||
|
|
||||||
|
const int key = icao.getDbKey();
|
||||||
|
if (keys.contains(key)) { continue; }
|
||||||
|
icaos.push_back(icao);
|
||||||
|
keys.insert(key);
|
||||||
|
}
|
||||||
|
return icaos;
|
||||||
|
}
|
||||||
|
|
||||||
QSet<QString> CAircraftModelList::getAircraftDesignators() const
|
QSet<QString> CAircraftModelList::getAircraftDesignators() const
|
||||||
{
|
{
|
||||||
QSet<QString> designators;
|
QSet<QString> designators;
|
||||||
@@ -767,6 +783,24 @@ namespace BlackMisc
|
|||||||
return icaos;
|
return icaos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAirlineIcaoCodeList CAircraftModelList::getAirlineIcaoCodesFromDb() const
|
||||||
|
{
|
||||||
|
if (this->isEmpty()) { return CAirlineIcaoCodeList(); }
|
||||||
|
QSet<int> keys;
|
||||||
|
CAirlineIcaoCodeList icaos;
|
||||||
|
for (const CAircraftModel &model : *this)
|
||||||
|
{
|
||||||
|
const CAirlineIcaoCode icao = model.getAirlineIcaoCode();
|
||||||
|
if (!icao.hasValidDbKey()) { continue; }
|
||||||
|
|
||||||
|
const int key = icao.getDbKey();
|
||||||
|
if (keys.contains(key)) { continue; }
|
||||||
|
icaos.push_back(icao);
|
||||||
|
keys.insert(key);
|
||||||
|
}
|
||||||
|
return icaos;
|
||||||
|
}
|
||||||
|
|
||||||
QSet<QString> CAircraftModelList::getAirlineDesignators() const
|
QSet<QString> CAircraftModelList::getAirlineDesignators() const
|
||||||
{
|
{
|
||||||
QSet<QString> designators;
|
QSet<QString> designators;
|
||||||
@@ -1094,15 +1128,38 @@ namespace BlackMisc
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CAircraftModelList::htmlStatistics() const
|
QString CAircraftModelList::htmlStatistics(bool aircraftStats, bool airlineStats) const
|
||||||
{
|
{
|
||||||
|
static const QString sep("<br>");
|
||||||
const bool notOnlyDb = this->containsAnyObjectWithoutKey();
|
const bool notOnlyDb = this->containsAnyObjectWithoutKey();
|
||||||
QString stats = this->coverageSummary("<br>");
|
QString stats = this->coverageSummary(sep);
|
||||||
|
if (aircraftStats)
|
||||||
|
{
|
||||||
|
const CAircraftIcaoCodeList icaos = this->getAircraftIcaoCodesFromDb();
|
||||||
|
QStringList designators(icaos.allDesignators().toList());
|
||||||
|
designators.sort();
|
||||||
|
stats += sep % sep %
|
||||||
|
QStringLiteral("Aircraft ICAOs from DB: ") % sep %
|
||||||
|
designators.join(", ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (airlineStats)
|
||||||
|
{
|
||||||
|
const CAirlineIcaoCodeList icaos = this->getAirlineIcaoCodesFromDb();
|
||||||
|
const QStringList designators = icaos.toIcaoDesignatorCompleterStrings();
|
||||||
|
stats += sep % sep %
|
||||||
|
QStringLiteral("Airline ICAOs from DB: ") % sep %
|
||||||
|
designators.join(", ");
|
||||||
|
}
|
||||||
|
|
||||||
if (notOnlyDb)
|
if (notOnlyDb)
|
||||||
{
|
{
|
||||||
const CAircraftModelList dbModels = this->findObjectsWithDbKey();
|
const CAircraftModelList dbModels = this->findObjectsWithDbKey();
|
||||||
stats += QStringLiteral("<br><br>DB objects:<br>---------<br>") %
|
stats += sep %
|
||||||
dbModels.coverageSummary("<br>");
|
sep %
|
||||||
|
QStringLiteral("DB objects:<br>---------") %
|
||||||
|
sep %
|
||||||
|
dbModels.htmlStatistics(false, false);
|
||||||
}
|
}
|
||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include "blackmisc/simulation/distributorlist.h"
|
#include "blackmisc/simulation/distributorlist.h"
|
||||||
#include "blackmisc/simulation/simulatorinfo.h"
|
#include "blackmisc/simulation/simulatorinfo.h"
|
||||||
#include "blackmisc/aviation/aircrafticaocodelist.h"
|
#include "blackmisc/aviation/aircrafticaocodelist.h"
|
||||||
|
#include "blackmisc/aviation/airlineicaocodelist.h"
|
||||||
#include "blackmisc/db/datastoreobjectlist.h"
|
#include "blackmisc/db/datastoreobjectlist.h"
|
||||||
#include "blackmisc/blackmiscexport.h"
|
#include "blackmisc/blackmiscexport.h"
|
||||||
#include "blackmisc/collection.h"
|
#include "blackmisc/collection.h"
|
||||||
@@ -282,6 +283,9 @@ namespace BlackMisc
|
|||||||
//! All distributors used with models of this list
|
//! All distributors used with models of this list
|
||||||
CDistributorList getDistributors(bool onlyDbDistributors = true) const;
|
CDistributorList getDistributors(bool onlyDbDistributors = true) const;
|
||||||
|
|
||||||
|
//! Aircraft ICAO codes from DB, without duplicates
|
||||||
|
Aviation::CAircraftIcaoCodeList getAircraftIcaoCodesFromDb() const;
|
||||||
|
|
||||||
//! Aircraft designators
|
//! Aircraft designators
|
||||||
QSet<QString> getAircraftDesignators() const;
|
QSet<QString> getAircraftDesignators() const;
|
||||||
|
|
||||||
@@ -293,6 +297,9 @@ namespace BlackMisc
|
|||||||
//! \remark gives all aircraft flown by an airline
|
//! \remark gives all aircraft flown by an airline
|
||||||
Aviation::CAircraftIcaoCodeList getAicraftIcaoCodesForAirline(const Aviation::CAirlineIcaoCode &airlineCode) const;
|
Aviation::CAircraftIcaoCodeList getAicraftIcaoCodesForAirline(const Aviation::CAirlineIcaoCode &airlineCode) const;
|
||||||
|
|
||||||
|
//! Airline ICAO codes from DB, without duplicates
|
||||||
|
Aviation::CAirlineIcaoCodeList getAirlineIcaoCodesFromDb() const;
|
||||||
|
|
||||||
//! Airline designators
|
//! Airline designators
|
||||||
QSet<QString> getAirlineDesignators() const;
|
QSet<QString> getAirlineDesignators() const;
|
||||||
|
|
||||||
@@ -355,7 +362,7 @@ namespace BlackMisc
|
|||||||
QString coverageSummaryForModel(const CAircraftModel &checkModel, const QString &separator = "\n") const;
|
QString coverageSummaryForModel(const CAircraftModel &checkModel, const QString &separator = "\n") const;
|
||||||
|
|
||||||
//! A HTML summary of the data in the list
|
//! A HTML summary of the data in the list
|
||||||
QString htmlStatistics() const;
|
QString htmlStatistics(bool aircraftStats, bool airlineStats) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Model per callsign
|
//! Model per callsign
|
||||||
|
|||||||
Reference in New Issue
Block a user