mirror of
https://github.com/lostjared/Acid.Cam.v2.Qt.git
synced 2025-12-15 11:20:01 +01:00
working on adding check
This commit is contained in:
116
src/dl-man.cpp
Normal file
116
src/dl-man.cpp
Normal file
@@ -0,0 +1,116 @@
|
||||
|
||||
// From Qt5 Examples/Docs
|
||||
|
||||
#include"dl-man.h"
|
||||
|
||||
DownloadManager::DownloadManager()
|
||||
{
|
||||
connect(&manager, SIGNAL(finished(QNetworkReply*)),
|
||||
SLOT(downloadFinished(QNetworkReply*)));
|
||||
}
|
||||
|
||||
void DownloadManager::doDownload(const QUrl &url)
|
||||
{
|
||||
QNetworkRequest request(url);
|
||||
QNetworkReply *reply = manager.get(request);
|
||||
|
||||
#if QT_CONFIG(ssl)
|
||||
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
|
||||
SLOT(sslErrors(QList<QSslError>)));
|
||||
#endif
|
||||
|
||||
currentDownloads.append(reply);
|
||||
}
|
||||
|
||||
QString DownloadManager::saveFileName(const QUrl &url)
|
||||
{
|
||||
QString path = url.path();
|
||||
QString basename = QFileInfo(path).fileName();
|
||||
|
||||
if (basename.isEmpty())
|
||||
basename = "download";
|
||||
|
||||
if (QFile::exists(basename)) {
|
||||
// already exists, don't overwrite
|
||||
int i = 0;
|
||||
basename += '.';
|
||||
while (QFile::exists(basename + QString::number(i)))
|
||||
++i;
|
||||
|
||||
basename += QString::number(i);
|
||||
}
|
||||
|
||||
return basename;
|
||||
}
|
||||
|
||||
bool DownloadManager::saveToDisk(const QString &filename, QIODevice *data)
|
||||
{
|
||||
QFile file(filename);
|
||||
if (!file.open(QIODevice::WriteOnly)) {
|
||||
fprintf(stderr, "Could not open %s for writing: %s\n",
|
||||
qPrintable(filename),
|
||||
qPrintable(file.errorString()));
|
||||
return false;
|
||||
}
|
||||
|
||||
file.write(data->readAll());
|
||||
file.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DownloadManager::isHttpRedirect(QNetworkReply *reply)
|
||||
{
|
||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
return statusCode == 301 || statusCode == 302 || statusCode == 303
|
||||
|| statusCode == 305 || statusCode == 307 || statusCode == 308;
|
||||
}
|
||||
|
||||
void DownloadManager::execute()
|
||||
{
|
||||
QStringList args = QCoreApplication::instance()->arguments();
|
||||
args.takeFirst(); // skip the first argument, which is the program's name
|
||||
if (args.isEmpty()) {
|
||||
QCoreApplication::instance()->quit();
|
||||
return;
|
||||
}
|
||||
|
||||
for (const QString &arg : qAsConst(args)) {
|
||||
QUrl url = QUrl::fromEncoded(arg.toLocal8Bit());
|
||||
doDownload(url);
|
||||
}
|
||||
}
|
||||
|
||||
void DownloadManager::sslErrors(const QList<QSslError> &sslErrors)
|
||||
{
|
||||
#if QT_CONFIG(ssl)
|
||||
for (const QSslError &error : sslErrors)
|
||||
fprintf(stderr, "SSL error: %s\n", qPrintable(error.errorString()));
|
||||
#else
|
||||
Q_UNUSED(sslErrors);
|
||||
#endif
|
||||
}
|
||||
|
||||
void DownloadManager::downloadFinished(QNetworkReply *reply)
|
||||
{
|
||||
QUrl url = reply->url();
|
||||
if (reply->error()) {
|
||||
fprintf(stderr, "Download of %s failed: %s\n",
|
||||
url.toEncoded().constData(),
|
||||
qPrintable(reply->errorString()));
|
||||
} else {
|
||||
if (isHttpRedirect(reply)) {
|
||||
fputs("Request was redirected.\n", stderr);
|
||||
} else {
|
||||
QString filename = saveFileName(url);
|
||||
if (saveToDisk(filename, reply)) {
|
||||
printf("Download of %s succeeded (saved to %s)\n",
|
||||
url.toEncoded().constData(), qPrintable(filename));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
currentDownloads.removeAll(reply);
|
||||
reply->deleteLater();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user