summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLostDragonist <lost.dragonist@gmail.com>2018-08-19 14:58:24 -0500
committerLostDragonist <lost.dragonist@gmail.com>2018-08-19 16:33:34 -0500
commit2060df1585fba272213eb08a678ec13f177a45c3 (patch)
tree707eccbb84ec718657e846856148f5a76feebef4 /src
parent9a973ccf5f5637e33c5587852e55b8272e77122f (diff)
Detect errors when writing downloads to disk and cancel download
Diffstat (limited to 'src')
-rw-r--r--src/downloadmanager.cpp25
-rw-r--r--src/downloadmanager.h2
2 files changed, 21 insertions, 6 deletions
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index 150fa12c..1e907b3f 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -804,8 +804,10 @@ void DownloadManager::resumeDownloadInt(int index)
if (info->isPausedState() || info->m_State == STATE_PAUSING) {
if (info->m_State == STATE_PAUSING) {
if (info->m_Output.isOpen()) {
- info->m_Output.write(info->m_Reply->readAll());
- setState(info, STATE_PAUSED);
+ writeData(info);
+ if (info->m_State == STATE_PAUSING) {
+ setState(info, STATE_PAUSED);
+ }
}
}
if ((info->m_Urls.size() == 0)
@@ -1362,10 +1364,7 @@ void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
void DownloadManager::downloadReadyRead()
{
try {
- DownloadInfo *info = findDownload(this->sender());
- if (info != nullptr) {
- info->m_Output.write(info->m_Reply->readAll());
- }
+ writeData(findDownload(this->sender()));
} catch (const std::bad_alloc&) {
reportError(tr("Memory allocation error (in processing downloaded data)."));
}
@@ -1840,3 +1839,17 @@ void DownloadManager::checkDownloadTimeout()
}
}
}
+
+void DownloadManager::writeData(DownloadInfo *info)
+{
+ if (info != nullptr) {
+ qint64 ret = info->m_Output.write(info->m_Reply->readAll());
+ if (ret < info->m_Reply->size()) {
+ setState(info, DownloadState::STATE_CANCELED);
+ qCritical(QString("Unable to write download \"%2\" to drive (return %1)").arg(ret).arg(info->m_FileName).toLocal8Bit());
+ reportError(tr("Unable to write download to drive (return %1).\n"
+ "Check the drive's available storage.\n\n"
+ "Canceling download \"%2\"...").arg(ret).arg(info->m_FileName));
+ }
+ }
+} \ No newline at end of file
diff --git a/src/downloadmanager.h b/src/downloadmanager.h
index e85c8c81..4cbe31b7 100644
--- a/src/downloadmanager.h
+++ b/src/downloadmanager.h
@@ -524,6 +524,8 @@ private:
static QString getFileTypeString(int fileType);
+ void writeData(DownloadInfo *info);
+
private:
static const int AUTOMATIC_RETRIES = 3;