Split long AUR queries
This commit is contained in:
parent
b938433579
commit
82fb9c8053
|
@ -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})
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue