check name conflicts when loading nodes

This commit is contained in:
Le Tan 2022-08-28 21:58:57 +08:00
parent 73ebcaeb90
commit 08fe335a80

View File

@ -4,6 +4,7 @@
#include <QJsonArray> #include <QJsonArray>
#include <QJsonDocument> #include <QJsonDocument>
#include <QDebug> #include <QDebug>
#include <QSet>
#include <notebookbackend/inotebookbackend.h> #include <notebookbackend/inotebookbackend.h>
#include <notebook/notebookparameters.h> #include <notebook/notebookparameters.h>
@ -170,6 +171,8 @@ QSharedPointer<Node> VXNotebookConfigMgr::nodeConfigToNode(const NodeConfig &p_c
void VXNotebookConfigMgr::loadFolderNode(Node *p_node, const NodeConfig &p_config) void VXNotebookConfigMgr::loadFolderNode(Node *p_node, const NodeConfig &p_config)
{ {
QSet<QString> seenNames;
QVector<QSharedPointer<Node>> children; QVector<QSharedPointer<Node>> children;
children.reserve(p_config.m_files.size() + p_config.m_folders.size()); children.reserve(p_config.m_files.size() + p_config.m_folders.size());
const auto basePath = p_node->fetchPath(); const auto basePath = p_node->fetchPath();
@ -183,6 +186,12 @@ void VXNotebookConfigMgr::loadFolderNode(Node *p_node, const NodeConfig &p_confi
continue; continue;
} }
if (seenNames.contains(folder.m_name)) {
qWarning() << "skipped loading node with duplicated name under" << p_node->fetchPath();
continue;
}
seenNames.insert(folder.m_name);
auto folderNode = QSharedPointer<VXNode>::create(folder.m_name, auto folderNode = QSharedPointer<VXNode>::create(folder.m_name,
getNotebook(), getNotebook(),
p_node); p_node);
@ -198,6 +207,12 @@ void VXNotebookConfigMgr::loadFolderNode(Node *p_node, const NodeConfig &p_confi
continue; continue;
} }
if (seenNames.contains(file.m_name)) {
qWarning() << "skipped loading node with duplicated name under" << p_node->fetchPath();
continue;
}
seenNames.insert(file.m_name);
// For compability only. // For compability only.
needUpdateConfig = needUpdateConfig || file.m_signature == Node::InvalidId; needUpdateConfig = needUpdateConfig || file.m_signature == Node::InvalidId;