Fix the torrent relocates files when switching to "manual" mode

PR #22564.
Closes #22283.
Closes #22546.
This commit is contained in:
Vladimir Golovnev 2025-04-16 10:23:34 +03:00 committed by Vladimir Golovnev (Glassez)
parent 009cc71f9b
commit c687a7d0d3
No known key found for this signature in database
GPG key ID: 52A2C7DEE2DFA6F7
2 changed files with 24 additions and 14 deletions

View file

@ -974,23 +974,25 @@ bool SessionImpl::editCategory(const QString &name, const CategoryOptions &optio
if (options == currentOptions) if (options == currentOptions)
return false; return false;
currentOptions = options;
storeCategories();
if (isDisableAutoTMMWhenCategorySavePathChanged()) if (isDisableAutoTMMWhenCategorySavePathChanged())
{ {
// This should be done before changing the category options
// to prevent the torrent from being moved at the new save path.
for (TorrentImpl *const torrent : asConst(m_torrents)) for (TorrentImpl *const torrent : asConst(m_torrents))
{ {
if (torrent->category() == name) if (torrent->category() == name)
torrent->setAutoTMMEnabled(false); torrent->setAutoTMMEnabled(false);
} }
} }
else
currentOptions = options;
storeCategories();
for (TorrentImpl *const torrent : asConst(m_torrents))
{ {
for (TorrentImpl *const torrent : asConst(m_torrents)) if (torrent->category() == name)
{ torrent->handleCategoryOptionsChanged();
if (torrent->category() == name)
torrent->handleCategoryOptionsChanged();
}
} }
emit categoryOptionsChanged(name); emit categoryOptionsChanged(name);
@ -3247,6 +3249,9 @@ void SessionImpl::setSavePath(const Path &path)
if (isDisableAutoTMMWhenDefaultSavePathChanged()) if (isDisableAutoTMMWhenDefaultSavePathChanged())
{ {
// This should be done before changing the save path
// to prevent the torrent from being moved at the new save path.
QSet<QString> affectedCatogories {{}}; // includes default (unnamed) category QSet<QString> affectedCatogories {{}}; // includes default (unnamed) category
for (auto it = m_categories.cbegin(); it != m_categories.cend(); ++it) for (auto it = m_categories.cbegin(); it != m_categories.cend(); ++it)
{ {
@ -3276,6 +3281,9 @@ void SessionImpl::setDownloadPath(const Path &path)
if (isDisableAutoTMMWhenDefaultSavePathChanged()) if (isDisableAutoTMMWhenDefaultSavePathChanged())
{ {
// This should be done before changing the save path
// to prevent the torrent from being moved at the new save path.
QSet<QString> affectedCatogories {{}}; // includes default (unnamed) category QSet<QString> affectedCatogories {{}}; // includes default (unnamed) category
for (auto it = m_categories.cbegin(); it != m_categories.cend(); ++it) for (auto it = m_categories.cbegin(); it != m_categories.cend(); ++it)
{ {

View file

@ -1615,18 +1615,20 @@ bool TorrentImpl::setCategory(const QString &category)
if (!category.isEmpty() && !m_session->categories().contains(category)) if (!category.isEmpty() && !m_session->categories().contains(category))
return false; return false;
if (m_session->isDisableAutoTMMWhenCategoryChanged())
{
// This should be done before changing the category name
// to prevent the torrent from being moved at the path of new category.
setAutoTMMEnabled(false);
}
const QString oldCategory = m_category; const QString oldCategory = m_category;
m_category = category; m_category = category;
deferredRequestResumeData(); deferredRequestResumeData();
m_session->handleTorrentCategoryChanged(this, oldCategory); m_session->handleTorrentCategoryChanged(this, oldCategory);
if (m_useAutoTMM) if (m_useAutoTMM)
{ adjustStorageLocation();
if (!m_session->isDisableAutoTMMWhenCategoryChanged())
adjustStorageLocation();
else
setAutoTMMEnabled(false);
}
} }
return true; return true;