void UserQueue::removeQI(QueueItemPtr& qi, const UserPtr& aUser, bool removeRunning /*true*/, bool addBad /*false*/, bool fireSources /*false*/) { if(removeRunning) { qi->removeDownloads(aUser); } dcassert(qi->isSource(aUser)); BundlePtr bundle = qi->getBundle(); if (bundle) { if (!bundle->isSource(aUser)) { return; } if (qi->getBundle()->removeUserQueue(qi, aUser, addBad)) { removeBundle(bundle, aUser); if (fireSources) { QueueManager::getInstance()->fire(QueueManagerListener::BundleSources(), bundle); } } else { dcassert(userBundleQueue.find(aUser) != userBundleQueue.end()); } } if (qi->getPriority() == QueueItem::HIGHEST) { auto j = userPrioQueue.find(aUser); dcassert(j != userPrioQueue.end()); if (j == userPrioQueue.end()) { return; } auto& l = j->second; auto i = find(l.begin(), l.end(), qi); dcassert(i != l.end()); if (i == l.end()) { return; } l.erase(i); if(l.empty()) { userPrioQueue.erase(j); } } }
void UserQueue::removeQI(QueueItemPtr& qi, const UserPtr& aUser, bool removeRunning /*true*/, Flags::MaskType reason) noexcept{ if(removeRunning) { qi->removeDownloads(aUser); } dcassert(qi->isSource(aUser)); BundlePtr bundle = qi->getBundle(); if (bundle) { if (!bundle->isSource(aUser)) { return; } aUser->removeQueued(qi->getSize()); if (qi->getBundle()->removeUserQueue(qi, aUser, reason)) { removeBundle(bundle, aUser); } else { dcassert(userBundleQueue.find(aUser) != userBundleQueue.end()); } } if (qi->getPriority() == QueueItem::HIGHEST) { auto j = userPrioQueue.find(aUser); dcassert(j != userPrioQueue.end()); if (j == userPrioQueue.end()) { return; } auto& l = j->second; auto i = find(l.begin(), l.end(), qi); dcassert(i != l.end()); if (i == l.end()) { return; } l.erase(i); if(l.empty()) { userPrioQueue.erase(j); } } }