Split long AUR queries

This commit is contained in:
Martchus 2016-09-28 22:23:09 +02:00
parent b938433579
commit 82fb9c8053
3 changed files with 31 additions and 8 deletions

View File

@ -8,7 +8,7 @@ set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
set(META_APP_DESCRIPTION "Repository browser for Arch Linux")
set(META_VERSION_MAJOR 0)
set(META_VERSION_MINOR 2)
set(META_VERSION_PATCH 4)
set(META_VERSION_PATCH 5)
project(${META_PROJECT_NAME})

View File

@ -44,8 +44,8 @@ QUrl UserRepository::m_aurPkgbuildUrl = QUrl(QStringLiteral("https://aur.archlin
QUrl UserRepository::m_aurSrcInfoUrl = QUrl(QStringLiteral("https://aur.archlinux.org/cgit/aur.git/plain/.SRCINFO"));
QString UserRepository::m_aurSnapshotPath = QStringLiteral("https://aur.archlinux.org/cgit/aur.git/snapshot/%1.tar.gz");
AurPackageReply::AurPackageReply(QNetworkReply *networkReply, const QStringList &requestedPackages, UserRepository *userRepo) :
PackageReply(networkReply, requestedPackages, userRepo),
AurPackageReply::AurPackageReply(const QList<QNetworkReply *> &networkReplies, const QStringList &requestedPackages, UserRepository *userRepo) :
PackageReply(networkReplies, requestedPackages, userRepo),
m_userRepo(userRepo)
{}
@ -243,7 +243,15 @@ AurSuggestionsReply *UserRepository::requestSuggestions(const QString &term)
AurPackageReply *UserRepository::requestPackageInfo(const QStringList &packageNames, bool forceUpdate)
{
if(packageNames.isEmpty()) {
return nullptr;
}
QList<QNetworkReply *> replies;
replies.reserve(1 + packageNames.size() / 200);
QUrlQuery query;
size_t queryItems = 0;
for(const auto &packageName : packageNames) {
try {
const auto &pkg = m_packages.at(packageName);
@ -253,14 +261,29 @@ AurPackageReply *UserRepository::requestPackageInfo(const QStringList &packageNa
} catch(const out_of_range &) {
query.addQueryItem(rpcArgArray, packageName);
}
if(++queryItems > 200) {
auto url = m_aurRpcUrl;
query.addQueryItem(rpcRequestTypeKey, rpcRequestTypeMultiInfo);
url.setQuery(query);
replies << networkAccessManager().get(QNetworkRequest(url));
queryItems = 0;
query.clear();
}
}
if(query.isEmpty()) {
return nullptr;
} else {
if(!query.isEmpty()) {
auto url = m_aurRpcUrl;
query.addQueryItem(rpcRequestTypeKey, rpcRequestTypeMultiInfo);
url.setQuery(query);
return new AurPackageReply(networkAccessManager().get(QNetworkRequest(url)), packageNames, this);
replies << networkAccessManager().get(QNetworkRequest(url));
}
if(replies.isEmpty()) {
return nullptr;
} else {
return new AurPackageReply(replies, packageNames, this);
}
}

View File

@ -20,7 +20,7 @@ class AurPackageReply : public PackageReply
{
Q_OBJECT
public:
AurPackageReply(QNetworkReply *networkReply, const QStringList &requestedPackages, UserRepository *userRepo);
AurPackageReply(const QList<QNetworkReply *> &networkReplies, const QStringList &requestedPackages, UserRepository *userRepo);
private slots:
void processData(QNetworkReply *reply);