void DirectoryListingManager::on(QueueManagerListener::ItemRemoved, const QueueItemPtr& qi, bool aFinished) noexcept { if (!qi->isSet(QueueItem::FLAG_USER_LIST)) return; auto u = qi->getSources()[0].getUser(); if (qi->isSet(QueueItem::FLAG_DIRECTORY_DOWNLOAD) && !aFinished) removeDirectoryDownload(u, qi->getTempTarget(), qi->isSet(QueueItem::FLAG_PARTIAL_LIST)); if (qi->isSet(QueueItem::FLAG_CLIENT_VIEW)) { DirectoryListingPtr dl = nullptr; { RLock l(cs); auto p = viewedLists.find(u); if (p == viewedLists.end()) { dcassert(0); return; } dl = p->second; } dl->onListRemovedQueue(qi->getTarget(), qi->getTempTarget(), aFinished); bool closing = (dl->getClosing() || !dl->hasCompletedDownloads()); if (!aFinished && !dl->hasDownloads() && closing) { removeList(u); } } }