From 8c7916eb0c5720eaed57ef43d99e9a8f4f861d44 Mon Sep 17 00:00:00 2001 From: luisangelsm Date: Sun, 14 Dec 2025 10:17:32 +0100 Subject: [PATCH] Fix accessing the root folder for setting the library type --- YACReaderLibrary/db/folder_model.cpp | 59 ++++++++++++++++++++-------- YACReaderLibrary/db/folder_model.h | 3 ++ YACReaderLibrary/library_window.cpp | 3 +- 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/YACReaderLibrary/db/folder_model.cpp b/YACReaderLibrary/db/folder_model.cpp index ae24d0f9..74bb75c4 100644 --- a/YACReaderLibrary/db/folder_model.cpp +++ b/YACReaderLibrary/db/folder_model.cpp @@ -315,6 +315,35 @@ void FolderModel::takeUpdatedChildrenInfo(FolderItem *parent, const QModelIndex } } +Folder FolderModel::folderFromItem(FolderItem *folderItem) +{ + auto name = folderItem->data(FolderModel::Name).toString(); + auto parentItem = folderItem->parent(); + + QString path; + if (parentItem == nullptr) { + parentItem = rootItem; + path = "/"; + } else { + path = parentItem->data(Columns::Path).toString() + "/" + name; + } + + auto folder = Folder(folderItem->id, + parentItem->id, + name, + path, + folderItem->data(Columns::Completed).toBool(), + folderItem->data(Columns::Finished).toBool(), + folderItem->data(Columns::NumChildren).toInt(), + folderItem->data(Columns::FirstChildHash).toString(), + folderItem->data(Columns::CustomImage).toString(), + folderItem->data(Columns::Type).value(), + folderItem->data(Columns::Added).toLongLong(), + folderItem->data(Columns::Updated).toLongLong()); + + return folder; +} + void FolderModel::reload(const QModelIndex &index) { // TODO: reload just the content under index for better efficiency @@ -790,25 +819,23 @@ FolderModel *FolderModel::getSubfoldersModel(const QModelIndex &mi) return model; } +Folder FolderModel::getRootFolder() +{ + if (this->rootItem == nullptr) { + return Folder(); + } + + return folderFromItem(this->rootItem); +} + Folder FolderModel::getFolder(const QModelIndex &mi) { - auto folderItem = static_cast(mi.internalPointer()); - auto name = folderItem->data(FolderModel::Name).toString(); - auto parentItem = folderItem->parent(); - auto folder = Folder(folderItem->id, - parentItem->id, - name, - folderItem->parent()->data(Columns::Path).toString() + "/" + name, - folderItem->data(Columns::Completed).toBool(), - folderItem->data(Columns::Finished).toBool(), - folderItem->data(Columns::NumChildren).toInt(), - folderItem->data(Columns::FirstChildHash).toString(), - folderItem->data(Columns::CustomImage).toString(), - folderItem->data(Columns::Type).value(), - folderItem->data(Columns::Added).toLongLong(), - folderItem->data(Columns::Updated).toLongLong()); + if (!mi.isValid()) { + return Folder(); + } - return folder; + auto folderItem = static_cast(mi.internalPointer()); + return folderFromItem(folderItem); } QModelIndex FolderModel::getIndexFromFolderId(qulonglong folderId, const QModelIndex &parent) diff --git a/YACReaderLibrary/db/folder_model.h b/YACReaderLibrary/db/folder_model.h index 2de737f1..85ccfa23 100644 --- a/YACReaderLibrary/db/folder_model.h +++ b/YACReaderLibrary/db/folder_model.h @@ -76,6 +76,7 @@ public: QStringList getSubfoldersNames(const QModelIndex &mi); FolderModel *getSubfoldersModel(const QModelIndex &mi); // it creates a model that contains just the direct subfolders + Folder getRootFolder(); Folder getFolder(const QModelIndex &mi); QModelIndex getIndexFromFolderId(qulonglong folderId, const QModelIndex &parent = QModelIndex()); QModelIndex getIndexFromFolder(const Folder &folder, const QModelIndex &parent = QModelIndex()); @@ -133,6 +134,8 @@ private: // parent contains the current data in the model (parentModelIndex is its index), updated contains fresh info loaded from the DB, void takeUpdatedChildrenInfo(FolderItem *parent, const QModelIndex &parentModelIndex, FolderItem *updated); + Folder folderFromItem(FolderItem *item); + FolderItem *rootItem; // items tree QMap items; // items lookup diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 52cfdf9a..78ac4f3a 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -608,8 +608,7 @@ void LibraryWindow::createMenus() auto typeMenu = new QMenu(tr("Set type"), selectedLibrary); connect(typeMenu, &QMenu::aboutToShow, this, [=]() { - auto rootIndex = foldersModel->index(0, 0); - auto folder = foldersModel->getFolder(rootIndex); + auto folder = foldersModel->getRootFolder(); setupActions(folder.type); });