[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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.