swift
aircraftmodelloaderxplane.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2015 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_XPLANE_AIRCRAFTMODELLOADERXPLANE_H
7 #define SWIFT_MISC_SIMULATION_XPLANE_AIRCRAFTMODELLOADERXPLANE_H
8 
9 #include <QObject>
10 #include <QPointer>
11 #include <QString>
12 #include <QStringList>
13 #include <QVector>
14 #include <QtGlobal>
15 
19 #include "misc/swiftmiscexport.h"
20 
21 namespace swift::misc
22 {
23  class CWorker;
24 
25  namespace simulation::xplane
26  {
31  {
32  Q_OBJECT
33 
34  public:
36  CAircraftModelLoaderXPlane(QObject *parent = nullptr);
37 
39  virtual ~CAircraftModelLoaderXPlane() override;
40 
43  virtual bool isLoadingFinished() const override;
45 
47  void updateInstalledModels(const CAircraftModelList &models);
48 
49  protected:
52  virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation,
53  const QStringList &modelDirectories) override;
55 
56  private:
58  struct CSLPlane
59  {
60  enum ObjectVersion
61  {
62  OBJ7,
63  OBJ8
64  };
65 
66  QString getModelName() const;
67 
68  // Model name parts
69  QStringList dirNames;
70  QString objectName;
71  QString textureName;
72 
73  QString filePath;
74  QString icao;
75  QString airline;
76  QString livery;
77 
78  ObjectVersion objectVersion;
79 
80  bool hasErrors = false;
81  };
82 
84  struct CSLPackage
85  {
86  bool hasValidHeader() const { return !name.isEmpty() && !path.isEmpty(); }
87 
88  QString name;
89  QString path;
90  QVector<CSLPlane> planes;
91  };
92 
93  CAircraftModelList performParsing(const QStringList &rootDirectories,
94  const QStringList &excludeDirectories);
95  CAircraftModelList parseFlyableAirplanes(const QString &rootDirectory,
96  const QStringList &excludeDirectories);
97  CAircraftModelList parseCslPackages(const QString &rootDirectory, const QStringList &excludeDirectories);
98 
99  bool doPackageSub(QString &ioPath);
100 
101  bool parseExportCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
102  bool parseDependencyCommand(const QStringList &tokens, CSLPackage &package, const QString &path,
103  int lineNum);
104  bool parseObjectCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
105  bool parseTextureCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
106  bool parseAircraftCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
107  bool parseObj8AircraftCommand(const QStringList &tokens, CSLPackage &package, const QString &path,
108  int lineNum);
109  bool parseObj8Command(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
110  bool parseHasGearCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
111  bool parseIcaoCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
112  bool parseAirlineCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
113  bool parseLiveryCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
114  bool parseDummyCommand(const QStringList &tokens, CSLPackage &package, const QString &path, int lineNum);
115 
116  CSLPackage parsePackageHeader(const QString &path, const QString &content);
117  void parseFullPackage(const QString &content, CSLPackage &package);
118 
119  void addUniqueModel(const CAircraftModel &model, CAircraftModelList &models);
120 
121  QPointer<CWorker> m_parserWorker;
122  QVector<CSLPackage>
123  m_cslPackages;
124 
125  static const QString &fileFilterFlyable();
126  static const QString &fileFilterCsl();
127  };
128  } // namespace simulation::xplane
129 } // namespace swift::misc
130 
131 #endif // SWIFT_MISC_SIMULATION_XPLANE_AIRCRAFTMODELLOADERXPLANE_H
Aircraft model (used by another pilot, my models on disk)
Definition: aircraftmodel.h:71
Value object encapsulating a list of aircraft models.
Load the aircraft for a simulator.
std::function< int(swift::misc::simulation::CAircraftModelList &, bool)> ModelConsolidationCallback
Callback to consolidate data, normally with DB data.
Free functions in swift::misc.
#define SWIFT_MISC_EXPORT
Export a class or function from the library.