[plasma-mobile/raven] src/raven/modelviews: Fixed a crash when adding a folder from webmail
Devin Lin <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 3c141a2bbf6c9edc47742ce35359d4a94c06441f by Devin Lin, on behalf of Alexander Malygin.
Committed on 20/07/2026 at 17:56.
Pushed by devinlin into branch 'master'.
Fixed a crash when adding a folder from webmail
M +50 -16 src/raven/modelviews/mailboxmodel.cpp
M +1 -0 src/raven/modelviews/mailboxmodel.h
https://invent.kde.org/plasma-mobile/raven/-/commit/3c141a2bbf6c9edc47742ce35359d4a94c06441f
diff --git a/src/raven/modelviews/mailboxmodel.cpp b/src/raven/modelviews/mailboxmodel.cpp
index 458fdc7..0539731 100644
--- a/src/raven/modelviews/mailboxmodel.cpp
+++ b/src/raven/modelviews/mailboxmodel.cpp
@@ -2,10 +2,11 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "mailboxmodel.h"
-#include "constants.h"
#include "accountmodel.h"
-#include "utils.h"
+#include "constants.h"
#include "dbmanager.h"
+#include "maillistmodel.h"
+#include "utils.h"
#include <QDebug>
#include <QSqlError>
@@ -138,6 +139,7 @@ QList<MailBoxEntry> MailBoxModel::initMailBoxes(const QList<Folder *> &folders)
// third step: flatten tree into list
QList<MailBoxEntry> list;
+
flattenMailBoxTree(root, list);
return list;
@@ -148,6 +150,15 @@ void MailBoxModel::load()
beginResetModel();
qDebug() << "MailBoxModel::load() - reloading";
+ QString currentRole;
+
+ if (MailListModel::self()) {
+ auto folder = MailListModel::self()->currentFolder();
+ if(folder) {
+ currentRole = folder->role();
+ }
+ }
+
for (auto mailbox : m_mailBoxes) {
if (mailbox.folder) {
mailbox.folder->deleteLater();
@@ -164,9 +175,27 @@ void MailBoxModel::load()
QList<Folder *> folders = Folder::fetchAll(m_db, this);
m_mailBoxes = initMailBoxes(folders);
+
+ if(!currentRole.isEmpty()) {
+ Folder *currentFolder = findFolderByRole(currentRole);
+ if (currentFolder) {
+ MailListModel::self()->loadFolder(currentFolder);
+ }
+ }
+
endResetModel();
}
+Folder *MailBoxModel::findFolderByRole(QString role) const
+{
+ for (const auto &entry : m_mailBoxes) {
+ if (entry.folder && entry.folder->role() == role) {
+ return entry.folder;
+ }
+ }
+ return nullptr;
+}
+
Folder *MailBoxModel::findInboxFolder() const
{
for (const auto &entry : m_mailBoxes) {
@@ -192,7 +221,7 @@ void MailBoxModel::toggleCollapse(int rowIndex)
}
Q_EMIT dataChanged(index(rowIndex), index(rowIndex), {IsCollapsedRole});
- Q_EMIT dataChanged(index(rowIndex), index(i-1), {VisibleRole});
+ Q_EMIT dataChanged(index(rowIndex), index(i - 1), {VisibleRole});
}
int MailBoxModel::rowCount(const QModelIndex &parent) const
@@ -209,18 +238,18 @@ QVariant MailBoxModel::data(const QModelIndex &index, int role) const
}
switch (role) {
- case FolderRole:
- return QVariant::fromValue(m_mailBoxes[index.row()].folder);
- case NameRole:
- return m_mailBoxes[index.row()].name;
- case LevelRole:
- return m_mailBoxes[index.row()].level;
- case IsCollapsibleRole:
- return m_mailBoxes[index.row()].isCollapsible;
- case IsCollapsedRole:
- return m_mailBoxes[index.row()].isCollapsed;
- case VisibleRole:
- return m_mailBoxes[index.row()].visible;
+ case FolderRole:
+ return QVariant::fromValue(m_mailBoxes[index.row()].folder);
+ case NameRole:
+ return m_mailBoxes[index.row()].name;
+ case LevelRole:
+ return m_mailBoxes[index.row()].level;
+ case IsCollapsibleRole:
+ return m_mailBoxes[index.row()].isCollapsible;
+ case IsCollapsedRole:
+ return m_mailBoxes[index.row()].isCollapsed;
+ case VisibleRole:
+ return m_mailBoxes[index.row()].visible;
}
return {};
}
@@ -233,5 +262,10 @@ Qt::ItemFlags MailBoxModel::flags(const QModelIndex &index) const
QHash<int, QByteArray> MailBoxModel::roleNames() const
{
- return {{NameRole, "name"}, {FolderRole, "folder"}, {LevelRole, "level"}, {IsCollapsibleRole, "isCollapsible"}, {IsCollapsedRole, "isCollapsed"}, {VisibleRole, "visible"}};
+ return {{NameRole, "name"},
+ {FolderRole, "folder"},
+ {LevelRole, "level"},
+ {IsCollapsibleRole, "isCollapsible"},
+ {IsCollapsedRole, "isCollapsed"},
+ {VisibleRole, "visible"}};
}
diff --git a/src/raven/modelviews/mailboxmodel.h b/src/raven/modelviews/mailboxmodel.h
index 08e8359..306f037 100644
--- a/src/raven/modelviews/mailboxmodel.h
+++ b/src/raven/modelviews/mailboxmodel.h
@@ -56,6 +56,7 @@ public:
/// Returns the first inbox folder, or nullptr if none exists.
Folder *findInboxFolder() const;
+ Folder *findFolderByRole(QString role) const;
Q_INVOKABLE void toggleCollapse(int rowIndex);