repoindex/alpm/packageinfolookup.cpp

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