swift
aircraftmodelloader.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_IAIRCRAFTMODELLOADER_H
7 #define SWIFT_MISC_SIMULATION_IAIRCRAFTMODELLOADER_H
8 
9 #include <atomic>
10 #include <functional>
11 #include <memory>
12 
13 #include <QDateTime>
14 #include <QFlags>
15 #include <QMetaType>
16 #include <QObject>
17 #include <QString>
18 #include <QStringList>
19 
25 #include "misc/statusmessagelist.h"
26 #include "misc/swiftmiscexport.h"
27 
28 namespace swift::misc::simulation
29 {
35  public QObject,
37  public IModelsSetable,
38  public IModelsUpdatable
39  {
40  Q_OBJECT
45 
46  public:
48  static const QStringList &getLogCategories();
49 
52  {
53  NotSet = 0,
54  LoadDirectly = 1 << 0,
55  LoadInBackground = 1 << 1,
56  CacheFirst = 1 << 2,
57  CacheSkipped = 1 << 3,
58  CacheOnly = 1 << 4,
59  InBackgroundWithCache = LoadInBackground | CacheFirst,
60  InBackgroundNoCache = LoadInBackground | CacheSkipped
61  };
62  Q_DECLARE_FLAGS(LoadMode, LoadModeFlag)
63 
64 
66  {
70  LoadingFailed
71  };
72 
74  static bool isLoadedInfo(LoadFinishedInfo info) { return info == CacheLoaded || info == ParsedData; }
75 
77  static const QString &enumToString(LoadFinishedInfo info);
78 
80  static const QString &enumToString(LoadModeFlag modeFlag);
81 
83  static QString enumToString(LoadMode mode);
84 
86  static bool needsCacheSynchronized(LoadMode mode);
87 
91 
93  virtual ~IAircraftModelLoader() override;
94 
96  virtual bool isLoadingFinished() const = 0;
97 
100  void startLoading(LoadMode mode = InBackgroundWithCache,
101  const ModelConsolidationCallback &modelConsolidation = {},
102  const QStringList &modelDirectories = {});
103 
106  bool isLoadingInProgress() const { return m_loadingInProgress; }
107 
109  QStringList getModelDirectoriesOrDefault() const;
110 
112  QString getFirstModelDirectoryOrDefault() const;
113 
115  QStringList getModelExcludeDirectoryPatterns() const;
116 
118  const CSimulatorInfo &getSimulator() const { return m_simulator; }
119 
121  bool supportsSimulator(const CSimulatorInfo &simulator) const { return m_simulator == simulator; }
122 
123  // Interface implementations
124  virtual void setModels(const CAircraftModelList &models) override;
125  virtual int updateModels(const CAircraftModelList &models) override;
126 
127  signals:
130  void diskLoadingStarted(const CSimulatorInfo &simulator, IAircraftModelLoader::LoadMode loadMode);
131 
134  void loadingFinished(const CStatusMessageList &status, const CSimulatorInfo &simulator,
136 
141  void loadingProgress(const CSimulatorInfo &simulator, const QString &message, int progressPercentage);
142 
145  void cacheChanged(const CSimulatorInfo &simulator);
146 
147  protected:
149  IAircraftModelLoader(const CSimulatorInfo &simulator, QObject *parent = nullptr);
150 
152  virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation,
153  const QStringList &modelDirectories) = 0;
154 
156  QStringList getInitializedModelDirectories(const QStringList &modelDirectories,
157  const CSimulatorInfo &simulator) const;
158 
160  bool hasCachedData() const;
161 
163  std::atomic<bool> m_loadingInProgress { false };
164  std::atomic<bool> m_cancelLoading { false };
165  std::atomic<bool> m_skipLoadingEmptyModelDir {
166  true
167  };
169  settings::CMultiSimulatorSettings m_settings { this };
170 
171  private:
173  void setObjectInfo(const CSimulatorInfo &simulatorInfo);
174 
176  void onLoadingFinished(const CStatusMessageList &statusMsgs, const CSimulatorInfo &simulator,
177  LoadFinishedInfo info);
178 
180  void onCacheChanged(const CSimulatorInfo &simulator);
181  };
182 
187  {
188  Q_OBJECT
189 
190  public:
192  CDummyModelLoader(const CSimulatorInfo &simulator, QObject *parent);
193 
195  virtual bool isLoadingFinished() const override;
196 
197  protected:
199  virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation,
200  const QStringList &modelDirectories) override;
201 
202  private:
203  qint64 m_loadingStartedTs = -1;
204  };
205 } // namespace swift::misc::simulation
206 
207 Q_DECLARE_METATYPE(swift::misc::simulation::IAircraftModelLoader::LoadMode)
210 Q_DECLARE_OPERATORS_FOR_FLAGS(swift::misc::simulation::IAircraftModelLoader::LoadMode)
211 
212 #endif // SWIFT_MISC_SIMULATION_IAIRCRAFTMODELLOADER_H
Status messages, e.g. from Core -> GUI.
Value object encapsulating a list of aircraft models.
Simple hardcoded info about the corresponding simulator.
Definition: simulatorinfo.h:41
Load the aircraft for a simulator.
void loadingProgress(const CSimulatorInfo &simulator, const QString &message, int progressPercentage)
Loading progress, normally from disk.
std::function< int(swift::misc::simulation::CAircraftModelList &, bool)> ModelConsolidationCallback
Callback to consolidate data, normally with DB data.
const CSimulatorInfo & getSimulator() const
Simulator.
void cacheChanged(const CSimulatorInfo &simulator)
Relayed from centralized caches.
void loadingFinished(const CStatusMessageList &status, const CSimulatorInfo &simulator, IAircraftModelLoader::LoadFinishedInfo info)
Parsing is finished or cache has been loaded.
const CSimulatorInfo m_simulator
related simulator
bool supportsSimulator(const CSimulatorInfo &simulator) const
Supported simulator.
void diskLoadingStarted(const CSimulatorInfo &simulator, IAircraftModelLoader::LoadMode loadMode)
Disk loading started.
QStringList getModelExcludeDirectoryPatterns() const
Exclude directories.
bool isLoadingInProgress() const
Loading in progress.
virtual bool isLoadingFinished() const =0
Loading finished?
virtual void startLoadingFromDisk(LoadMode mode, const ModelConsolidationCallback &modelConsolidation, const QStringList &modelDirectories)=0
Start the loading process from disk.
static bool isLoadedInfo(LoadFinishedInfo info)
Loaded info.
@ LoadingSkipped
loading skipped (empty directory)
CStatusMessageList m_loadingMessages
loading messages
QStringList getModelDirectoriesOrDefault() const
Model directories.
Interface to "something" backing models, which can be set.
Interface to "something" backing models, which can be modified (updated)
Interface to "something" backing models, which can be set.
Interface to "something" backing models, which can be modified (updated)
Basically a QObject free (delegate based) version of CCentralMultiSimulatorModelCachesProvider.
Definition: modelcaches.h:533
#define SWIFT_MISC_EXPORT
Export a class or function from the library.