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;
}
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
{
const QString cc(this->getLivery().getCombinedCode());
if (cc.isEmpty() && !this->hasModelString()) { return ""; }
if (cc.isEmpty()) { return this->getModelString(); }
if (!this->hasModelString()) { return cc; }
return cc + " [" + this->getModelString() + "]";
const QString l =
(this->getLivery().hasValidDbKey() ? QStringLiteral("l") % this->getLivery().getDbKeyAsString() : QStringLiteral("")) %
(this->getAircraftIcaoCode().hasValidDbKey() ? QStringLiteral("a") % this->getAircraftIcaoCode().getDbKeyAsString() : QStringLiteral("")) %
(this->hasValidDbKey() ? QStringLiteral("m") % this->getDbKeyAsString() : QStringLiteral(""));
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)
@@ -922,37 +964,6 @@ namespace BlackMisc
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()
{
static const QString ag("swift auto generated");

View File

@@ -47,6 +47,20 @@ namespace BlackMisc
class CIcon;
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)
//! \remarks Simulator independent class, supposed to be common denominator
class BLACKMISC_EXPORT CAircraftModel :
@@ -316,8 +330,8 @@ namespace BlackMisc
//! Matches given simulator?
bool matchesSimulatorFlag(CSimulatorInfo::Simulator simulator) const;
//! swift livery string (to be sent via network), "liveryCode [modelString]";
//! \sa splitNetworkLiveryString
//! swift livery string (to be sent via network)
//! \sa parseNetworkLiveryString
QString getSwiftLiveryString() const;
//! Update missing parts from another model
@@ -445,10 +459,15 @@ namespace BlackMisc
//! 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_"));
//! Split swift network string "DLH._STD [modelname]"
//! \return QStringList [0] livery code , [1] model string
//! Livery string prefix
static const QString &liveryStringPrefix();
//! swift livery string
static bool isSwiftLiyeryString(const QString &liveryString);
//! Split swift network string
//! \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)
static const QString &autoGenerated();