diff --git a/src/base/rss/rss_session.cpp b/src/base/rss/rss_session.cpp index 9fd2ada0f..ade1361b4 100644 --- a/src/base/rss/rss_session.cpp +++ b/src/base/rss/rss_session.cpp @@ -214,14 +214,20 @@ nonstd::expected Session::moveItem(Item *item, const QString &des Q_ASSERT(item); Q_ASSERT(item != rootFolder()); + if (item->path() == destPath) + return {}; + + if (auto *folder = static_cast(item)) // if `item` is a `Folder` + { + if (destPath.startsWith(folder->path() + Item::PathSeparator)) + return nonstd::make_unexpected(tr("Couldn't move folder into itself or its subfolder.")); + } + const nonstd::expected result = prepareItemDest(destPath); if (!result) return result.get_unexpected(); 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) {