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); } } }
void DirectoryListingManager::on(QueueManagerListener::ItemAdded, const QueueItemPtr& aQI) noexcept { if (!aQI->isSet(QueueItem::FLAG_CLIENT_VIEW) || !aQI->isSet(QueueItem::FLAG_USER_LIST)) return; auto user = aQI->getSources()[0].getUser(); auto dl = hasList(user); if (dl) { dl->onAddedQueue(aQI->getTarget()); return; } if (!aQI->isSet(QueueItem::FLAG_PARTIAL_LIST)) { dl = createList(user, false, aQI->getListName(), false); } else { dl = createList(user, true, Util::emptyString, false); } dl->onAddedQueue(aQI->getTarget()); }
void UserQueue::addQI(QueueItemPtr& qi, bool newBundle /*false*/) noexcept { for(const auto& i: qi->getSources()) { addQI(qi, i.getUser(), newBundle); } }
void UserQueue::removeQI(QueueItemPtr& qi, bool removeRunning /*true*/) noexcept{ for(const auto& i: qi->getSources()) { removeQI(qi, i.getUser(), removeRunning, 0); } }
void UserQueue::addQI(QueueItemPtr& qi) noexcept { for(const auto& i: qi->getSources()) { addQI(qi, i.getUser()); } }
void UserQueue::addQI(QueueItemPtr& qi, bool newBundle /*false*/) { for(auto i: qi->getSources()) { addQI(qi, i.getUser(), newBundle); } }
void UserQueue::removeQI(QueueItemPtr& qi, bool removeRunning /*true*/, bool fireSources /*true*/) { for(auto i: qi->getSources()) { removeQI(qi, i.getUser(), removeRunning, false, fireSources); } }