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_APP_DESCRIPTION "Repository browser for Arch Linux")
|
||||||
set(META_VERSION_MAJOR 0)
|
set(META_VERSION_MAJOR 0)
|
||||||
set(META_VERSION_MINOR 2)
|
set(META_VERSION_MINOR 2)
|
||||||
set(META_VERSION_PATCH 4)
|
set(META_VERSION_PATCH 5)
|
||||||
|
|
||||||
project(${META_PROJECT_NAME})
|
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"));
|
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");
|
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) :
|
AurPackageReply::AurPackageReply(const QList<QNetworkReply *> &networkReplies, const QStringList &requestedPackages, UserRepository *userRepo) :
|
||||||
PackageReply(networkReply, requestedPackages, userRepo),
|
PackageReply(networkReplies, requestedPackages, userRepo),
|
||||||
m_userRepo(userRepo)
|
m_userRepo(userRepo)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -243,7 +243,15 @@ AurSuggestionsReply *UserRepository::requestSuggestions(const QString &term)
|
||||||
|
|
||||||
AurPackageReply *UserRepository::requestPackageInfo(const QStringList &packageNames, bool forceUpdate)
|
AurPackageReply *UserRepository::requestPackageInfo(const QStringList &packageNames, bool forceUpdate)
|
||||||
{
|
{
|
||||||
|
if(packageNames.isEmpty()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QNetworkReply *> replies;
|
||||||
|
replies.reserve(1 + packageNames.size() / 200);
|
||||||
|
|
||||||
QUrlQuery query;
|
QUrlQuery query;
|
||||||
|
size_t queryItems = 0;
|
||||||
for(const auto &packageName : packageNames) {
|
for(const auto &packageName : packageNames) {
|
||||||
try {
|
try {
|
||||||
const auto &pkg = m_packages.at(packageName);
|
const auto &pkg = m_packages.at(packageName);
|
||||||
|
@ -253,14 +261,29 @@ AurPackageReply *UserRepository::requestPackageInfo(const QStringList &packageNa
|
||||||
} catch(const out_of_range &) {
|
} catch(const out_of_range &) {
|
||||||
query.addQueryItem(rpcArgArray, packageName);
|
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;
|
if(!query.isEmpty()) {
|
||||||
} else {
|
|
||||||
auto url = m_aurRpcUrl;
|
auto url = m_aurRpcUrl;
|
||||||
query.addQueryItem(rpcRequestTypeKey, rpcRequestTypeMultiInfo);
|
query.addQueryItem(rpcRequestTypeKey, rpcRequestTypeMultiInfo);
|
||||||
url.setQuery(query);
|
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
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AurPackageReply(QNetworkReply *networkReply, const QStringList &requestedPackages, UserRepository *userRepo);
|
AurPackageReply(const QList<QNetworkReply *> &networkReplies, const QStringList &requestedPackages, UserRepository *userRepo);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void processData(QNetworkReply *reply);
|
void processData(QNetworkReply *reply);
|
||||||
|
|
Loading…
Reference in New Issue