From 7b64cf518d28597ff004418668b8680d2426e0ed Mon Sep 17 00:00:00 2001 From: Keshav Bhatt Date: Wed, 22 Mar 2023 20:24:51 +0530 Subject: feat: add open file option in download item - option allows user to open downloaded file directly from download manager --- src/downloadwidget.cpp | 83 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 58 insertions(+), 25 deletions(-) (limited to 'src/downloadwidget.cpp') diff --git a/src/downloadwidget.cpp b/src/downloadwidget.cpp index d228074..75ebf51 100644 --- a/src/downloadwidget.cpp +++ b/src/downloadwidget.cpp @@ -1,5 +1,6 @@ #include "downloadwidget.h" +#include #include #include #include @@ -8,10 +9,28 @@ DownloadWidget::DownloadWidget(QWebEngineDownloadItem *download, QWidget *parent) : QFrame(parent), m_download(download) { setupUi(this); - m_dstName->setText(QFileInfo(m_download->downloadDirectory()).fileName()); - m_srcUrl->setText(m_download->url().toDisplayString()); - connect(m_cancelButton, &QPushButton::clicked, m_download, [this](bool) { + static QIcon openIcon(":/icons/eye-line.png"); + openButton->setIcon(openIcon); + openButton->setEnabled(false); + + auto downloadFileName = m_download->downloadFileName(); + dstName->setText(QFileInfo(downloadFileName).fileName()); + + auto url = m_download->url().toDisplayString(); + if (url.startsWith("data:")) { + srcUrl->setText("data:..."); + } else { + srcUrl->setText(url); + } + + connect(openButton, &QPushButton::clicked, m_download, [this](bool) { + if (m_download->state() == QWebEngineDownloadItem::DownloadCompleted) { + QDesktopServices::openUrl(QUrl(m_download->downloadFileName())); + } + }); + + connect(cancelButton, &QPushButton::clicked, m_download, [this](bool) { if (m_download->state() == QWebEngineDownloadItem::DownloadInProgress) m_download->cancel(); else @@ -27,6 +46,11 @@ DownloadWidget::DownloadWidget(QWebEngineDownloadItem *download, updateWidget(); } +void DownloadWidget::remove() { + if (!isDownloading()) + emit removeClicked(this); +} + inline QString DownloadWidget::withUnit(qreal bytes) { if (bytes < (1 << 10)) return tr("%L1 B").arg(bytes); @@ -38,6 +62,11 @@ inline QString DownloadWidget::withUnit(qreal bytes) { return tr("%L1 GiB").arg(bytes / (1 << 30), 0, 'f', 2); } +bool DownloadWidget::isDownloading() { + + return m_download->state() == QWebEngineDownloadItem::DownloadInProgress; +} + void DownloadWidget::updateWidget() { qreal totalBytes = m_download->totalBytes(); qreal receivedBytes = m_download->receivedBytes(); @@ -50,49 +79,53 @@ void DownloadWidget::updateWidget() { break; case QWebEngineDownloadItem::DownloadInProgress: if (totalBytes >= 0) { - m_progressBar->setValue(qRound(100 * receivedBytes / totalBytes)); - m_progressBar->setDisabled(false); - m_progressBar->setFormat(tr("%p% - %1 of %2 downloaded - %3/s") - .arg(withUnit(receivedBytes), - withUnit(totalBytes), - withUnit(bytesPerSecond))); + progressBar->setValue(qRound(100 * receivedBytes / totalBytes)); + progressBar->setDisabled(false); + progressBar->setFormat(tr("%p% - %1 of %2 downloaded - %3/s") + .arg(withUnit(receivedBytes), + withUnit(totalBytes), + withUnit(bytesPerSecond))); } else { - m_progressBar->setValue(0); - m_progressBar->setDisabled(false); - m_progressBar->setFormat( + progressBar->setValue(0); + progressBar->setDisabled(false); + progressBar->setFormat( tr("unknown size - %1 downloaded - %2/s") .arg(withUnit(receivedBytes), withUnit(bytesPerSecond))); } + openButton->setEnabled(false); break; case QWebEngineDownloadItem::DownloadCompleted: - m_progressBar->setValue(100); - m_progressBar->setDisabled(true); - m_progressBar->setFormat( + progressBar->setValue(100); + progressBar->setDisabled(true); + progressBar->setFormat( tr("completed - %1 downloaded - %2/s") .arg(withUnit(receivedBytes), withUnit(bytesPerSecond))); + openButton->setEnabled(true); break; case QWebEngineDownloadItem::DownloadCancelled: - m_progressBar->setValue(0); - m_progressBar->setDisabled(true); - m_progressBar->setFormat( + progressBar->setValue(0); + progressBar->setDisabled(true); + progressBar->setFormat( tr("cancelled - %1 downloaded - %2/s") .arg(withUnit(receivedBytes), withUnit(bytesPerSecond))); + openButton->setEnabled(false); break; case QWebEngineDownloadItem::DownloadInterrupted: - m_progressBar->setValue(0); - m_progressBar->setDisabled(true); - m_progressBar->setFormat( + progressBar->setValue(0); + progressBar->setDisabled(true); + progressBar->setFormat( tr("interrupted: %1").arg(m_download->interruptReasonString())); + openButton->setEnabled(false); break; } if (state == QWebEngineDownloadItem::DownloadInProgress) { static QIcon cancelIcon(":/icons/stop-line.png"); - m_cancelButton->setIcon(cancelIcon); - m_cancelButton->setToolTip(tr("Stop downloading")); + cancelButton->setIcon(cancelIcon); + cancelButton->setToolTip(tr("Stop downloading")); } else { static QIcon removeIcon(":/icons/close-fill.png"); - m_cancelButton->setIcon(removeIcon); - m_cancelButton->setToolTip(tr("Remove from list")); + cancelButton->setIcon(removeIcon); + cancelButton->setToolTip(tr("Remove from list")); } } -- cgit v1.2.3