diff --git a/src/Downloader.cpp b/src/Downloader.cpp index 40fd8ad..aea7aa4 100644 --- a/src/Downloader.cpp +++ b/src/Downloader.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2014-2016 Alex Spataru + * Copyright (c) 2017 Gilmanov Ildar * * This file is part of the QSimpleUpdater library, which is released under * the DBAD license, you can read a copy of it below: @@ -30,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -41,7 +41,6 @@ #include "Downloader.h" static const QString PARTIAL_DOWN (".part"); -static const QDir DOWNLOAD_DIR (QDir::homePath() + "/Downloads/"); Downloader::Downloader (QWidget* parent) : QWidget (parent) { @@ -113,26 +112,23 @@ void Downloader::startDownload (const QUrl& url) m_ui->downloadLabel->setText (tr ("Downloading updates")); m_ui->timeLabel->setText (tr ("Time remaining") + ": " + tr ("unknown")); - /* Configure the network request */ - QNetworkRequest request (url); - if (!m_userAgentString.isEmpty()) - request.setRawHeader ("User-Agent", m_userAgentString.toUtf8()); - /* Start download */ m_startTime = QDateTime::currentDateTime().toTime_t(); - m_reply = m_manager->get (request); + m_reply = m_manager->get (QNetworkRequest (url)); /* Ensure that downloads directory exists */ - if (!DOWNLOAD_DIR.exists()) - DOWNLOAD_DIR.mkpath ("."); + if (!m_downloadDir.exists()) + m_downloadDir.mkpath ("."); /* Remove old downloads */ - QFile::remove (DOWNLOAD_DIR.filePath (m_fileName)); - QFile::remove (DOWNLOAD_DIR.filePath (m_fileName + PARTIAL_DOWN)); + QFile::remove (m_downloadDir.filePath (m_fileName)); + QFile::remove (m_downloadDir.filePath (m_fileName + PARTIAL_DOWN)); /* Update UI when download progress changes or download finishes */ connect (m_reply, SIGNAL (downloadProgress (qint64, qint64)), this, SLOT (updateProgress (qint64, qint64))); + connect (m_reply, SIGNAL (finished ()), + this, SLOT (finished ())); connect (m_reply, SIGNAL (redirected (QUrl)), this, SLOT (startDownload (QUrl))); @@ -158,7 +154,7 @@ void Downloader::setFileName (const QString& file) void Downloader::openDownload() { if (!m_fileName.isEmpty()) - QDesktopServices::openUrl (QUrl::fromLocalFile (DOWNLOAD_DIR.filePath ( + QDesktopServices::openUrl (QUrl::fromLocalFile (m_downloadDir.filePath ( m_fileName))); else { @@ -242,6 +238,9 @@ void Downloader::cancelDownload() */ void Downloader::saveFile (qint64 received, qint64 total) { + Q_UNUSED(received); + Q_UNUSED(total); + /* Check if we need to redirect */ QUrl url = m_reply->attribute ( QNetworkRequest::RedirectionTargetAttribute).toUrl(); @@ -251,25 +250,11 @@ void Downloader::saveFile (qint64 received, qint64 total) } /* Save downloaded data to disk */ - QFile file (DOWNLOAD_DIR.filePath (m_fileName + PARTIAL_DOWN)); + QFile file (m_downloadDir.filePath (m_fileName + PARTIAL_DOWN)); if (file.open (QIODevice::WriteOnly | QIODevice::Append)) { file.write (m_reply->readAll()); file.close(); } - - /* Open downloaded update */ - if (received >= total && total > 0) { - /* Rename file */ - QFile::rename (DOWNLOAD_DIR.filePath (m_fileName + PARTIAL_DOWN), - DOWNLOAD_DIR.filePath (m_fileName)); - - /* Notify application */ - emit downloadFinished (m_url, DOWNLOAD_DIR.filePath (m_fileName)); - - /* Install the update */ - m_reply->close(); - installUpdate(); - } } @@ -333,6 +318,21 @@ void Downloader::updateProgress (qint64 received, qint64 total) } } +void Downloader::finished() +{ + /* Rename file */ + QFile::rename (m_downloadDir.filePath (m_fileName + PARTIAL_DOWN), + m_downloadDir.filePath (m_fileName)); + + /* Notify application */ + emit downloadFinished (m_url, m_downloadDir.filePath (m_fileName)); + + /* Install the update */ + m_reply->close(); + installUpdate(); + setVisible(false); +} + /** * Uses two time samples (from the current time and a previous sample) to * calculate how many bytes have been downloaded. @@ -390,12 +390,16 @@ qreal Downloader::round (const qreal& input) return roundf (input * 100) / 100; } -/** - * Changes the user-agent string used to communicate with the remote HTTP server - */ -void Downloader::setUserAgentString (const QString& agent) +QString Downloader::downloadDir() const { - m_userAgentString = agent; + return m_downloadDir.absolutePath(); +} + +void Downloader::setDownloadDir(const QString& downloadDir) +{ + if(m_downloadDir.absolutePath() != downloadDir) { + m_downloadDir = downloadDir; + } } /** diff --git a/src/Downloader.h b/src/Downloader.h index 0f4f287..decbea4 100644 --- a/src/Downloader.h +++ b/src/Downloader.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2014-2016 Alex Spataru + * Copyright (c) 2017 Gilmanov Ildar * * This file is part of the QSimpleUpdater library, which is released under * the DBAD license, you can read a copy of it below: @@ -30,6 +31,7 @@ #ifndef DOWNLOAD_DIALOG_H #define DOWNLOAD_DIALOG_H +#include #include #include @@ -56,11 +58,13 @@ public: bool useCustomInstallProcedures() const; + QString downloadDir() const; + void setDownloadDir(const QString& downloadDir); + public slots: void setUrlId (const QString& url); void startDownload (const QUrl& url); void setFileName (const QString& file); - void setUserAgentString (const QString& agent); void setUseCustomInstallProcedures (const bool custom); private slots: @@ -70,18 +74,19 @@ private slots: void saveFile (qint64 received, qint64 total); void calculateSizes (qint64 received, qint64 total); void updateProgress (qint64 received, qint64 total); + void finished (); void calculateTimeRemaining (qint64 received, qint64 total); private: qreal round (const qreal& input); private: + QDir m_downloadDir; QString m_url; uint m_startTime; QString m_fileName; Ui::Downloader* m_ui; QNetworkReply* m_reply; - QString m_userAgentString; bool m_useCustomProcedures; QNetworkAccessManager* m_manager; };