Removed "ok" flag from "performParsing" as this can be concluded from messages

This commit is contained in:
Klaus Basan
2018-09-18 02:34:06 +02:00
parent 6c0f66f756
commit 5f5113ed47
2 changed files with 19 additions and 29 deletions

View File

@@ -44,7 +44,7 @@ namespace BlackMisc
namespace FsCommon namespace FsCommon
{ {
// response for async. loading // response for async. loading
using LoaderResponse = std::tuple<CAircraftCfgEntriesList, CAircraftModelList, BlackMisc::CStatusMessageList, bool>; using LoaderResponse = std::tuple<CAircraftCfgEntriesList, CAircraftModelList, CStatusMessageList>;
CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo, QObject *parent) : IAircraftModelLoader(simInfo, parent) CAircraftCfgParser::CAircraftCfgParser(const CSimulatorInfo &simInfo, QObject *parent) : IAircraftModelLoader(simInfo, parent)
{ } { }
@@ -73,25 +73,23 @@ namespace BlackMisc
{ {
if (m_parserWorker && !m_parserWorker->isFinished()) { return; } if (m_parserWorker && !m_parserWorker->isFinished()) { return; }
emit this->diskLoadingStarted(simulator, mode); emit this->diskLoadingStarted(simulator, mode);
m_parserWorker = CWorker::fromTask(this, "CAircraftCfgParser::changeDirectory", m_parserWorker = CWorker::fromTask(this, "CAircraftCfgParser::startLoadingFromDisk",
[this, modelDirs, excludedDirectoryPatterns, simulator, modelConsolidation]() [this, modelDirs, excludedDirectoryPatterns, simulator, modelConsolidation]()
{ {
bool ok = false;
CStatusMessageList msgs; CStatusMessageList msgs;
const auto aircraftCfgEntriesList = this->performParsing(modelDirs, excludedDirectoryPatterns, msgs, &ok); const CAircraftCfgEntriesList aircraftCfgEntriesList = this->performParsing(modelDirs, excludedDirectoryPatterns, msgs);
CAircraftModelList models; CAircraftModelList models;
if (ok) if (msgs.isSuccess())
{ {
models = aircraftCfgEntriesList.toAircraftModelList(simulator, true, msgs); models = aircraftCfgEntriesList.toAircraftModelList(simulator, true, msgs);
if (modelConsolidation) { modelConsolidation(models, true); } if (modelConsolidation) { modelConsolidation(models, true); }
} }
return std::make_tuple(aircraftCfgEntriesList, models, msgs, ok); return std::make_tuple(aircraftCfgEntriesList, models, msgs);
}); });
m_parserWorker->thenWithResult<LoaderResponse>(this, [this, simulator](const LoaderResponse & tuple) m_parserWorker->thenWithResult<LoaderResponse>(this, [this, simulator](const LoaderResponse & tuple)
{ {
const bool ok = std::get<3>(tuple);
m_loadingMessages = std::get<2>(tuple); m_loadingMessages = std::get<2>(tuple);
if (ok) if (m_loadingMessages.isSuccess())
{ {
m_parsedCfgEntriesList = std::get<0>(tuple); m_parsedCfgEntriesList = std::get<0>(tuple);
const CAircraftModelList models(std::get<1>(tuple)); const CAircraftModelList models(std::get<1>(tuple));
@@ -113,9 +111,8 @@ namespace BlackMisc
{ {
emit this->diskLoadingStarted(simulator, mode); emit this->diskLoadingStarted(simulator, mode);
bool ok;
CStatusMessageList msgs; CStatusMessageList msgs;
m_parsedCfgEntriesList = performParsing(modelDirs, excludedDirectoryPatterns, msgs, &ok); m_parsedCfgEntriesList = performParsing(modelDirs, excludedDirectoryPatterns, msgs);
const CAircraftModelList models(m_parsedCfgEntriesList.toAircraftModelList(simulator, true, msgs)); const CAircraftModelList models(m_parsedCfgEntriesList.toAircraftModelList(simulator, true, msgs));
m_loadingMessages = msgs; m_loadingMessages = msgs;
const bool hasData = !models.isEmpty(); const bool hasData = !models.isEmpty();
@@ -133,34 +130,28 @@ namespace BlackMisc
return !m_parserWorker || m_parserWorker->isFinished(); return !m_parserWorker || m_parserWorker->isFinished();
} }
CAircraftCfgEntriesList CAircraftCfgParser::performParsing(const QStringList &directories, const QStringList &excludeDirectories, CStatusMessageList &messages, bool *ok) CAircraftCfgEntriesList CAircraftCfgParser::performParsing(const QStringList &directories, const QStringList &excludeDirectories, CStatusMessageList &messages)
{ {
CAircraftCfgEntriesList entries; CAircraftCfgEntriesList entries;
bool dirOk = false;
bool success = true;
for (const QString &dir : directories) for (const QString &dir : directories)
{ {
entries.push_back(performParsing(dir, excludeDirectories, messages, &dirOk)); entries.push_back(performParsing(dir, excludeDirectories, messages));
success &= dirOk;
} }
*ok = success;
return entries; return entries;
} }
CAircraftCfgEntriesList CAircraftCfgParser::performParsing(const QString &directory, const QStringList &excludeDirectories, CStatusMessageList &messages, bool *ok) CAircraftCfgEntriesList CAircraftCfgParser::performParsing(const QString &directory, const QStringList &excludeDirectories, CStatusMessageList &messages)
{ {
// //
// function has to be threadsafe // function has to be threadsafe
// //
*ok = false;
if (m_cancelLoading) { return CAircraftCfgEntriesList(); } if (m_cancelLoading) { return CAircraftCfgEntriesList(); }
// excluded? // excluded?
if (CFileUtils::isExcludedDirectory(directory, excludeDirectories)) if (CFileUtils::isExcludedDirectory(directory, excludeDirectories))
{ {
CLogMessage(this).debug() << "Skipping directory " << directory; CLogMessage(this).debug() << "Skipping directory " << directory;
*ok = true;
return CAircraftCfgEntriesList(); return CAircraftCfgEntriesList();
} }
@@ -169,7 +160,6 @@ namespace BlackMisc
dir.setNameFilters(fileNameFilters()); dir.setNameFilters(fileNameFilters());
if (!dir.exists()) if (!dir.exists())
{ {
*ok = true;
return CAircraftCfgEntriesList(); // can happen if there are shortcuts or linked dirs not available return CAircraftCfgEntriesList(); // can happen if there are shortcuts or linked dirs not available
} }
@@ -187,15 +177,15 @@ namespace BlackMisc
if (currentDir.startsWith(nextDir, Qt::CaseInsensitive)) { continue; } // do not go up if (currentDir.startsWith(nextDir, Qt::CaseInsensitive)) { continue; } // do not go up
if (dir == currentDir) { continue; } // do not recursively call same directory if (dir == currentDir) { continue; } // do not recursively call same directory
bool dirOk; const CAircraftCfgEntriesList subList(performParsing(nextDir, excludeDirectories, messages));
const CAircraftCfgEntriesList subList(performParsing(nextDir, excludeDirectories, messages, &dirOk)); if (messages.isSuccess())
if (dirOk)
{ {
result.push_back(subList); result.push_back(subList);
} }
else else
{ {
CLogMessage(this).warning("Parsing failed for %1") << nextDir; const CStatusMessage m = CStatusMessage(this).warning("Parsing failed for '%1'") << nextDir;
messages.push_back(m);
} }
} }
else else
@@ -207,10 +197,11 @@ namespace BlackMisc
const QString fileName = fileInfo.absoluteFilePath(); const QString fileName = fileInfo.absoluteFilePath();
bool fileOk = false; bool fileOk = false;
CStatusMessageList fileMsgs; CStatusMessageList fileMsgs;
CAircraftCfgEntriesList fileResults = performParsingOfSingleFile(fileName, fileOk, fileMsgs); CAircraftCfgEntriesList fileResults = CAircraftCfgParser::performParsingOfSingleFile(fileName, fileOk, fileMsgs);
if (!fileOk) if (!fileOk)
{ {
CLogMessage::preformatted(fileMsgs); const CStatusMessage m = CStatusMessage(this).warning("Parsing of '%1' failed") << fileName;
messages.push_back(fileMsgs);
continue; continue;
} }
@@ -221,7 +212,6 @@ namespace BlackMisc
// all files finished, // all files finished,
// normally reached when no aircraft.cfg is found // normally reached when no aircraft.cfg is found
*ok = true;
return result; return result;
} }

View File

@@ -79,13 +79,13 @@ namespace BlackMisc
//! \threadsafe //! \threadsafe
CAircraftCfgEntriesList performParsing( CAircraftCfgEntriesList performParsing(
const QStringList &directories, const QStringList &excludeDirectories, const QStringList &directories, const QStringList &excludeDirectories,
BlackMisc::CStatusMessageList &messages, bool *ok); BlackMisc::CStatusMessageList &messages);
//! Perform the parsing for one directory //! Perform the parsing for one directory
//! \threadsafe //! \threadsafe
CAircraftCfgEntriesList performParsing( CAircraftCfgEntriesList performParsing(
const QString &directory, const QStringList &excludeDirectories, const QString &directory, const QStringList &excludeDirectories,
BlackMisc::CStatusMessageList &messages, bool *ok); BlackMisc::CStatusMessageList &messages);
//! Fix the content read //! Fix the content read
static QString fixedStringContent(const QVariant &qv); static QString fixedStringContent(const QVariant &qv);