From 8df68ac878c0d2816d5a396e7808184c841c77ed Mon Sep 17 00:00:00 2001 From: Vladimir Golovnev Date: Mon, 27 Feb 2023 09:08:18 +0300 Subject: [PATCH] Prevent RSS folder from being moved into itself PR #18619. Closes #18446. --- src/base/rss/rss_session.cpp | 5 ++++- src/gui/rss/feedlistwidget.cpp | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/base/rss/rss_session.cpp b/src/base/rss/rss_session.cpp index bbc4d413d..1d1ed81b1 100644 --- a/src/base/rss/rss_session.cpp +++ b/src/base/rss/rss_session.cpp @@ -185,8 +185,11 @@ nonstd::expected Session::moveItem(Item *item, const QString &des if (!result) return result.get_unexpected(); - auto srcFolder = static_cast(m_itemsByPath.value(Item::parentPath(item->path()))); const auto destFolder = result.value(); + if (static_cast(destFolder) == item) + return nonstd::make_unexpected(tr("Couldn't move folder into itself.")); + + auto srcFolder = static_cast(m_itemsByPath.value(Item::parentPath(item->path()))); if (srcFolder != destFolder) { srcFolder->removeItem(item); diff --git a/src/gui/rss/feedlistwidget.cpp b/src/gui/rss/feedlistwidget.cpp index 8657dcca8..428fd9546 100644 --- a/src/gui/rss/feedlistwidget.cpp +++ b/src/gui/rss/feedlistwidget.cpp @@ -105,7 +105,8 @@ FeedListWidget::FeedListWidget(QWidget *parent) m_rssToTreeItemMapping[RSS::Session::instance()->rootFolder()] = invisibleRootItem(); m_unreadStickyItem = new FeedListItem(this); - m_unreadStickyItem->setData(0, Qt::UserRole, QVariant::fromValue(RSS::Session::instance()->rootFolder())); + m_unreadStickyItem->setData(0, Qt::UserRole, QVariant::fromValue( + reinterpret_cast(RSS::Session::instance()->rootFolder()))); m_unreadStickyItem->setText(0, tr("Unread (%1)").arg(RSS::Session::instance()->rootFolder()->unreadCount())); m_unreadStickyItem->setData(0, Qt::DecorationRole, UIThemeManager::instance()->getIcon(u"mail-inbox"_qs)); m_unreadStickyItem->setData(0, StickyItemTagRole, true); @@ -211,9 +212,10 @@ QList FeedListWidget::getAllOpenedFolders(QTreeWidgetItem *pa RSS::Item *FeedListWidget::getRSSItem(QTreeWidgetItem *item) const { - if (!item) return nullptr; + if (!item) + return nullptr; - return item->data(0, Qt::UserRole).value(); + return reinterpret_cast(item->data(0, Qt::UserRole).value()); } QTreeWidgetItem *FeedListWidget::mapRSSItem(RSS::Item *rssItem) const @@ -275,7 +277,7 @@ QTreeWidgetItem *FeedListWidget::createItem(RSS::Item *rssItem, QTreeWidgetItem { auto *item = new FeedListItem; item->setData(0, Qt::DisplayRole, u"%1 (%2)"_qs.arg(rssItem->name(), QString::number(rssItem->unreadCount()))); - item->setData(0, Qt::UserRole, QVariant::fromValue(rssItem)); + item->setData(0, Qt::UserRole, QVariant::fromValue(reinterpret_cast(rssItem))); m_rssToTreeItemMapping[rssItem] = item; QIcon icon;