diff options
| author | LostDragonist <lost.dragonist@gmail.com> | 2018-08-19 14:58:24 -0500 |
|---|---|---|
| committer | LostDragonist <lost.dragonist@gmail.com> | 2018-08-19 16:33:34 -0500 |
| commit | 2060df1585fba272213eb08a678ec13f177a45c3 (patch) | |
| tree | 707eccbb84ec718657e846856148f5a76feebef4 | |
| parent | 9a973ccf5f5637e33c5587852e55b8272e77122f (diff) | |
Detect errors when writing downloads to disk and cancel download
| -rw-r--r-- | src/downloadmanager.cpp | 25 | ||||
| -rw-r--r-- | src/downloadmanager.h | 2 |
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;
|
