Nim: Simplify project update

Change-Id: I4d4425abc0f143d7d2efd68e743ada893809a278
Reviewed-by: Filippo Cucchetto <filippocucchetto@gmail.com>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2018-12-18 14:47:34 +01:00
committed by Filippo Cucchetto
parent 108f83f336
commit a752aa3b31

View File

@@ -66,10 +66,9 @@ NimProject::NimProject(const FileName &fileName) : Project(Constants::C_NIM_MIME
m_projectScanTimer.setSingleShot(true); m_projectScanTimer.setSingleShot(true);
connect(&m_projectScanTimer, &QTimer::timeout, this, &NimProject::collectProjectFiles); connect(&m_projectScanTimer, &QTimer::timeout, this, &NimProject::collectProjectFiles);
connect(this, &Project::settingsLoaded, this, &NimProject::collectProjectFiles);
connect(&m_futureWatcher, &QFutureWatcher<QList<FileNode *>>::finished, this, &NimProject::updateProject); connect(&m_futureWatcher, &QFutureWatcher<QList<FileNode *>>::finished, this, &NimProject::updateProject);
collectProjectFiles();
} }
void NimProject::scheduleProjectScan() void NimProject::scheduleProjectScan()
@@ -113,8 +112,13 @@ void NimProject::collectProjectFiles()
m_lastProjectScan.start(); m_lastProjectScan.start();
QTC_ASSERT(!m_futureWatcher.future().isRunning(), return); QTC_ASSERT(!m_futureWatcher.future().isRunning(), return);
FileName prjDir = projectDirectory(); FileName prjDir = projectDirectory();
QFuture<QList<ProjectExplorer::FileNode *>> future = Utils::runAsync([prjDir] { QFuture<QList<ProjectExplorer::FileNode *>> future = Utils::runAsync([prjDir, excluded = m_excludedFiles] {
return FileNode::scanForFiles(prjDir, [](const FileName &fn) { return FileNode::scanForFiles(prjDir, [excluded](const FileName &fn) -> FileNode * {
const QString fileName = fn.fileName();
if (excluded.contains(fn.toString())
|| fileName.endsWith(".nimproject", HostOsInfo::fileNameCaseSensitivity())
|| fileName.contains(".nimproject.user", HostOsInfo::fileNameCaseSensitivity()))
return nullptr;
return new FileNode(fn, FileType::Source, false); return new FileNode(fn, FileType::Source, false);
}); });
}); });
@@ -126,31 +130,13 @@ void NimProject::updateProject()
{ {
emitParsingStarted(); emitParsingStarted();
auto fileNodes = Utils::transform<std::vector>(m_futureWatcher.future().result(), [](FileNode *node) { auto newRoot = std::make_unique<NimProjectNode>(*this, projectDirectory());
return std::unique_ptr<FileNode>(node);
});
Utils::erase(fileNodes, [this](const std::unique_ptr<FileNode> &fn) { for (FileNode *node : m_futureWatcher.future().result())
const FileName &path = fn->filePath(); newRoot->addNestedNode(std::unique_ptr<FileNode>(node));
const QString fileName = path.fileName();
return m_excludedFiles.contains(path.toString())
|| fileName.endsWith(".nimproject", HostOsInfo::fileNameCaseSensitivity())
|| fileName.contains(".nimproject.user", HostOsInfo::fileNameCaseSensitivity());
});
QStringList files = Utils::transform<QList>(fileNodes, [](const std::unique_ptr<FileNode> &fn) { newRoot->setDisplayName(displayName());
return fn->filePath().toString(); setRootProjectNode(std::move(newRoot));
});
Utils::sort(files);
if (files != m_files) {
m_files = std::move(files);
auto newRoot = std::make_unique<NimProjectNode>(*this, projectDirectory());
newRoot->setDisplayName(displayName());
newRoot->addNestedNodes(std::move(fileNodes));
setRootProjectNode(std::move(newRoot));
}
emitParsingFinished(true); emitParsingFinished(true);
} }