53 lines
2.0 KiB
C++
53 lines
2.0 KiB
C++
#include "./packageinfolookup.h"
|
|
#include "./repository.h"
|
|
|
|
namespace RepoIndex {
|
|
|
|
PackageInfoLookup::PackageInfoLookup(Manager &manager, const QJsonObject &packageSelection, Manager::PackageInfoPart part, QObject *parent) :
|
|
PackageLookup(parent)
|
|
{
|
|
if(part != Manager::None) {
|
|
for(auto i = packageSelection.constBegin(), end = packageSelection.constEnd(); i != end; ++i) {
|
|
if(auto *repo = manager.repositoryByName(i.key())) {
|
|
QStringList packagesToBeRequested;
|
|
for(const auto &entry : i.value().toArray()) {
|
|
const auto entryObj = entry.toObject();
|
|
const auto pkgName = entryObj.value(QStringLiteral("name")).toString();
|
|
if(!pkgName.isEmpty()) {
|
|
packagesToBeRequested << pkgName;
|
|
}
|
|
}
|
|
if(!packagesToBeRequested.isEmpty()) {
|
|
if(const auto *reply = (part & Manager::Details ? repo->requestFullPackageInfo(packagesToBeRequested) : repo->requestPackageInfo(packagesToBeRequested))) {
|
|
connect(reply, &PackageReply::resultsAvailable, this, &PackageInfoLookup::addResults);
|
|
++m_remainingReplies;
|
|
} else {
|
|
// no need to request any of the packages
|
|
}
|
|
}
|
|
} else {
|
|
// specified repository can not be found
|
|
QJsonObject errorObj;
|
|
errorObj.insert(QStringLiteral("repo"), i.key());
|
|
errorObj.insert(QStringLiteral("error"), QStringLiteral("na"));
|
|
m_results << errorObj;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void PackageInfoLookup::addResults()
|
|
{
|
|
assert(m_remainingReplies);
|
|
auto *reply = static_cast<PackageReply *>(sender());
|
|
m_results << reply->;
|
|
reply->deleteLater();
|
|
if(!--m_remainingReplies) {
|
|
emit resultsAvailable(QStringLiteral("pkginfo"), m_id, m_results);
|
|
deleteLater();
|
|
}
|
|
}
|
|
|
|
} // namespace RepoIndex
|
|
|