Small improvements
- Minor UI changes - Implemented a mechanism to calculate the download time remaining - Fixed a bug where the updater icon would not be displayed.
This commit is contained in:
parent
2ad0c796fc
commit
bbe47f426a
@ -27,8 +27,7 @@ win32* {
|
||||
LIBS += -L$$PWD/dependencies/win32/ -llibeay32
|
||||
}
|
||||
|
||||
RESOURCES += \
|
||||
$$PWD/res/res.qrc
|
||||
RESOURCES += $$PWD/res/qsu_resources.qrc
|
||||
|
||||
FORMS += \
|
||||
$$PWD/src/dialogs/download_dialog.ui
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 8.6 KiB |
@ -1,5 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/icons">
|
||||
<file>internet_icon.png</file>
|
||||
<file alias="update.png">update.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
BIN
QSimpleUpdater/res/update.png
Normal file
BIN
QSimpleUpdater/res/update.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
@ -42,10 +42,12 @@ void DownloadDialog::beginDownload(const QUrl &url)
|
||||
ui->progressBar->setValue(0);
|
||||
ui->installButton->setEnabled(false);
|
||||
ui->cancelButton->setText(tr("Cancel"));
|
||||
ui->downloadLabel->setText(tr("Downloading update..."));
|
||||
ui->downloadLabel->setText(tr("Downloading updates"));
|
||||
ui->timeLabel->setText(tr("Time remaining") + ": " + tr("unknown"));
|
||||
|
||||
// Begin the download
|
||||
m_reply = m_manager->get(QNetworkRequest(url));
|
||||
m_start_time = QDateTime::currentDateTime().toTime_t();
|
||||
|
||||
// Update the progress bar value automatically
|
||||
connect(m_reply, SIGNAL(downloadProgress(qint64,qint64)),
|
||||
@ -80,21 +82,25 @@ void DownloadDialog::openDownload()
|
||||
|
||||
void DownloadDialog::cancelDownload()
|
||||
{
|
||||
// Cancel download
|
||||
m_reply->abort();
|
||||
QMessageBox _message;
|
||||
_message.setWindowTitle(tr("Updater"));
|
||||
_message.setIcon(QMessageBox::Question);
|
||||
_message.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||
_message.setText(tr("Are you sure you want to cancel the download?"));
|
||||
|
||||
// Close the dialog
|
||||
close();
|
||||
if (_message.exec() == QMessageBox::Yes) {
|
||||
hide();
|
||||
m_reply->abort();
|
||||
}
|
||||
}
|
||||
|
||||
void DownloadDialog::downloadFinished()
|
||||
{
|
||||
// Setup the UI
|
||||
ui->cancelButton->setText(tr("Close"));
|
||||
ui->timeLabel->setText(NULL);
|
||||
ui->installButton->setEnabled(true);
|
||||
ui->cancelButton->setText(tr("Close"));
|
||||
ui->downloadLabel->setText(tr("Download complete!"));
|
||||
|
||||
// Write the file
|
||||
QByteArray data = m_reply->readAll();
|
||||
|
||||
if (!data.isEmpty()) {
|
||||
@ -102,18 +108,15 @@ void DownloadDialog::downloadFinished()
|
||||
QStringList list = m_reply->url().toString().split("/");
|
||||
QFile file(QDir::tempPath() + "/" + list.at(list.count() - 1));
|
||||
|
||||
// Write download data to the opened file
|
||||
if (file.open(QIODevice::WriteOnly)) {
|
||||
file.write(data);
|
||||
m_path = file.fileName();
|
||||
}
|
||||
|
||||
// Show a warning if we cannot open the file for writting
|
||||
else {
|
||||
qWarning() << "QSimpleUpdater: cannot write downloaded data!";
|
||||
}
|
||||
|
||||
// Close the file
|
||||
file.close();
|
||||
}
|
||||
|
||||
@ -125,24 +128,19 @@ void DownloadDialog::downloadFinished()
|
||||
void DownloadDialog::updateProgress(qint64 received, qint64 total)
|
||||
{
|
||||
// We know the size of the download, so we can calculate the progress....
|
||||
if (total > 0) {
|
||||
if (total > 0 && received > 0) {
|
||||
ui->progressBar->setMinimum(0);
|
||||
ui->progressBar->setMaximum(100);
|
||||
|
||||
// Calculate and show download progress
|
||||
int _progress = (int) ((received * 100) / total);
|
||||
ui->progressBar->setValue(_progress);
|
||||
ui->downloadLabel->setText(tr("Downloading update (%1%)...").arg(_progress));
|
||||
|
||||
// Get size information
|
||||
QString _total_string;
|
||||
QString _received_string;
|
||||
|
||||
float _total = total;
|
||||
float _received = received;
|
||||
|
||||
// Calculate the lenght unit for
|
||||
// the total size of the download
|
||||
if (_total < 1024) {
|
||||
_total_string = tr("%1 bytes").arg(_total);
|
||||
} else if (_total < 1024 * 1024) {
|
||||
@ -153,8 +151,6 @@ void DownloadDialog::updateProgress(qint64 received, qint64 total)
|
||||
_total_string = tr("%1 MB").arg(_total);
|
||||
}
|
||||
|
||||
// Calculate the lenght unit for
|
||||
// the received data of the download
|
||||
if (_received < 1024) {
|
||||
_received_string = tr("%1 bytes").arg(_received);
|
||||
} else if (received < 1024 * 1024) {
|
||||
@ -165,19 +161,41 @@ void DownloadDialog::updateProgress(qint64 received, qint64 total)
|
||||
_received_string = tr("%1 MB").arg(_received);
|
||||
}
|
||||
|
||||
// Update the progress label
|
||||
ui->progressLabel->setText(_received_string + " " + tr("of") + " " + _total_string);
|
||||
ui->downloadLabel->setText(tr("Downloading updates") + " (" +
|
||||
_received_string + " " + tr("of") + " " +
|
||||
_total_string + ")");
|
||||
|
||||
uint _diff = QDateTime::currentDateTime().toTime_t() - m_start_time;
|
||||
|
||||
if (_diff > 0) {
|
||||
QString _time_string;
|
||||
float _time_remaining = total / (received / _diff);
|
||||
|
||||
if (_time_remaining > 7200) {
|
||||
_time_remaining /= 3600;
|
||||
_time_string = tr("About %1 hours").arg(int(_time_remaining + 0.5));
|
||||
}
|
||||
|
||||
else if (_time_remaining > 60) {
|
||||
_time_remaining /= 60;
|
||||
_time_string = tr("About %1 minutes").arg(int(_time_remaining + 0.5));
|
||||
}
|
||||
|
||||
else if (_time_remaining <= 60) {
|
||||
_time_string = tr("%1 seconds").arg(int(_time_remaining + 0.5));
|
||||
}
|
||||
|
||||
ui->timeLabel->setText(tr("Time remaining") + ": " + _time_string);
|
||||
}
|
||||
}
|
||||
|
||||
// We do not know the size of the download, so we improvise...
|
||||
else {
|
||||
|
||||
// Enable a marquee animation
|
||||
ui->progressBar->setValue(-1);
|
||||
ui->progressBar->setMinimum(0);
|
||||
ui->progressBar->setMaximum(0);
|
||||
|
||||
ui->downloadLabel->setText(tr("Downloading update..."));
|
||||
ui->downloadLabel->setText(tr("Downloading updates"));
|
||||
ui->timeLabel->setText(tr("Time remaining") + ": " + tr("Unknown"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -188,6 +206,5 @@ void DownloadDialog::ignoreSslErrors (QNetworkReply *reply, const QList<QSslErro
|
||||
|
||||
float DownloadDialog::roundNumber(const float &input)
|
||||
{
|
||||
// Round the input number to two decimal places
|
||||
return roundf(input * 100) / 100;
|
||||
}
|
||||
|
@ -2,8 +2,11 @@
|
||||
#define DOWNLOAD_DIALOG_H
|
||||
|
||||
#include <QDir>
|
||||
#include <QIcon>
|
||||
#include <QDebug>
|
||||
#include <QWidget>
|
||||
#include <QDateTime>
|
||||
#include <QMessageBox>
|
||||
#include <QNetworkReply>
|
||||
#include <QDesktopServices>
|
||||
#include <QNetworkAccessManager>
|
||||
@ -39,6 +42,8 @@ private:
|
||||
QNetworkReply *m_reply;
|
||||
QNetworkAccessManager *m_manager;
|
||||
|
||||
uint m_start_time;
|
||||
|
||||
float roundNumber(const float &input);
|
||||
};
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user