forked from qt-creator/qt-creator
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user