6 #ifndef SWIFT_MISC_SIMULATION_AIRCRAFTMODEL_H
7 #define SWIFT_MISC_SIMULATION_AIRCRAFTMODEL_H
15 #include <QJsonDocument>
16 #include <QJsonObject>
18 #include <QStringList>
61 return QStringLiteral(
"Model: %1 Livery: %2 Aircraft: %3").arg(
model).arg(
livery).arg(
aircraft);
96 All = Include | Exclude
100 Q_DECLARE_FLAGS(ModelModeFilter, ModelMode)
105 IndexModelString = CPropertyIndexRef::GlobalIndexCAircraftModel,
106 IndexModelStringAlias,
112 IndexSimulatorInfoAsString,
113 IndexAircraftIcaoCode,
119 IndexFileTimestampFormattedYmdhms,
121 IndexModelTypeAsString,
123 IndexModelModeAsString,
125 IndexModelModeAsIcon,
126 IndexHasQueriedModelString,
144 CAircraftModel(
const QString &model, ModelType type,
const QString &description,
150 const QString &description);
167 QString convertToQString(
bool i18n =
false)
const;
170 bool canInitializeFromFsd()
const;
185 QString getModelStringAndDbKey()
const;
188 void setModelString(
const QString &modelString) { m_modelString = modelString.trimmed().toUpper(); }
194 QString getAllModelStringsAndAliases()
const;
197 QString getAllModelStringsAliasesAndDbKey()
const;
206 void setDescription(
const QString &description) { m_description = description.trimmed(); }
211 m_modelString = model;
212 m_modelType = TypeQueriedFromNetwork;
233 return m_livery.setAirlineIcaoCodeDesignator(designator);
239 return m_livery.getAirlineIcaoCode().getDesignator();
245 return m_livery.getAirlineIcaoCode().getVDesignator();
252 void setAircraftIcaoDesignator(
const QString &designator);
259 bool hasValidAircraftAndAirlineDesignator()
const;
262 bool hasAircraftDesignator()
const;
265 bool hasKnownAircraftDesignator()
const;
268 bool hasCategory()
const;
271 bool hasAirlineDesignator()
const;
274 bool hasAircraftAndAirlineDesignator()
const;
277 bool isMilitary()
const;
280 bool isCivilian()
const;
289 bool hasLivery()
const {
return m_livery.hasCompleteData(); }
301 bool setDistributorOrder(
int order);
307 bool hasDbDistributor()
const;
310 bool hasDistributor()
const;
313 bool matchesDbDistributor(
const CDistributor &distributor)
const;
319 const QString &
getName()
const {
return m_name; }
322 void setName(
const QString &name) { m_name = name.trimmed(); }
331 bool hasCG()
const {
return !m_cg.isNull(); }
337 void setSupportedParts(
const QString &supportedParts);
355 bool matchesMode(simulation::CAircraftModel::ModelModeFilter mode)
const;
361 const CIcon &getModelModeAsIcon()
const;
367 void setModelModeAsString(
const QString &mode);
379 bool matchesSimulatorFlag(CSimulatorInfo::Simulator simulator)
const;
383 QString getSwiftLiveryString(
bool aircraftIcao =
true,
bool livery =
true,
bool model =
true)
const;
389 void updateMissingParts(
const CAircraftModel &otherModel,
bool dbModelPriority =
true);
393 void updateByExistingDirectories(
const CAircraftModel &otherModel);
396 bool hasQueriedModelString()
const;
399 bool hasManuallySetString()
const;
408 bool hasAnyModelString()
const {
return this->hasModelString() || this->hasModelStringAlias(); }
411 bool hasDescription(
bool ignoreAutoGenerated =
false)
const;
414 bool hasValidSimulator()
const;
417 QString getMembersDbStatus()
const;
420 bool matchesModelString(
const QString &modelString, Qt::CaseSensitivity sensitivity)
const;
423 bool matchesModelStringOrAlias(
const QString &modelString, Qt::CaseSensitivity sensitivity)
const;
426 int calculateScore(
const CAircraftModel &compareModel,
bool preferColorLiveries,
445 QJsonObject toDatabaseJson()
const;
448 QString toDatabaseJsonString(QJsonDocument::JsonFormat format = QJsonDocument::Compact)
const;
451 QString asHtmlSummary(
const QString &separator =
"<br>")
const;
466 bool matchesFileName(
const QString &fileName)
const;
469 bool hasExistingCorrespondingFile()
const;
472 QDir getFileDirectory()
const;
475 QString getFileDirectoryPath()
const;
478 bool isInPath(
const QString &path, Qt::CaseSensitivity cs)
const;
481 void setFileName(
const QString &fileName) { m_fileName = fileName; }
484 QDateTime getFileTimestamp()
const;
487 QString getFormattedFileTimestampYmdhms()
const;
490 bool hasValidFileTimestamp()
const;
493 void setFileTimestamp(
const QDateTime ×tampUtc);
496 void setFileTimestamp(qint64 timestamp);
499 void setFileDetailsAndTimestamp(
const QFileInfo &fileInfo);
502 void normalizeFileNameForDb();
509 bool adjustLocalFileNames(
const QString &newModelDir,
const QString &stripModelDirIndicator = {});
517 static const QString &modelTypeToString(ModelType type);
520 static QString normalizeFileNameForDb(
const QString &filePath);
523 static ModelMode modelModeFromString(
const QString &mode);
526 static const QString &modelModeToString(ModelMode mode);
529 static CAircraftModel fromDatabaseJson(
const QJsonObject &json,
const QString &prefix = QString(
"mod_"));
532 static CAircraftModel
535 DistributorIdMap &distributors,
const QString &prefix = QString(
"mod_"));
538 static const QString &liveryStringPrefix();
541 static bool isSwiftLiveryString(
const QString &liveryString);
545 static DBTripleIds parseNetworkLiveryString(
const QString &liveryString);
548 static const QString &autoGenerated();
551 static QString cleanUpPartsString(
const QString &p);
555 static const QString &supportedParts();
559 static CAircraftModel fromDatabaseJsonBaseImpl(
const QJsonObject &json,
const QString &prefix,
562 const CDistributor &distributor);
567 CSimulatorInfo m_simulator;
568 CDistributor m_distributor;
569 QString m_modelString;
570 QString m_modelStringAlias;
572 QString m_description;
574 QString m_supportedParts;
575 qint64 m_fileTimestamp = -1;
576 ModelType m_modelType = TypeUnknown;
577 ModelMode m_modelMode = Include;
607 Q_DECLARE_METATYPE(swift::misc::simulation::CAircraftModel::ModelModeFilter)
608 Q_DECLARE_OPERATORS_FOR_FLAGS(swift::misc::simulation::CAircraftModel::ModelModeFilter)
Value object for icons. An icon is stored in the global icon repository and identified by its index....
Memoizer for Ts. Other types are passed through.
Unmemoizer for Ts. Other types are passed through.
Non-owning reference to a CPropertyIndex with a subset of its features.
Status messages, e.g. from Core -> GUI.
Mix of the most commonly used mixin classes.
Entity with order attribute (can be manually ordered in views)
Value object for ICAO classification.
Value object for ICAO classification.
Value object encapsulating information of a callsign.
Value object encapsulating information about an airpot.
Class from which a derived class can inherit datastore-related functions.
ColumnIndex
Property index.
Physical unit length (length)
static const CLength & null()
NULL PQ.
Aircraft model (used by another pilot, my models on disk)
bool isTerrainProbe() const
Terrain probe?
const aviation::CCallsign & getCallsign() const
Corresponding callsign if applicable.
void setName(const QString &name)
Name.
ModelMode getModelMode() const
Model mode.
const aviation::CAirlineIcaoCode & getAirlineIcaoCode() const
Airline ICAO code.
const QString & getSupportedParts() const
Supported parts.
void setModelType(ModelType type)
Set type.
bool hasModelStringAlias() const
Non empty model string alias?
void setModelStringAlias(const QString &alias)
Model string alias.
const aviation::CLivery & getLivery() const
Get livery.
void setQueriedModelString(const QString &model)
Set queried model string.
ModelMode
Mode, decides if a model is supposed to be used in the model set for model matching or not....
void setModelString(const QString &modelString)
Model string.
const QString & getAircraftIcaoCodeDesignator() const
Aircraft ICAO code designator.
CSimulatorInfo getSimulator() const
Simulator info.
@ TypeModelMatchingDefaultModel
a default model assigned by model matching
@ TypeManuallySet
manually set, e.g.
@ TypeFSInnData
model based on FSD ICAO data
@ TypeVPilotRuleBased
based on a vPilot rule
@ TypeQueriedFromNetwork
model was queried by network protocol (ICAO data)
@ TypeOwnSimulatorModel
represents own simulator model (AI model, model on disk)
@ TypeDatabaseEntry
used along with mapping definition
@ TypeReverseLookup
reverse lookup model
@ TypeModelMatching
model is result of model matching
const QString & getModelString() const
Model key, either queried or loaded from simulator model.
bool isCallsignEmpty() const
Callsign empty.
void setFileName(const QString &fileName)
File name.
bool hasFileName() const
File name?
const physical_quantities::CLength & getCG() const
Get center of gravity.
const QString & getName() const
Name.
const QString & getModelModeAsString() const
Model mode as string.
CAircraftModel()
Default constructor.
const QString & getDescription() const
Descriptive text.
void setDescription(const QString &description)
Descriptive text.
void setSimulator(const CSimulatorInfo &simulator)
Set simulator info.
void setCG(const physical_quantities::CLength &cg)
Get center of gravity.
bool hasLivery() const
Livery available?
int getDistributorOrder() const
Get distributor`s order value.
const CDistributor & getDistributor() const
Get distributor.
const aviation::CAircraftIcaoCode & getAircraftIcaoCode() const
Aircraft ICAO code.
int getEngineCount() const
Engine count if any, -1 if no value is set.
ModelType getModelType() const
Model type.
const QString & getModelTypeAsString() const
Model type.
const QString & getModelStringAlias() const
Model key, either queried or loaded from simulator model.
const QString getAirlineIcaoCodeVDesignator() const
Airline ICAO code designator.
QString getFileNameLowerCase() const
File name as lower case.
const QString & getAirlineIcaoCodeDesignator() const
Airline ICAO code designator.
void setModelMode(ModelMode mode)
Set model mode.
bool setAirlineIcaoDesignator(const QString &designator)
Set airline ICAO code designator.
bool hasCG() const
CG value available?
bool hasAnyModelString() const
Any model string or alias?
bool hasModelString() const
Non empty model string?
void setLivery(const aviation::CLivery &livery)
Livery.
void setDistributor(const CDistributor &distributor)
Set distributor.
@ IndexAllModelStrings
indluding aliases
const QString & getFileName() const
File name (corresponding data for simulator, only available if representing simulator model.
Value object encapsulating information of software distributor.
Value object encapsulating a list of distributors.
Simple hardcoded info about the corresponding simulator.
Free functions in swift::misc.
void registerMetadata()
Register all relevant metadata in Misc.
Helper class for memoizing members of a value object.
QString toQString() const
Return as string.
int livery
livery id, by that I have airline id
bool hasAnyId() const
Any valid id?
int aircraft
aircraft ICAO id
#define SWIFT_MISC_EXPORT
Export a class or function from the library.
#define SWIFT_DECLARE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template declaration of mixins for a CValueObject subclass to be placed near the top of the ...