MCPcopy Create free account
hub / github.com/KikoPlayProject/KikoPlay / httpGetBatch

Method httpGetBatch

Common/network.cpp:171–236  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

169}
170
171QList<Network::Reply> Network::httpGetBatch(const QStringList &urls, const QList<QUrlQuery> &queries, const QList<QStringList> &headers, bool redirect)
172{
173 Q_ASSERT(urls.size()==queries.size() || queries.size()==0);
174 Q_ASSERT(urls.size()==headers.size() || headers.size()==0);
175 QList<Reply> results;
176 if (urls.isEmpty()) return results;
177 int finishCount=0;
178 QEventLoop eventLoop;
179 QNetworkAccessManager *manager(getManager());
180 manager->setCookieJar(nullptr);
181 for(int i=0;i<urls.size();++i)
182 {
183 results.append(Reply());
184 QUrl queryUrl(urls.at(i));
185 if(!queries.isEmpty()) queryUrl.setQuery(queries.at(i));
186 QNetworkRequest request;
187 request.setUrl(queryUrl);
188 request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, redirect);
189 request.setMaximumRedirectsAllowed(maxRedirectTimes);
190
191 if(!headers.isEmpty())
192 {
193 for(int j=0;j<headers[i].size();j+=2)
194 {
195 request.setRawHeader(headers[i][j].toUtf8(),headers[i][j+1].toUtf8());
196 }
197 }
198 QNetworkReply *reply = manager->get(request);
199 QTimer *timer=new QTimer;
200 timer->setInterval(timeout*2);
201 timer->setSingleShot(true);
202 QObject::connect(timer, &QTimer::timeout,reply,&QNetworkReply::abort);
203 QObject::connect(getAbortFlag(), &ReqAbortFlagObj::abort, reply,&QNetworkReply::abort);
204 timer->start();
205 QObject::connect(reply, &QNetworkReply::finished, reply, [i,&results,&finishCount,&eventLoop,reply,timer]()
206 {
207 if(timer->isActive())
208 {
209 timer->stop();
210 if(reply->error() == QNetworkReply::NoError)
211 {
212 results[i].hasError = false;
213 results[i].statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
214 results[i].content = reply->readAll();
215 results[i].headers = reply->rawHeaderPairs();
216 }
217 else
218 {
219 results[i].hasError = true;
220 results[i].errInfo=reply->errorString();
221 }
222 }
223 else
224 {
225 results[i].hasError = true;
226 results[i].errInfo=QObject::tr("Replay Timeout");
227 }
228 reply->deleteLater();

Callers

nothing calls this directly

Calls 9

ReplyClass · 0.85
errorMethod · 0.80
countMethod · 0.80
sizeMethod · 0.45
isEmptyMethod · 0.45
appendMethod · 0.45
getMethod · 0.45
startMethod · 0.45
stopMethod · 0.45

Tested by

no test coverage detected