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:
Alex Spataru 2014-11-08 20:24:12 -06:00
parent 2ad0c796fc
commit bbe47f426a
7 changed files with 153 additions and 106 deletions

View File

@ -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

View File

@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/icons">
<file>internet_icon.png</file>
<file alias="update.png">update.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -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;
}

View File

@ -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