mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-02 07:05:38 +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;
|
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");
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user