Ref T409, new version of livery string parsing (sending ids)

This commit is contained in:
Klaus Basan
2018-10-27 01:57:03 +02:00
parent b977b87177
commit 4b74267248
2 changed files with 71 additions and 41 deletions

View File

@@ -515,13 +515,55 @@ namespace BlackMisc
return pm; return pm;
} }
const QString &CAircraftModel::liveryStringPrefix()
{
static const QString p("swift_");
return p;
}
bool CAircraftModel::isSwiftLiyeryString(const QString &liveryString)
{
return (liveryString.length() > liveryStringPrefix().length() && liveryString.startsWith(liveryStringPrefix(), Qt::CaseInsensitive));
}
QString CAircraftModel::getSwiftLiveryString() const QString CAircraftModel::getSwiftLiveryString() const
{ {
const QString cc(this->getLivery().getCombinedCode()); const QString l =
if (cc.isEmpty() && !this->hasModelString()) { return ""; } (this->getLivery().hasValidDbKey() ? QStringLiteral("l") % this->getLivery().getDbKeyAsString() : QStringLiteral("")) %
if (cc.isEmpty()) { return this->getModelString(); } (this->getAircraftIcaoCode().hasValidDbKey() ? QStringLiteral("a") % this->getAircraftIcaoCode().getDbKeyAsString() : QStringLiteral("")) %
if (!this->hasModelString()) { return cc; } (this->hasValidDbKey() ? QStringLiteral("m") % this->getDbKeyAsString() : QStringLiteral(""));
return cc + " [" + this->getModelString() + "]";
return l.isEmpty() ? QStringLiteral("") : liveryStringPrefix() % l;
}
DBTripleIds CAircraftModel::parseNetworkLiveryString(const QString &liveryString)
{
// "swift_m22l33a11"
if (!CAircraftModel::isSwiftLiyeryString(liveryString)) {return DBTripleIds(); }
DBTripleIds ids;
const QString ls = liveryString.mid(liveryStringPrefix().length()).toLower();
for (int c = 0; c < ls.length(); c++)
{
const QChar m = ls[c];
if ((m == 'm' || m == 'a' || m == 'l') && (c + 1) < ls.length())
{
const int cs = c + 1;
int cc = cs;
while (cc < ls.length() && ls[cc].isDigit()) { cc++; } // find end of id
if (cc > cs)
{
const QString idString = ls.mid(cs, cc - cs);
const int id = idString.toInt();
c = cc - 1; // +1 again in for
if (m == 'm') { ids.model = id; }
else if (m == 'a') { ids.aircraft = id; }
else if (m == 'l') { ids.livery = id; }
}
}
}
return ids;
} }
void CAircraftModel::updateMissingParts(const CAircraftModel &otherModel, bool dbModelPriority) void CAircraftModel::updateMissingParts(const CAircraftModel &otherModel, bool dbModelPriority)
@@ -922,37 +964,6 @@ namespace BlackMisc
return model; return model;
} }
QStringList CAircraftModel::splitNetworkLiveryString(const QString &liveryString)
{
QStringList liveryModelStrings({ "", "" });
if (liveryString.isEmpty()) { return liveryModelStrings; }
const QString l(liveryString.toUpper().trimmed());
if (liveryString.contains('[') && liveryString.contains(']'))
{
// seems to be a valid swift string
const QStringList split = l.split("[");
if (split.size() > 0)
{
liveryModelStrings[0] = split[0].trimmed();
}
if (split.size() > 1)
{
QString m = split[1];
m.replace('[', ' ');
m.replace(']', ' ');
liveryModelStrings[1] = m.trimmed();
}
}
else
{
if (CLivery::isValidCombinedCode(l))
{
liveryModelStrings[0] = l;
}
}
return liveryModelStrings;
}
const QString &CAircraftModel::autoGenerated() const QString &CAircraftModel::autoGenerated()
{ {
static const QString ag("swift auto generated"); static const QString ag("swift auto generated");

View File

@@ -47,6 +47,20 @@ namespace BlackMisc
class CIcon; class CIcon;
namespace Simulation namespace Simulation
{ {
//! DB ids
struct DBTripleIds
{
int model = -1; //!< model id
int livery = -1; //!< livery id, by that I have airline id
int aircraft = -1; //!< aircraft ICAO id
//! Any valid id?
bool hasAnyId() const
{
return model >= 0 || livery >= 0 || aircraft >= 0;
}
};
//! Aircraft model (used by another pilot, my models on disk) //! Aircraft model (used by another pilot, my models on disk)
//! \remarks Simulator independent class, supposed to be common denominator //! \remarks Simulator independent class, supposed to be common denominator
class BLACKMISC_EXPORT CAircraftModel : class BLACKMISC_EXPORT CAircraftModel :
@@ -316,8 +330,8 @@ namespace BlackMisc
//! Matches given simulator? //! Matches given simulator?
bool matchesSimulatorFlag(CSimulatorInfo::Simulator simulator) const; bool matchesSimulatorFlag(CSimulatorInfo::Simulator simulator) const;
//! swift livery string (to be sent via network), "liveryCode [modelString]"; //! swift livery string (to be sent via network)
//! \sa splitNetworkLiveryString //! \sa parseNetworkLiveryString
QString getSwiftLiveryString() const; QString getSwiftLiveryString() const;
//! Update missing parts from another model //! Update missing parts from another model
@@ -445,10 +459,15 @@ namespace BlackMisc
//! From swift DB JSON, caching during this process (faster) //! From swift DB JSON, caching during this process (faster)
static CAircraftModel fromDatabaseJsonCaching(const QJsonObject &json, Aviation::AircraftIcaoIdMap &aircraftIcaos, Aviation::LiveryIdMap &liveries, DistributorIdMap &distributors, const QString &prefix = QString("mod_")); static CAircraftModel fromDatabaseJsonCaching(const QJsonObject &json, Aviation::AircraftIcaoIdMap &aircraftIcaos, Aviation::LiveryIdMap &liveries, DistributorIdMap &distributors, const QString &prefix = QString("mod_"));
//! Split swift network string "DLH._STD [modelname]" //! Livery string prefix
//! \return QStringList [0] livery code , [1] model string static const QString &liveryStringPrefix();
//! swift livery string
static bool isSwiftLiyeryString(const QString &liveryString);
//! Split swift network string
//! \sa getSwiftLiveryString //! \sa getSwiftLiveryString
static QStringList splitNetworkLiveryString(const QString &liveryString); static DBTripleIds parseNetworkLiveryString(const QString &liveryString);
//! Hint, that model was automatically generated (e.g. by auto stashing) //! Hint, that model was automatically generated (e.g. by auto stashing)
static const QString &autoGenerated(); static const QString &autoGenerated();