mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-26 02:35:38 +08:00
Ref T104, return inconsistent aircraft/airline ICAOs codes
- use audit - and log inconsistent DB entries
This commit is contained in:
committed by
Mathew Sutcliffe
parent
922e39f61d
commit
297c2f0539
@@ -15,6 +15,7 @@
|
|||||||
#include "blackmisc/json.h"
|
#include "blackmisc/json.h"
|
||||||
#include "blackmisc/logmessage.h"
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blackmisc/statusmessage.h"
|
#include "blackmisc/statusmessage.h"
|
||||||
|
#include "blackmisc/verify.h"
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -40,8 +41,8 @@ namespace BlackCore
|
|||||||
{
|
{
|
||||||
namespace Db
|
namespace Db
|
||||||
{
|
{
|
||||||
CIcaoDataReader::CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &confg) :
|
CIcaoDataReader::CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &config) :
|
||||||
CDatabaseReader(owner, confg, "CIcaoDataReader")
|
CDatabaseReader(owner, config, "CIcaoDataReader")
|
||||||
{
|
{
|
||||||
// init to avoid threading issues
|
// init to avoid threading issues
|
||||||
getBaseUrl(CDbFlags::DbReading);
|
getBaseUrl(CDbFlags::DbReading);
|
||||||
@@ -105,7 +106,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
CAirlineIcaoCode CIcaoDataReader::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
|
CAirlineIcaoCode CIcaoDataReader::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
|
||||||
{
|
{
|
||||||
CAirlineIcaoCodeList codes(this->getAirlineIcaoCodes()); // thread safe copy
|
const CAirlineIcaoCodeList codes(this->getAirlineIcaoCodes()); // thread safe copy
|
||||||
return codes.smartAirlineIcaoSelector(icaoPattern, callsign);
|
return codes.smartAirlineIcaoSelector(icaoPattern, callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,18 +240,25 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAircraftIcaoCodeList codes;
|
CAircraftIcaoCodeList codes;
|
||||||
|
CAircraftIcaoCodeList inconsistent;
|
||||||
if (res.isRestricted())
|
if (res.isRestricted())
|
||||||
{
|
{
|
||||||
// create full list if it was just incremental
|
// create full list if it was just incremental
|
||||||
const CAircraftIcaoCodeList incIcao(CAircraftIcaoCodeList::fromDatabaseJson(res, true));
|
const CAircraftIcaoCodeList incrementalCodes(CAircraftIcaoCodeList::fromDatabaseJson(res, true, &inconsistent));
|
||||||
if (incIcao.isEmpty()) { return; } // currently ignored
|
if (incrementalCodes.isEmpty()) { return; } // currently ignored
|
||||||
codes = this->getAircraftIcaoCodes();
|
codes = this->getAircraftIcaoCodes();
|
||||||
codes.replaceOrAddObjectsByKey(incIcao);
|
codes.replaceOrAddObjectsByKey(incrementalCodes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// normally read from special view which already filters incomplete
|
// normally read from special view which already filters incomplete
|
||||||
codes = CAircraftIcaoCodeList::fromDatabaseJson(res, true);
|
codes = CAircraftIcaoCodeList::fromDatabaseJson(res, true, &inconsistent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inconsistent.isEmpty())
|
||||||
|
{
|
||||||
|
BLACK_AUDIT_X(false, Q_FUNC_INFO, "Inconsistent aircraft codes");
|
||||||
|
CLogMessage(this).warning("Inconsistent aircraft codes: %1") << inconsistent.dbKeysAsStrings(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
const int n = codes.size();
|
const int n = codes.size();
|
||||||
@@ -281,18 +289,25 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCodeList codes;
|
CAirlineIcaoCodeList codes;
|
||||||
|
CAirlineIcaoCodeList inconsistent;
|
||||||
if (res.isRestricted())
|
if (res.isRestricted())
|
||||||
{
|
{
|
||||||
// create full list if it was just incremental
|
// create full list if it was just incremental
|
||||||
const CAirlineIcaoCodeList incIcao(CAirlineIcaoCodeList::fromDatabaseJson(res, true));
|
const CAirlineIcaoCodeList incrementalCodes(CAirlineIcaoCodeList::fromDatabaseJson(res, true, &inconsistent));
|
||||||
if (incIcao.isEmpty()) { return; } // currently ignored
|
if (incrementalCodes.isEmpty()) { return; } // currently ignored
|
||||||
codes = this->getAirlineIcaoCodes();
|
codes = this->getAirlineIcaoCodes();
|
||||||
codes.replaceOrAddObjectsByKey(incIcao);
|
codes.replaceOrAddObjectsByKey(incrementalCodes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// normally read from special view which already filters incomplete
|
// normally read from special view which already filters incomplete
|
||||||
codes = CAirlineIcaoCodeList::fromDatabaseJson(res, true);
|
codes = CAirlineIcaoCodeList::fromDatabaseJson(res, true, &inconsistent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inconsistent.isEmpty())
|
||||||
|
{
|
||||||
|
BLACK_AUDIT_X(false, Q_FUNC_INFO, "Inconsistent airline codes");
|
||||||
|
CLogMessage(this).warning("Inconsistent airline codes: %1") << inconsistent.dbKeysAsStrings(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
const int n = codes.size();
|
const int n = codes.size();
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace BlackCore
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
explicit CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &confg);
|
explicit CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &config);
|
||||||
|
|
||||||
//! Get aircraft ICAO information
|
//! Get aircraft ICAO information
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
CAircraftIcaoCodeList CAircraftIcaoCodeList::findEndingWith(const QString &icaoEnding) const
|
CAircraftIcaoCodeList CAircraftIcaoCodeList::findEndingWith(const QString &icaoEnding) const
|
||||||
{
|
{
|
||||||
QString ends = icaoEnding.trimmed().toUpper();
|
const QString ends = icaoEnding.trimmed().toUpper();
|
||||||
if (ends.isEmpty()) { return CAircraftIcaoCodeList(); }
|
if (ends.isEmpty()) { return CAircraftIcaoCodeList(); }
|
||||||
CAircraftIcaoCodeList icaosDesignator;
|
CAircraftIcaoCodeList icaosDesignator;
|
||||||
CAircraftIcaoCodeList icaosFamily;
|
CAircraftIcaoCodeList icaosFamily;
|
||||||
@@ -317,16 +317,29 @@ namespace BlackMisc
|
|||||||
return max;
|
return max;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftIcaoCodeList CAircraftIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates)
|
CAircraftIcaoCodeList CAircraftIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates, CAircraftIcaoCodeList *inconsistent)
|
||||||
{
|
{
|
||||||
CAircraftIcaoCodeList codes;
|
CAircraftIcaoCodeList codes;
|
||||||
for (const QJsonValue &value : array)
|
for (const QJsonValue &value : array)
|
||||||
{
|
{
|
||||||
const CAircraftIcaoCode icao(CAircraftIcaoCode::fromDatabaseJson(value.toObject()));
|
const CAircraftIcaoCode icao(CAircraftIcaoCode::fromDatabaseJson(value.toObject()));
|
||||||
if (ignoreIncompleteAndDuplicates)
|
if (!icao.hasSpecialDesignator() && !icao.hasCompleteData())
|
||||||
{
|
{
|
||||||
if (!icao.hasSpecialDesignator() && !icao.hasCompleteData()) { continue; }
|
if (ignoreIncompleteAndDuplicates) { continue; }
|
||||||
if (icao.isDbDuplicate()) { continue; }
|
if (inconsistent)
|
||||||
|
{
|
||||||
|
inconsistent->push_back(icao);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (icao.isDbDuplicate())
|
||||||
|
{
|
||||||
|
if (ignoreIncompleteAndDuplicates) { continue; }
|
||||||
|
if (inconsistent)
|
||||||
|
{
|
||||||
|
inconsistent->push_back(icao);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
codes.push_back(icao);
|
codes.push_back(icao);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ namespace BlackMisc
|
|||||||
QPair<QString, int> maxCountManufacturer() const;
|
QPair<QString, int> maxCountManufacturer() const;
|
||||||
|
|
||||||
//! From our database JSON format
|
//! From our database JSON format
|
||||||
static CAircraftIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates = true);
|
static CAircraftIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates = true, CAircraftIcaoCodeList *inconsistent = nullptr);
|
||||||
};
|
};
|
||||||
} //namespace
|
} //namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -185,15 +185,21 @@ namespace BlackMisc
|
|||||||
return airlineCode;
|
return airlineCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAirlineIcaoCodeList CAirlineIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete)
|
CAirlineIcaoCodeList CAirlineIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete, CAirlineIcaoCodeList *inconsistent)
|
||||||
{
|
{
|
||||||
CAirlineIcaoCodeList codes;
|
CAirlineIcaoCodeList codes;
|
||||||
for (const QJsonValue &value : array)
|
for (const QJsonValue &value : array)
|
||||||
{
|
{
|
||||||
const CAirlineIcaoCode icao(CAirlineIcaoCode::fromDatabaseJson(value.toObject()));
|
const CAirlineIcaoCode icao(CAirlineIcaoCode::fromDatabaseJson(value.toObject()));
|
||||||
if (ignoreIncomplete && !icao.hasCompleteData())
|
const bool incomplete = !icao.hasCompleteData();
|
||||||
|
if (incomplete)
|
||||||
{
|
{
|
||||||
continue;
|
if (ignoreIncomplete) { continue; }
|
||||||
|
if (inconsistent)
|
||||||
|
{
|
||||||
|
inconsistent->push_back(icao);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
codes.push_back(icao);
|
codes.push_back(icao);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ namespace BlackMisc
|
|||||||
QStringList toNameCompleterStrings(bool sort = true) const;
|
QStringList toNameCompleterStrings(bool sort = true) const;
|
||||||
|
|
||||||
//! From our DB JSON
|
//! From our DB JSON
|
||||||
static CAirlineIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete = true);
|
static CAirlineIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete = true, CAirlineIcaoCodeList *inconsistent = nullptr);
|
||||||
};
|
};
|
||||||
} //namespace
|
} //namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user