9 #include <QDomDocument>
10 #include <QDomNamedNodeMap>
12 #include <QDomNodeList>
15 #include <QFileInfoList>
17 #include <QReadLocker>
18 #include <QStandardPaths>
20 #include <QWriteLocker>
31 namespace swift::misc::simulation::fscommon
55 if (this->m_fileList.
contains(fileName)) {
return; }
56 this->m_fileList.
append(fileName);
62 if (!dir.
exists()) {
return; }
86 if (!vPilotModels.
isEmpty() || m_rules.
isEmpty()) {
return vPilotModels; }
92 this->ps_setCache(vPilotModels);
101 return m_rules.
size();
118 directory.
append(
"vPilot Files/Model Matching Rule Sets");
129 for (
const QString &fn : fileList)
131 if (m_shutdown) {
return false; }
133 bool s = this->loadFile(fn, rules);
134 if (!s) { filesWithProblems.
append(fn); }
139 this->m_loadedFiles = loadedFiles;
140 this->m_fileListWithProblems = filesWithProblems;
141 this->m_rules = rules;
142 if (m_shutdown) {
return false; }
145 const bool success = loadedFiles > 0;
149 this->ps_setCache(vPilotModels);
161 if (m_asyncLoadInProgress || m_shutdown) {
return nullptr; }
162 m_asyncLoadInProgress =
true;
165 this,
"CVPilotRulesReader", [
this, convertToModels]() { this->
read(convertToModels); });
166 worker->
then(
this, &CVPilotRulesReader::ps_readInBackgroundFinished);
170 void CVPilotRulesReader::ps_readInBackgroundFinished()
173 m_asyncLoadInProgress =
false;
176 void CVPilotRulesReader::ps_onVPilotCacheChanged()
181 void CVPilotRulesReader::ps_setCache(
const CAircraftModelList &models)
183 if (this->m_cachedVPilotModels.isOwnerThread())
188 m = this->m_cachedVPilotModels.set(models);
198 bool CVPilotRulesReader::loadFile(
const QString &fileName, CVPilotModelRuleSet &ruleSet)
201 if (!f.exists()) {
return false; }
204 if (fc.
isEmpty()) {
return false; }
208 if (rules.
isEmpty()) {
return false; }
211 if (mmRuleSet.
size() < 1) {
return true; }
222 int rulesSize = rules.
size();
223 for (
int i = 0; i < rulesSize; i++)
230 if (modelName.
isEmpty()) {
continue; }
237 for (
const QString &model : models)
239 if (model.isEmpty()) {
continue; }
240 CVPilotModelRule rule(model, folder, typeCode, callsignPrefix, updatedTimestamp);
241 ruleSet.push_back(rule);
247 CVPilotModelRule rule(modelName, folder, typeCode, callsignPrefix, updatedTimestamp);
248 ruleSet.push_back(rule);
size_type size() const
Returns number of elements in the collection.
bool isEmpty() const
Synonym for empty.
static void preformatted(const CStatusMessage &statusMessage)
Sends a verbatim, preformatted message to the log.
bool isEmpty() const
Synonym for empty.
Streamable status message, e.g.
bool isFailure() const
Operation considered unsuccessful.
void then(T *context, F functor)
Connects to a functor or method which will be called when the task is finished.
Class for doing some arbitrary parcel of work in its own thread.
static CWorker * fromTask(QObject *owner, const QString &name, F &&task)
Returns a new worker object which lives in a new thread.
Value object encapsulating a list of aircraft models.
Value object reading a set of vPilot rules.
simulation::CAircraftModelList toAircraftModels() const
To aircraft models.
swift::misc::simulation::CAircraftModelList getAsModels()
Get as models.
void gracefulShutdown()
Graceful shutdown.
int getModelsCount() const
Get model count.
CVPilotRulesReader(bool standardDirectory=true, QObject *parent=nullptr)
Constructor.
void addFilename(const QString &fileName)
File names.
swift::misc::simulation::CAircraftModelList getAsModelsFromCache() const
Get as models from cache.
int countRulesLoaded() const
Loaded rules.
static const QString & standardMappingsDirectory()
The standard directory for vPilot mappings.
int countFilesLoaded() const
Loaded files (number)
bool hasFiles() const
Has files.
QStringList getFiles() const
Files.
void addDirectory(const QString &directory)
Directory with .vmr files.
void readFinished(bool success)
Rules read.
bool read(bool convertToModels)
Load data.
swift::misc::CWorker * readInBackground(bool convertToModels)
Load data in background thread.
~CVPilotRulesReader()
Destructor.
CVPilotModelRuleSet getRules() const
Loaded rules.
Free functions in swift::misc.
SWIFT_MISC_EXPORT QDateTime fromStringUtc(const QString &dateTimeString, const QString &format)
Same as QDateTime::fromString but QDateTime will be set to UTC.
bool isEmpty() const const
qint64 toMSecsSinceEpoch() const const
QFileInfoList entryInfoList(QDir::Filters filters, QDir::SortFlags sort) const const
bool exists() const const
QDomNodeList elementsByTagName(const QString &tagname) const const
QDomDocument::ParseResult setContent(QAnyStringView text, QDomDocument::ParseOptions options)
QDomNode namedItem(const QString &name) const const
QDomNamedNodeMap attributes() const const
QString nodeValue() const const
QDomNode at(int index) const const
bool isEmpty() const const
QString fileName() const const
void append(QList< T > &&value)
const T & constFirst() const const
bool isEmpty() const const
QStringList standardLocations(QStandardPaths::StandardLocation type)
QString & append(QChar ch)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool endsWith(QChar c, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs)
QStringList split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
QString trimmed() const const
bool contains(QLatin1StringView str, Qt::CaseSensitivity cs) const const