mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-30 20:15:35 +08:00
Ref T409, new version of livery string parsing (sending ids)
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user