Browse Source

Avoid redundant lookups

adaptive-webui-19844
Chocobo1 5 years ago
parent
commit
36056ad5af
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 48
      src/base/bittorrent/session.cpp

48
src/base/bittorrent/session.cpp

@ -1680,9 +1680,10 @@ bool Session::deleteTorrent(const InfoHash &hash, const DeleteOption deleteOptio
bool Session::cancelLoadMetadata(const InfoHash &hash) bool Session::cancelLoadMetadata(const InfoHash &hash)
{ {
if (!m_loadedMetadata.contains(hash)) return false; const auto loadedMetadataIter = m_loadedMetadata.find(hash);
if (loadedMetadataIter == m_loadedMetadata.end()) return false;
m_loadedMetadata.remove(hash); m_loadedMetadata.erase(loadedMetadataIter);
const lt::torrent_handle torrent = m_nativeSession->find_torrent(hash); const lt::torrent_handle torrent = m_nativeSession->find_torrent(hash);
if (!torrent.is_valid()) return false; if (!torrent.is_valid()) return false;
@ -4008,14 +4009,17 @@ void Session::handleTorrentRemovedAlert(const lt::torrent_removed_alert *p)
{ {
const InfoHash infoHash {p->info_hash}; const InfoHash infoHash {p->info_hash};
if (m_loadedMetadata.contains(infoHash)) const auto loadedMetadataIter = m_loadedMetadata.find(infoHash);
emit metadataLoaded(m_loadedMetadata.take(infoHash)); if (loadedMetadataIter != m_loadedMetadata.end()) {
emit metadataLoaded(*loadedMetadataIter);
m_loadedMetadata.erase(loadedMetadataIter);
}
if (m_removingTorrents.contains(infoHash)) { const auto removingTorrentDataIter = m_removingTorrents.find(infoHash);
const RemovingTorrentData tmpRemovingTorrentData = m_removingTorrents[infoHash]; if (removingTorrentDataIter != m_removingTorrents.end()) {
if (tmpRemovingTorrentData.deleteOption == Torrent) { if (removingTorrentDataIter->deleteOption == Torrent) {
LogMsg(tr("'%1' was removed from the transfer list.", "'xxx.avi' was removed...").arg(tmpRemovingTorrentData.name)); LogMsg(tr("'%1' was removed from the transfer list.", "'xxx.avi' was removed...").arg(removingTorrentDataIter->name));
m_removingTorrents.remove(infoHash); m_removingTorrents.erase(removingTorrentDataIter);
} }
} }
} }
@ -4023,44 +4027,48 @@ void Session::handleTorrentRemovedAlert(const lt::torrent_removed_alert *p)
void Session::handleTorrentDeletedAlert(const lt::torrent_deleted_alert *p) void Session::handleTorrentDeletedAlert(const lt::torrent_deleted_alert *p)
{ {
const InfoHash infoHash {p->info_hash}; const InfoHash infoHash {p->info_hash};
const auto removingTorrentDataIter = m_removingTorrents.find(infoHash);
if (!m_removingTorrents.contains(infoHash)) if (removingTorrentDataIter == m_removingTorrents.end())
return; return;
const RemovingTorrentData tmpRemovingTorrentData = m_removingTorrents.take(infoHash);
Utils::Fs::smartRemoveEmptyFolderTree(tmpRemovingTorrentData.savePathToRemove);
LogMsg(tr("'%1' was removed from the transfer list and hard disk.", "'xxx.avi' was removed...").arg(tmpRemovingTorrentData.name)); Utils::Fs::smartRemoveEmptyFolderTree(removingTorrentDataIter->savePathToRemove);
LogMsg(tr("'%1' was removed from the transfer list and hard disk.", "'xxx.avi' was removed...").arg(removingTorrentDataIter->name));
m_removingTorrents.erase(removingTorrentDataIter);
} }
void Session::handleTorrentDeleteFailedAlert(const lt::torrent_delete_failed_alert *p) void Session::handleTorrentDeleteFailedAlert(const lt::torrent_delete_failed_alert *p)
{ {
const InfoHash infoHash {p->info_hash}; const InfoHash infoHash {p->info_hash};
const auto removingTorrentDataIter = m_removingTorrents.find(infoHash);
if (!m_removingTorrents.contains(infoHash)) if (removingTorrentDataIter == m_removingTorrents.end())
return; return;
const RemovingTorrentData tmpRemovingTorrentData = m_removingTorrents.take(infoHash);
// libtorrent won't delete the directory if it contains files not listed in the torrent, // libtorrent won't delete the directory if it contains files not listed in the torrent,
// so we remove the directory ourselves // so we remove the directory ourselves
Utils::Fs::smartRemoveEmptyFolderTree(tmpRemovingTorrentData.savePathToRemove); Utils::Fs::smartRemoveEmptyFolderTree(removingTorrentDataIter->savePathToRemove);
if (p->error) { if (p->error) {
LogMsg(tr("'%1' was removed from the transfer list but the files couldn't be deleted. Error: %2", "'xxx.avi' was removed...") LogMsg(tr("'%1' was removed from the transfer list but the files couldn't be deleted. Error: %2", "'xxx.avi' was removed...")
.arg(tmpRemovingTorrentData.name, QString::fromLocal8Bit(p->error.message().c_str())) .arg(removingTorrentDataIter->name, QString::fromLocal8Bit(p->error.message().c_str()))
, Log::WARNING); , Log::WARNING);
} }
else { else {
LogMsg(tr("'%1' was removed from the transfer list.", "'xxx.avi' was removed...").arg(tmpRemovingTorrentData.name)); LogMsg(tr("'%1' was removed from the transfer list.", "'xxx.avi' was removed...").arg(removingTorrentDataIter->name));
} }
m_removingTorrents.erase(removingTorrentDataIter);
} }
void Session::handleMetadataReceivedAlert(const lt::metadata_received_alert *p) void Session::handleMetadataReceivedAlert(const lt::metadata_received_alert *p)
{ {
const InfoHash hash {p->handle.info_hash()}; const InfoHash hash {p->handle.info_hash()};
const auto loadedMetadataIter = m_loadedMetadata.find(hash);
if (m_loadedMetadata.contains(hash)) { if (loadedMetadataIter != m_loadedMetadata.end()) {
--m_extraLimit; --m_extraLimit;
adjustLimits(); adjustLimits();
m_loadedMetadata[hash] = TorrentInfo(p->handle.torrent_file()); *loadedMetadataIter = TorrentInfo(p->handle.torrent_file());
m_nativeSession->remove_torrent(p->handle, lt::session::delete_files); m_nativeSession->remove_torrent(p->handle, lt::session::delete_files);
} }
} }

Loading…
Cancel
Save