This repository has been archived by the owner on Jul 21, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Downloader.cpp
129 lines (108 loc) · 4.07 KB
/
Downloader.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
//along with this program. If not, see <https://www.gnu.org/licenses/>.
//In addition, as a special exception, the copyright holders give permission
//to link the code of portions of this program with the OpenSSL library under
//certain conditions as described in each individual source file, and
//distribute linked combinations including the two.
//You must obey the GNU General Public License in all respects for all of the
//code used other than OpenSSL. If you modify file(s) with this exception,
//you may extend this exception to your version of the file(s), but you are
//not obligated to do so. If you do not wish to do so, delete this exception
//statement from your version. If you delete this exception statement from
//all source files in the program, then also delete it here.
#include "Downloader.h"
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QFile>
#include <QDir>
#include <QStandardPaths>
#include <JlCompress.h>
#include <QMessageBox>
#include "Widget.h"
#include <QWidget>
#include <QApplication>
#include <QDebug>
#include <QTextToSpeech>
#include <QTranslator>
Downloader::Downloader(QObject* parent) :
BaseClass(parent)
{
// Connect to the finished signal
connect(&m_manager, &QNetworkAccessManager::finished, this, &Downloader::onReply);
}
bool Downloader::get(const QString& targetFolder, const QUrl& url)
{
if (targetFolder.isEmpty() || url.isEmpty())
{
return false;
}
// Create object of file class for download
// Here there is a target directory and the name of the file that is allocated from the URL
m_file = new QFile(targetFolder + QDir::separator() + url.fileName());
// Trying to open the file
if (!m_file->open(QIODevice::WriteOnly))
{
delete m_file;
m_file = nullptr;
return false;
}
// Creating a request
QNetworkRequest request(url);
// Allow to go on redirects
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
// Running the download
m_currentReply = m_manager.get(request);
// After that, we immediately connect to signals about readiness of data to read and update the progress of downloading
connect(m_currentReply, &QNetworkReply::readyRead, this, &Downloader::onReadyRead);
connect(m_currentReply, &QNetworkReply::downloadProgress, this, &Downloader::updateDownloadProgress);
return true;
}
void Downloader::onReadyRead()
{
// If there is data and the file is open
if (m_file)
{
// write them to a file
m_file->write(m_currentReply->readAll());
}
}
void Downloader::onReply(QNetworkReply* reply)
{
Widget widget;
auto updated = widget.GetUpdateMessage();
// by completion of the request
if (reply->error() == QNetworkReply::NoError)
{
// save file
m_file->flush();
m_file->close();
// extract file
JlCompress::extractDir(widget.pathDownloadExt+"/PolishCookieConsent_chromium.zip", widget.GetInstallPath());
// cleanup
QDir(widget.pathDownloadExt).removeRecursively();
// voice message
m_speech = new QTextToSpeech(this);
m_speech -> setVolume(100.0);
m_speech -> say(updated);
// text message
QMessageBox::information(nullptr, tr("Info"), updated);
}
else
{
// Delete file in case of error
m_file->remove();
// Show error message
QMessageBox::critical(nullptr, tr("Info"), reply->errorString());
}
delete m_file;
m_file = nullptr;
reply->deleteLater();
}