swift
aircraftmodellist.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_SIMULATION_AIRCRAFTMODELLIST_H
7 #define SWIFT_MISC_SIMULATION_AIRCRAFTMODELLIST_H
8 
9 #include <atomic>
10 
11 #include <QHash>
12 #include <QJsonArray>
13 #include <QJsonDocument>
14 #include <QMap>
15 #include <QMetaType>
16 #include <QMultiMap>
17 #include <QString>
18 #include <QStringList>
19 #include <Qt>
20 
26 #include "misc/collection.h"
28 #include "misc/orderablelist.h"
29 #include "misc/sequence.h"
33 #include "misc/statusmessage.h"
34 #include "misc/statusmessagelist.h"
35 #include "misc/swiftmiscexport.h"
36 
37 SWIFT_DECLARE_SEQUENCE_MIXINS(swift::misc::Simulation, CAircraftModel, CAircraftModelList)
38 
39 namespace swift::misc
40 {
41  namespace aviation
42  {
43  class CCallsign;
44  class CLivery;
45  class CAirlineIcaoCode;
46  } // namespace aviation
47 
48  namespace simulation
49  {
51  using ScoredModels = QMultiMap<int, CAircraftModel>;
52 
55  public CSequence<CAircraftModel>,
56  public db::IDatastoreObjectList<CAircraftModel, CAircraftModelList, int>,
57  public IOrderableList<CAircraftModel, CAircraftModelList>,
58  public aviation::ICallsignObjectList<CAircraftModel, CAircraftModelList>,
59  public mixin::MetaType<CAircraftModelList>
60  {
61  public:
64 
67 
70 
72  bool containsModelString(const QString &modelString,
73  Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
74 
76  bool containsModelStringOrDbKey(const simulation::CAircraftModel &model,
77  Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
78 
80  bool containsCallsign(const aviation::CCallsign &callsign) const;
81 
83  bool containsCombinedType(const QString &combinedType) const;
84 
86  bool containsModelsWithAircraftIcaoDesignator(const QString &aircraftDesignator) const;
87 
89  bool containsModelsWithAircraftAndAirlineIcaoDesignator(const QString &aircraftDesignator,
90  const QString &airlineDesignator) const;
91 
93  bool containsAirlineLivery(const aviation::CAirlineIcaoCode &airline) const;
94 
96  bool containsMatchingSimulator(const CSimulatorInfo &simulators) const;
97 
99  bool containsNotMatchingSimulator(const CSimulatorInfo &simulators) const;
100 
102  bool containsMilitary() const;
103 
105  bool containsCivilian() const;
106 
108  bool containsCivilianAndMilitary() const;
109 
111  bool containsVtol() const;
112 
114  bool containsCategory() const;
115 
117  bool containsCategory(int firstLevel) const;
118 
121  CAircraftModelList findByModelString(const QString &modelString,
122  Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
123 
125  CAircraftModelList findEmptyModelStrings() const;
126 
128  CAircraftModel findFirstByModelStringOrDefault(const QString &modelString,
129  Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
130 
133  findFirstByModelStringAliasOrDefault(const QString &modelString,
134  Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
135 
137  CAircraftModel findFirstByCallsignOrDefault(const aviation::CCallsign &callsign) const;
138 
140  CAircraftModelList findModelsStartingWith(const QString &modelString,
141  Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
142 
144  CAircraftModelList findByModelStrings(const QStringList &modelStrings,
145  Qt::CaseSensitivity sensitivity) const;
146 
148  CAircraftModelList findByNotInModelStrings(const QStringList &modelStrings,
149  Qt::CaseSensitivity sensitivity) const;
150 
152  CAircraftModelList findByIcaoDesignators(const aviation::CAircraftIcaoCode &aircraftIcaoCode,
153  const aviation::CAirlineIcaoCode &airlineIcaoCode) const;
154 
156  CAircraftModelList findByAircraftAndAirline(const aviation::CAircraftIcaoCode &aircraftIcaoCode,
157  const aviation::CAirlineIcaoCode &airlineIcaoCode) const;
158 
160  CAircraftModelList findByAircraftDesignatorAndLiveryCombinedCode(const QString &aircraftDesignator,
161  const QString &combinedCode) const;
162 
164  CAircraftModelList findByAircraftAndLivery(const aviation::CAircraftIcaoCode &aircraftIcaoCode,
165  const aviation::CLivery &livery) const;
166 
168  CAircraftModelList findByAirlineGroup(const swift::misc::aviation::CAirlineIcaoCode &airline) const;
169 
171  CAircraftModelList findByAirlineNameAndTelephonyDesignator(const QString &name, const QString &telephony,
172  bool onlyIfExistInModel = true) const;
173 
175  CAircraftModelList findByAirlineNamesOrTelephonyDesignator(const QString &name) const;
176 
178  CAircraftModelList findByLiveryCode(const aviation::CLivery &livery) const;
179 
181  CAircraftModelList findWithFileName() const;
182 
184  CAircraftModelList findByDistributor(const CDistributor &distributor) const;
185 
187  CAircraftModelList findByDistributors(const CDistributorList &distributors) const;
188 
190  CAircraftModelList findWithAircraftDesignator() const;
191 
193  CAircraftModelList findWithAircraftDesignator(const QSet<QString> &designators) const;
194 
196  CAircraftModelList findWithKnownAircraftDesignator() const;
197 
199  CAircraftModelList findByManufacturer(const QString &manufacturer) const;
200 
202  CAircraftModelList findByFamily(const QString &family) const;
203 
205  CAircraftModelList findByFamilyWithColorLivery(const QString &family) const;
206 
208  CAircraftModelList findByDesignatorOrFamilyWithColorLivery(const aviation::CAircraftIcaoCode &icao) const;
209 
211  CAircraftModelList findByDesignatorsOrFamilyWithColorLivery(const QStringList &designators) const;
212 
214  CAircraftModelList findByCombinedType(const QString &combinedType) const;
215 
217  CAircraftModelList findByCombinedTypeAndWtc(const QString &combinedType, const QString &wtc) const;
218 
220  CAircraftModelList findByCombinedTypeWithColorLivery(const QString &combinedType) const;
221 
223  CAircraftModelList findByCombinedTypeAndWtcWithColorLivery(const QString &combinedType,
224  const QString &wtc) const;
225 
229  CAircraftModelList findByCombinedAndManufacturer(const aviation::CAircraftIcaoCode &icao) const;
230 
234  CAircraftModelList findByCombinedAndManufacturer(const QString &combinedType,
235  const QString &manufacturer) const;
236 
238  CAircraftModelList findColorLiveries() const;
239 
242  CAircraftModelList findClosestColorDistance(const CRgbColor &fuselage, const CRgbColor &tail) const;
243  CAircraftModelList findClosestFuselageColorDistance(const CRgbColor &color) const;
245 
247  CAircraftModelList findByMilitaryFlag(bool military) const;
248 
250  CAircraftModelList findByVtolFlag(bool vtol) const;
251 
253  CAircraftModelList findByModelMode(CAircraftModel::ModelMode mode) const;
254 
256  CAircraftModelList findByCategoryFirstLevel(int firstLevel) const;
257 
259  CAircraftModelList findByCategory(const aviation::CAircraftCategory &category) const;
260 
262  CAircraftModelList findByCategories(const aviation::CAircraftCategoryList &categories) const;
263 
265  CAircraftModelList findModelsWithoutExistingFile() const;
266 
268  CAircraftModelList findModelsWithExistingFile() const;
269 
271  CAircraftModelList findDuplicateModelStrings() const;
272 
274  CAircraftModelList findFsFamilyModels() const;
275 
277  CAircraftModelList findNonFsFamilyModels() const;
278 
281  CAircraftModelList findWithValidDbKey() const;
282  CAircraftModelList findWithoutValidDbKey() const;
283  CAircraftModelList findWithoutValidDbKey(int maxElements) const;
285 
288  CAircraftModelList findNonDbModelsForAirline(const QString &airline) const;
289  CAircraftModelList findNonDbModelsForAircraft(const QString &airline) const;
290  CAircraftModelList findNonDbModelsForModelString(const QString &modelString) const;
292 
295  CAircraftModelList findAllIncludedModels() const;
296  CAircraftModelList findAllIncludedModels(int maxElements) const;
297  CAircraftModelList findAllExcludedModels() const;
298  CAircraftModelList findAllExcludedModels(int maxElements) const;
300 
302  QString designatorToFamily(const aviation::CAircraftIcaoCode &aircraftIcaoCode) const;
303 
305  CAircraftModelList matchesSimulator(const CSimulatorInfo &simulator) const;
306 
308  int setSimulatorInfo(const CSimulatorInfo &info);
309 
311  CSimulatorInfo simulatorsSupported() const;
312 
314  bool isLikelyFsFamilyModelList() const;
315 
317  bool isLikelyFsxFamilyModelList() const;
318 
320  bool isLikelyXPlaneModelList() const;
321 
323  int setModelMode(CAircraftModel::ModelMode mode);
324 
326  int setModelType(CAircraftModel::ModelType type);
327 
329  int setCG(const physical_quantities::CLength &cg);
330 
333  int keepModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity);
334 
337  bool removeModelWithString(const QString &modelString, Qt::CaseSensitivity sensitivity);
338 
341  int removeModelsWithString(const CAircraftModelList &models, Qt::CaseSensitivity sensitivity);
342 
345  int removeModelsWithString(const QStringList &modelStrings, Qt::CaseSensitivity sensitivity);
346 
349  int removeIfNotMatchingSimulator(const CSimulatorInfo &needToMatch);
350 
353  int removeAllWithoutModelString();
354 
357  int removeIfExcluded();
358 
360  int removeXPlaneFlyablePlanes();
361 
364  int removeByDistributor(const CDistributor &distributor);
365 
368  int removeByAircraftAndLivery(const aviation::CAircraftIcaoCode &aircraftIcao,
369  const aviation::CLivery &livery);
370 
373  int removeByAircraftAndAirline(const aviation::CAircraftIcaoCode &aircraftIcao,
374  const aviation::CAirlineIcaoCode &airline);
375 
378  int removeIfNotFsFamily();
379 
382  CAircraftModelList removeIfFileButNotInSet(const QString &fileName, const QSet<QString> &modelStrings);
383 
386  bool replaceOrAddModelWithString(const CAircraftModel &addOrReplaceModel, Qt::CaseSensitivity sensitivity);
387 
390  int replaceOrAddModelsWithString(const CAircraftModelList &addOrReplaceList,
391  Qt::CaseSensitivity sensitivity);
392 
394  QStringList getModelStringList(bool sort = true) const;
395 
397  QSet<QString> getModelStringSet() const;
398 
400  CCountPerSimulator countPerSimulator() const;
401 
403  QMap<QString, int> countPerModelString() const;
404 
406  QMap<swift::misc::simulation::CDistributor, int> countPerDistributor() const;
407 
409  QMap<swift::misc::aviation::CAircraftIcaoCode, int> countPerAircraftIcao() const;
410 
412  QMap<swift::misc::aviation::CAirlineIcaoCode, int> countPerAirlineIcao() const;
413 
415  aviation::CAirlineIcaoCode getAirlineWithMaxCount() const;
416 
418  CSimulatorInfo simulatorsWithMaxEntries() const;
419 
421  int countModelsWithColorLivery() const;
422 
424  int countModelsWithAirlineLivery() const;
425 
427  int countVtolAircraft() const;
428 
430  int countByMode(CAircraftModel::ModelMode mode) const;
431 
433  int countMilitaryAircraft() const;
434 
436  int countCivilianAircraft() const;
437 
439  int countDifferentAirlines() const;
440 
442  int countCombinedTypes() const;
443 
445  int countAliases() const;
446 
448  void sortByFileName();
449 
451  void updateDistributor(const CDistributor &distributor);
452 
454  CDistributorList getDistributors(bool onlyDbDistributors = true) const;
455 
457  aviation::CAircraftIcaoCodeList getAircraftIcaoCodesFromDb() const;
458 
460  QSet<QString> getAircraftDesignators() const;
461 
464  QSet<QString> getAircraftDesignatorsForAirline(const aviation::CAirlineIcaoCode &airlineCode) const;
465 
469  getAicraftIcaoCodesForAirline(const aviation::CAirlineIcaoCode &airlineCode) const;
470 
472  aviation::CAirlineIcaoCodeList getAirlineIcaoCodesFromDb() const;
473 
475  QSet<QString> getAirlineDesignators() const;
476 
478  QSet<QString> getAirlineVDesignators() const;
479 
481  aviation::CAirlineIcaoCodeList getAirlineIcaoCodesForGroup(int groupId) const;
482 
484  QSet<QString> getAirlineDesignatorsForGroup(int groupId) const;
485 
487  QSet<QString> getAirlineVDesignatorsForGroup(int groupId) const;
488 
490  QSet<QString> getCombinedTypes() const;
491 
493  QSet<QString> getAllFileNames() const;
494 
497  QSet<QString> getAllUNCFileNames() const;
498 
500  QString getCombinedTypesAsString(const QString &separator = ", ") const;
501 
503  QSet<QString> getAicraftAndAirlineDesignators(bool withDbId) const;
504 
506  QString getAicraftAndAirlineDesignatorsAsString(bool withDbId, const QString &separator = ", ") const;
507 
509  void updateAircraftIcao(const aviation::CAircraftIcaoCode &icao);
510 
512  void updateLivery(const aviation::CLivery &livery);
513 
515  int updateDistributorOrder(const CDistributorList &distributors);
516 
518  void normalizeFileNamesForDb();
519 
521  ScoredModels scoreFull(const CAircraftModel &remoteModel, bool preferColorLiveries,
522  bool ignoreZeroScores = true, CStatusMessageList *log = nullptr) const;
523 
525  QStringList toCompleterStrings(bool sorted = true,
526  const CSimulatorInfo &simulator = { CSimulatorInfo::All }) const;
527 
529  CStatusMessageList validateForPublishing() const;
530 
532  CStatusMessageList validateForPublishing(CAircraftModelList &validModels,
533  CAircraftModelList &invalidModels) const;
534 
536  CStatusMessageList validateDistributors(const CDistributorList &distributors,
537  CAircraftModelList &validModels,
538  CAircraftModelList &invalidModels) const;
539 
541  CStatusMessageList validateFiles(CAircraftModelList &validModels, CAircraftModelList &invalidModels,
542  bool ignoreEmptyFileNames, int stopAtFailedFiles,
543  std::atomic_bool &wasStopped, const QString &simRootDirectory,
544  bool alreadySortedByFn = false) const;
545 
547  QJsonObject toMemoizedJson() const;
548 
550  void convertFromMemoizedJson(const QJsonObject &json, bool fallbackToConvertToJson = false);
551 
553  QJsonArray toDatabaseJson() const;
554 
556  QString toDatabaseJsonString(QJsonDocument::JsonFormat format = QJsonDocument::Compact) const;
557 
559  QString asHtmlSummary() const;
560 
562  QString coverageSummary(const QString &separator = "\n") const;
563 
566  QString coverageSummaryForModel(const CAircraftModel &checkModel, const QString &separator = "\n") const;
567 
569  QString htmlStatistics(bool aircraftStats, bool airlineStats) const;
570 
573  CStatusMessage saveInvalidModels() const;
574  CStatusMessage loadInvalidModels();
575  static const QString &invalidModelFileAndPath();
576  static bool hasInvalidModelFile();
578 
581  static void addAsValidOrInvalidModel(const CAircraftModel &model, bool valid,
582  CAircraftModelList &validModels, CAircraftModelList &invalidModels);
583  static void addAsValidOrInvalidModels(const CAircraftModelList &models, bool valid,
584  CAircraftModelList &validModels, CAircraftModelList &invalidModels);
586 
588  static CAircraftModelList
589  fromDatabaseJsonCaching(const QJsonArray &array, const aviation::CAircraftIcaoCodeList &aircraftIcaos = {},
590  const aviation::CAircraftCategoryList &aircraftCategories = {},
591  const aviation::CLiveryList &liveries = {},
592  const CDistributorList &distributors = {});
593 
594  private:
596  CStatusMessageList validateUncFiles(const QSet<QString> &uncFiles) const;
597  };
598 
601 
602  } // namespace simulation
603 } // namespace swift::misc
604 
608 
609 #endif // SWIFT_MISC_SIMULATION_AIRCRAFTMODELLIST_H
QMultiMap< int, CAircraftModel > ScoredModels
Individual (matching) score for each model.
Generic ordered container with value semantics.
Definition: collection.h:107
Generic sequential container with value semantics.
Definition: sequence.h:86
CSequence()=default
Default constructor.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
List of orderable IOrderable objects.
Definition: orderablelist.h:19
Value object for aircraft categories.
Value object encapsulating a list of ICAO codes.
Value object for ICAO classification.
Value object encapsulating a list of ICAO codes.
Value object for ICAO classification.
Value object encapsulating a list of ICAO codes.
Value object encapsulating information of a callsign.
Definition: callsign.h:30
Value object encapsulating information about an airpot.
Definition: livery.h:29
Value object for a list of airports.
Definition: liverylist.h:29
List of objects read from database. Such objects should implement.
CRTP class template from which a derived class can inherit common methods dealing with the metatype o...
Definition: mixinmetatype.h:29
Physical unit length (length)
Definition: length.h:18
Aircraft model (used by another pilot, my models on disk)
Definition: aircraftmodel.h:71
ModelMode
Mode, decides if a model is supposed to be used in the model set for model matching or not....
Definition: aircraftmodel.h:92
Value object encapsulating a list of aircraft models.
Count per simulator, small utility class allows to retrieve values as per simulator.
Value object encapsulating information of software distributor.
Definition: distributor.h:33
Value object encapsulating a list of distributors.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
#define SWIFT_MISC_DECLARE_USING_MIXIN_METATYPE(DERIVED)
When a derived class and a base class both inherit from mixin::MetaType, the derived class uses this ...
Free functions in swift::misc.
#define SWIFT_DECLARE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template declaration of mixins for a CSequence subclass to be placed near the top of the hea...
Definition: sequence.h:62
#define SWIFT_MISC_EXPORT
Export a class or function from the library.