Use listDirs() instead of list() for section loading

list() returns files AND directories. Section entries are directories only.
Files like 'title', 'keyword', 'body' were being incorrectly treated as
child sections. Using listDirs() filters to directories only.
This commit is contained in:
Levi Neely 2026-10-01 09:40:03 +02:00
parent 350ce66860
commit 7f948de2ab
1 changed files with 7 additions and 8 deletions

View File

@ -4,7 +4,6 @@
#include <QDebug> #include <QDebug>
static const QStringList DONE_KEYWORDS = {"DONE", "CANCELLED", "CANCELED"}; static const QStringList DONE_KEYWORDS = {"DONE", "CANCELLED", "CANCELED"};
static const QStringList SKIP_ENTRIES = {"raw", "body", "meta", "new"};
DocumentModel::DocumentModel(QObject *parent) DocumentModel::DocumentModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
@ -158,12 +157,13 @@ void DocumentModel::loadDocument()
void DocumentModel::loadSections(const QString &parentPath, const QString &parentId, int level) void DocumentModel::loadSections(const QString &parentPath, const QString &parentId, int level)
{ {
QStringList entries = m_client->list(parentPath); // Use listDirs to only get directories (actual sections), not files
QStringList entries = m_client->listDirs(parentPath);
QStringList sectionIds; QStringList sectionIds;
for (const QString &entry : entries) { for (const QString &entry : entries) {
// Skip non-section entries (raw, body, meta, new, etc.) // Skip special directories
if (SKIP_ENTRIES.contains(entry)) if (entry == "new")
continue; continue;
Section sec; Section sec;
@ -179,13 +179,12 @@ void DocumentModel::loadSections(const QString &parentPath, const QString &paren
loadSections(sec.path, entry, level + 1); loadSections(sec.path, entry, level + 1);
} }
// Now that all children are loaded, populate childIds for each section at this level // Populate childIds for each section at this level
for (const QString &id : sectionIds) { for (const QString &id : sectionIds) {
Section &sec = m_sections[id]; Section &sec = m_sections[id];
QStringList childEntries = m_client->list(sec.path); QStringList childEntries = m_client->listDirs(sec.path);
for (const QString &childEntry : childEntries) { for (const QString &childEntry : childEntries) {
// Only include entries that were actually added as sections if (childEntry != "new" && m_sections.contains(childEntry) && m_sections[childEntry].parentId == id) {
if (m_sections.contains(childEntry) && m_sections[childEntry].parentId == id) {
sec.childIds.append(childEntry); sec.childIds.append(childEntry);
} }
} }