diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/downloadwidget.cpp | 83 | ||||
-rw-r--r-- | src/downloadwidget.h | 32 | ||||
-rw-r--r-- | src/downloadwidget.ui | 69 |
3 files changed, 122 insertions, 62 deletions
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 <QDesktopServices>
#include <QFileInfo>
#include <QUrl>
#include <QWebEngineDownloadItem>
@@ -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"));
}
}
diff --git a/src/downloadwidget.h b/src/downloadwidget.h index 074a979..4417cb4 100644 --- a/src/downloadwidget.h +++ b/src/downloadwidget.h @@ -54,36 +54,40 @@ #include "ui_downloadwidget.h"
#include "widgets/elidedlabel/elidedlabel.h"
-
+#include <QElapsedTimer>
#include <QFrame>
#include <QTime>
-#include <QElapsedTimer>
QT_BEGIN_NAMESPACE
class QWebEngineDownloadItem;
QT_END_NAMESPACE
// Displays one ongoing or finished download (QWebEngineDownloadItem).
-class DownloadWidget final : public QFrame, public Ui::DownloadWidget
-{
- Q_OBJECT
+class DownloadWidget final : public QFrame, public Ui::DownloadWidget {
+ Q_OBJECT
public:
- // Precondition: The QWebEngineDownloadItem has been accepted.
- explicit DownloadWidget(QWebEngineDownloadItem *download, QWidget *parent = nullptr);
+ // Precondition: The QWebEngineDownloadItem has been accepted.
+ explicit DownloadWidget(QWebEngineDownloadItem *download,
+ QWidget *parent = nullptr);
+public slots:
+ // Return true if downloadItem state is InProgress
+ bool isDownloading();
+ // Remove downloadItem, updating the download manager
+ void remove();
signals:
- // This signal is emitted when the user indicates that they want to remove
- // this download from the downloads list.
- void removeClicked(DownloadWidget *self);
+ // This signal is emitted when the user indicates that they want to remove
+ // this download from the downloads list.
+ void removeClicked(DownloadWidget *self);
private slots:
- void updateWidget();
+ void updateWidget();
private:
- QString withUnit(qreal bytes);
+ QString withUnit(qreal bytes);
- QWebEngineDownloadItem *m_download;
- QElapsedTimer m_timeAdded;
+ QWebEngineDownloadItem *m_download;
+ QElapsedTimer m_timeAdded;
};
#endif // DOWNLOADWIDGET_H
diff --git a/src/downloadwidget.ui b/src/downloadwidget.ui index 45d16e9..ec227ae 100644 --- a/src/downloadwidget.ui +++ b/src/downloadwidget.ui @@ -7,7 +7,7 @@ <x>0</x>
<y>0</y>
<width>526</width>
- <height>97</height>
+ <height>99</height>
</rect>
</property>
<property name="styleSheet">
@@ -17,8 +17,8 @@ <property name="sizeConstraint">
<enum>QLayout::SetMinAndMaxSize</enum>
</property>
- <item row="1" column="0" colspan="2">
- <widget class="ElidedLabel" name="m_srcUrl">
+ <item row="1" column="0" colspan="3">
+ <widget class="ElidedLabel" name="srcUrl">
<property name="styleSheet">
<string notr="true"/>
</property>
@@ -27,24 +27,18 @@ </property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QPushButton" name="m_cancelButton">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <item row="2" column="0" colspan="3">
+ <widget class="QProgressBar" name="progressBar">
<property name="styleSheet">
<string notr="true"/>
</property>
- <property name="flat">
- <bool>false</bool>
+ <property name="value">
+ <number>24</number>
</property>
</widget>
</item>
<item row="0" column="0">
- <widget class="ElidedLabel" name="m_dstName">
+ <widget class="ElidedLabel" name="dstName">
<property name="font">
<font>
<bold>true</bold>
@@ -55,15 +49,44 @@ </property>
</widget>
</item>
- <item row="2" column="0" colspan="2">
- <widget class="QProgressBar" name="m_progressBar">
- <property name="styleSheet">
- <string notr="true"/>
- </property>
- <property name="value">
- <number>24</number>
- </property>
- </widget>
+ <item row="0" column="2">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="openButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Open file using system application</string>
+ </property>
+ <property name="styleSheet">
+ <string notr="true"/>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="styleSheet">
+ <string notr="true"/>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</widget>
|