mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
76 lines
1.9 KiB
C++
76 lines
1.9 KiB
C++
#include "vdownloader.h"
|
|
|
|
#include "utils/vutils.h"
|
|
|
|
VDownloader::VDownloader(QObject *parent)
|
|
: QObject(parent)
|
|
{
|
|
connect(&webCtrl, &QNetworkAccessManager::finished,
|
|
this, &VDownloader::handleDownloadFinished);
|
|
}
|
|
|
|
void VDownloader::handleDownloadFinished(QNetworkReply *reply)
|
|
{
|
|
if (reply->error() != QNetworkReply::NoError) {
|
|
qWarning() << "download reply error" << reply->error();
|
|
}
|
|
|
|
data = reply->readAll();
|
|
reply->deleteLater();
|
|
// The url() of the reply may be redirected and different from that of the request.
|
|
emit downloadFinished(data, reply->request().url().toString());
|
|
}
|
|
|
|
static QNetworkRequest networkRequest(const QUrl &p_url)
|
|
{
|
|
QNetworkRequest request(p_url);
|
|
/*
|
|
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
|
|
config.setProtocol(QSsl::SslV3);
|
|
config.setPeerVerifyMode(QSslSocket::VerifyNone);
|
|
request.setSslConfiguration(config);
|
|
*/
|
|
|
|
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
|
|
|
return request;
|
|
}
|
|
|
|
void VDownloader::download(const QUrl &p_url)
|
|
{
|
|
if (!p_url.isValid()) {
|
|
return;
|
|
}
|
|
|
|
webCtrl.get(networkRequest(p_url));
|
|
}
|
|
|
|
QByteArray VDownloader::downloadSync(const QUrl &p_url)
|
|
{
|
|
QByteArray data;
|
|
if (!p_url.isValid()) {
|
|
return data;
|
|
}
|
|
|
|
bool finished = false;
|
|
QNetworkAccessManager nam;
|
|
connect(&nam, &QNetworkAccessManager::finished,
|
|
[&data, &finished](QNetworkReply *p_reply) {
|
|
if (p_reply->error() != QNetworkReply::NoError) {
|
|
qWarning() << "download reply error" << p_reply->error();
|
|
}
|
|
|
|
data = p_reply->readAll();
|
|
p_reply->deleteLater();
|
|
finished = true;
|
|
});
|
|
|
|
nam.get(networkRequest(p_url));
|
|
|
|
while (!finished) {
|
|
VUtils::sleepWait(100);
|
|
}
|
|
|
|
return data;
|
|
}
|