Fix .torrent file could not be deleted when torrent is canceled

PR #21735.
Closes #21723.
This commit is contained in:
Vladimir Golovnev 2024-11-02 16:41:05 +03:00 committed by GitHub
parent 08b51fc869
commit 0f18e80154
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 19 additions and 11 deletions

View file

@ -195,11 +195,9 @@ void AddTorrentManager::setTorrentFileGuard(const QString &source, std::shared_p
m_guardedTorrentFiles.emplace(source, std::move(torrentFileGuard));
}
void AddTorrentManager::releaseTorrentFileGuard(const QString &source)
std::shared_ptr<TorrentFileGuard> AddTorrentManager::releaseTorrentFileGuard(const QString &source)
{
auto torrentFileGuard = m_guardedTorrentFiles.take(source);
if (torrentFileGuard)
torrentFileGuard->setAutoRemove(false);
return m_guardedTorrentFiles.take(source);
}
bool AddTorrentManager::processTorrent(const QString &source, const BitTorrent::TorrentDescriptor &torrentDescr

View file

@ -74,7 +74,7 @@ protected:
void handleAddTorrentFailed(const QString &source, const QString &reason);
void handleDuplicateTorrent(const QString &source, const BitTorrent::TorrentDescriptor &torrentDescr, BitTorrent::Torrent *existingTorrent);
void setTorrentFileGuard(const QString &source, std::shared_ptr<TorrentFileGuard> torrentFileGuard);
void releaseTorrentFileGuard(const QString &source);
std::shared_ptr<TorrentFileGuard> releaseTorrentFileGuard(const QString &source);
private:
void onDownloadFinished(const Net::DownloadResult &result);

View file

@ -821,6 +821,8 @@ void AddNewTorrentDialog::reject()
if (!m_currentContext) [[unlikely]]
return;
emit torrentRejected(m_currentContext->torrentDescr);
const BitTorrent::TorrentDescriptor &torrentDescr = m_currentContext->torrentDescr;
const bool hasMetadata = torrentDescr.info().has_value();
if (!hasMetadata)

View file

@ -66,6 +66,7 @@ public:
signals:
void torrentAccepted(const BitTorrent::TorrentDescriptor &torrentDescriptor, const BitTorrent::AddTorrentParams &addTorrentParams);
void torrentRejected(const BitTorrent::TorrentDescriptor &torrentDescriptor);
private slots:
void updateDiskSpaceLabel();

View file

@ -235,15 +235,22 @@ bool GUIAddTorrentManager::processTorrent(const QString &source
dlg->setAttribute(Qt::WA_DeleteOnClose);
m_dialogs[infoHash] = dlg;
connect(dlg, &AddNewTorrentDialog::torrentAccepted, this
, [this, source](const BitTorrent::TorrentDescriptor &torrentDescr, const BitTorrent::AddTorrentParams &addTorrentParams)
{
addTorrentToSession(source, torrentDescr, addTorrentParams);
});
connect(dlg, &QDialog::finished, this, [this, source, infoHash, dlg]
, [this, source, dlg](const BitTorrent::TorrentDescriptor &torrentDescr, const BitTorrent::AddTorrentParams &addTorrentParams)
{
if (dlg->isDoNotDeleteTorrentChecked())
releaseTorrentFileGuard(source);
{
if (auto torrentFileGuard = releaseTorrentFileGuard(source))
torrentFileGuard->setAutoRemove(false);
}
addTorrentToSession(source, torrentDescr, addTorrentParams);
});
connect(dlg, &AddNewTorrentDialog::torrentRejected, this, [this, source]
{
releaseTorrentFileGuard(source);
});
connect(dlg, &QDialog::finished, this, [this, source, infoHash]
{
m_dialogs.remove(infoHash);
});