diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index 5d4d0d4bb..31ba01f96 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -30,7 +30,7 @@
https://martinrotter.github.io/donate/
-
+
none
diff --git a/resources/scripts/7za b/resources/scripts/7za
index 9c10723bf..47f412575 160000
--- a/resources/scripts/7za
+++ b/resources/scripts/7za
@@ -1 +1 @@
-Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749
+Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9
diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp
index f0cee1240..ed1c0abe5 100755
--- a/src/librssguard/gui/dialogs/formmain.cpp
+++ b/src/librssguard/gui/dialogs/formmain.cpp
@@ -403,7 +403,7 @@ void FormMain::onFeedUpdatesFinished(const FeedDownloadResults& results) {
void FormMain::onFeedUpdatesStarted() {
m_ui->m_actionStopRunningItemsUpdate->setEnabled(true);
- statusBar()->showProgressFeeds(0, tr("Feed update started"));
+ statusBar()->showProgressFeeds(-1, tr("Fetching common data"));
}
void FormMain::onFeedUpdatesProgress(const Feed* feed, int current, int total) {
diff --git a/src/librssguard/gui/reusable/progressbarwithtext.cpp b/src/librssguard/gui/reusable/progressbarwithtext.cpp
new file mode 100755
index 000000000..aebebb1bc
--- /dev/null
+++ b/src/librssguard/gui/reusable/progressbarwithtext.cpp
@@ -0,0 +1,31 @@
+// For license of this file, see /LICENSE.md.
+
+#include "gui/reusable/progressbarwithtext.h"
+
+#include "definitions/definitions.h"
+#include "miscellaneous/application.h"
+
+ProgressBarWithText::ProgressBarWithText(QWidget* parent) : QProgressBar(parent) {}
+
+QString ProgressBarWithText::text() const {
+ qint64 totalSteps = qint64(maximum()) - minimum();
+ QString result = format();
+ QLocale locale;
+
+ locale.setNumberOptions(locale.numberOptions() | QLocale::OmitGroupSeparator);
+ result.replace(QLatin1String("%m"), locale.toString(totalSteps));
+ result.replace(QLatin1String("%v"), locale.toString(value()));
+
+ // If max and min are equal and we get this far, it means that the
+ // progress bar has one step and that we are on that step. Return
+ // 100% here in order to avoid division by zero further down.
+ if (totalSteps == 0) {
+ result.replace(QLatin1String("%p"), locale.toString(100));
+ return result;
+ }
+
+ const auto progress = static_cast((qint64(value()) - minimum()) * 100.0 / totalSteps);
+
+ result.replace(QLatin1String("%p"), locale.toString(progress));
+ return result;
+}
diff --git a/src/librssguard/gui/reusable/progressbarwithtext.h b/src/librssguard/gui/reusable/progressbarwithtext.h
new file mode 100755
index 000000000..123f2f35a
--- /dev/null
+++ b/src/librssguard/gui/reusable/progressbarwithtext.h
@@ -0,0 +1,15 @@
+// For license of this file, see /LICENSE.md.
+
+#ifndef PROGRESSBARWITHTEXT_H
+#define PROGRESSBARWITHTEXT_H
+
+#include
+
+class ProgressBarWithText : public QProgressBar {
+ public:
+ explicit ProgressBarWithText(QWidget* parent = nullptr);
+
+ virtual QString text() const;
+};
+
+#endif // PROGRESSBARWITHTEXT_H
diff --git a/src/librssguard/gui/toolbars/statusbar.cpp b/src/librssguard/gui/toolbars/statusbar.cpp
index 41faab951..f5c271535 100755
--- a/src/librssguard/gui/toolbars/statusbar.cpp
+++ b/src/librssguard/gui/toolbars/statusbar.cpp
@@ -4,54 +4,36 @@
#include "gui/dialogs/formmain.h"
#include "gui/reusable/plaintoolbutton.h"
+#include "gui/reusable/progressbarwithtext.h"
#include "gui/tabwidget.h"
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/mutex.h"
#include
-#include
#include
StatusBar::StatusBar(QWidget* parent) : QStatusBar(parent) {
setSizeGripEnabled(false);
setContentsMargins(2, 0, 2, 2);
- m_barProgressFeeds = new QProgressBar(this);
- m_barProgressFeeds->setTextVisible(false);
- m_barProgressFeeds->setFixedWidth(100);
+ m_barProgressFeeds = new ProgressBarWithText(this);
+ m_barProgressFeeds->setTextVisible(true);
+ m_barProgressFeeds->setFixedWidth(200);
m_barProgressFeeds->setVisible(false);
m_barProgressFeeds->setObjectName(QSL("m_barProgressFeeds"));
m_barProgressFeedsAction = new QAction(qApp->icons()->fromTheme(QSL("application-rss+xml")), tr("Feed update progress bar"), this);
m_barProgressFeedsAction->setObjectName(QSL("m_barProgressFeedsAction"));
- m_lblProgressFeeds = new QLabel(this);
- m_lblProgressFeeds->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
- m_lblProgressFeeds->setVisible(false);
- m_lblProgressFeeds->setObjectName(QSL("m_lblProgressFeeds"));
-
- m_lblProgressFeedsAction = new QAction(qApp->icons()->fromTheme(QSL("application-rss+xml")), tr("Feed update label"), this);
- m_lblProgressFeedsAction->setObjectName(QSL("m_lblProgressFeedsAction"));
-
- m_barProgressDownload = new QProgressBar(this);
+ m_barProgressDownload = new ProgressBarWithText(this);
m_barProgressDownload->setTextVisible(true);
- m_barProgressDownload->setFixedWidth(100);
+ m_barProgressDownload->setFixedWidth(200);
m_barProgressDownload->setVisible(false);
m_barProgressDownload->setObjectName(QSL("m_barProgressDownload"));
m_barProgressDownloadAction = new QAction(qApp->icons()->fromTheme(QSL("emblem-downloads")), tr("File download progress bar"), this);
m_barProgressDownloadAction->setObjectName(QSL("m_barProgressDownloadAction"));
- m_lblProgressDownload = new QLabel(this);
- m_lblProgressDownload->setText("Downloading files in background");
- m_lblProgressDownload->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
- m_lblProgressDownload->setVisible(false);
- m_lblProgressDownload->setObjectName(QSL("m_lblProgressDownload"));
-
- m_lblProgressDownloadAction = new QAction(qApp->icons()->fromTheme(QSL("emblem-downloads")), tr("File download label"), this);
- m_lblProgressDownloadAction->setObjectName(QSL("m_lblProgressDownloadAction"));
-
- m_lblProgressDownload->installEventFilter(this);
m_barProgressDownload->installEventFilter(this);
}
@@ -64,8 +46,8 @@ QList StatusBar::availableActions() const {
QList actions = qApp->userActions();
// Now, add placeholder actions for custom stuff.
- actions << m_barProgressDownloadAction << m_barProgressFeedsAction
- << m_lblProgressDownloadAction << m_lblProgressFeedsAction;
+ actions << m_barProgressDownloadAction
+ << m_barProgressFeedsAction;
return actions;
}
@@ -99,9 +81,7 @@ QStringList StatusBar::savedActions() const {
}
QList StatusBar::convertActions(const QStringList& actions) {
- bool progress_visible = this->actions().contains(m_barProgressFeedsAction) &&
- m_lblProgressFeeds->isVisible() &&
- m_barProgressFeeds->isVisible();
+ bool progress_visible = this->actions().contains(m_barProgressFeedsAction) && m_barProgressFeeds->isVisible();
QList available_actions = availableActions();
QList spec_actions;
@@ -122,16 +102,6 @@ QList StatusBar::convertActions(const QStringList& actions) {
action_to_add = m_barProgressFeedsAction;
widget_to_add->setVisible(progress_visible);
}
- else if (matching_action == m_lblProgressDownloadAction) {
- widget_to_add = m_lblProgressDownload;
- action_to_add = m_lblProgressDownloadAction;
- widget_to_add->setVisible(false);
- }
- else if (matching_action == m_lblProgressFeedsAction) {
- widget_to_add = m_lblProgressFeeds;
- action_to_add = m_lblProgressFeedsAction;
- widget_to_add->setVisible(progress_visible);
- }
else {
if (action_name == SEPARATOR_ACTION_NAME) {
QLabel* lbl = new QLabel(QString::fromUtf8("•"), this);
@@ -192,7 +162,7 @@ void StatusBar::loadSpecificActions(const QList& actions, bool initial
}
bool StatusBar::eventFilter(QObject* watched, QEvent* event) {
- if (watched == m_lblProgressDownload || watched == m_barProgressDownload) {
+ if (watched == m_barProgressDownload) {
if (event->type() == QEvent::Type::MouseButtonPress) {
qApp->mainForm()->tabWidget()->showDownloadManager();
}
@@ -219,30 +189,40 @@ void StatusBar::clear() {
void StatusBar::showProgressFeeds(int progress, const QString& label) {
if (actions().contains(m_barProgressFeedsAction)) {
- m_lblProgressFeeds->setVisible(true);
m_barProgressFeeds->setVisible(true);
- m_lblProgressFeeds->setText(label);
- m_barProgressFeeds->setValue(progress);
+ m_barProgressFeeds->setFormat(label);
+
+ if (progress < 0) {
+ m_barProgressFeeds->setRange(0, 0);
+ }
+ else {
+ m_barProgressFeeds->setRange(0, 100);
+ m_barProgressFeeds->setValue(progress);
+ }
}
}
void StatusBar::clearProgressFeeds() {
- m_lblProgressFeeds->setVisible(false);
m_barProgressFeeds->setVisible(false);
}
void StatusBar::showProgressDownload(int progress, const QString& tooltip) {
if (actions().contains(m_barProgressDownloadAction)) {
- m_lblProgressDownload->setVisible(true);
m_barProgressDownload->setVisible(true);
- m_barProgressDownload->setValue(progress);
+ m_barProgressDownload->setFormat(tooltip);
m_barProgressDownload->setToolTip(tooltip);
- m_lblProgressDownload->setToolTip(tooltip);
+
+ if (progress < 0) {
+ m_barProgressDownload->setRange(0, 0);
+ }
+ else {
+ m_barProgressDownload->setRange(0, 100);
+ m_barProgressDownload->setValue(progress);
+ }
}
}
void StatusBar::clearProgressDownload() {
- m_lblProgressDownload->setVisible(false);
m_barProgressDownload->setVisible(false);
m_barProgressDownload->setValue(0);
}
diff --git a/src/librssguard/gui/toolbars/statusbar.h b/src/librssguard/gui/toolbars/statusbar.h
index 3e7cebfe5..3db6a521f 100755
--- a/src/librssguard/gui/toolbars/statusbar.h
+++ b/src/librssguard/gui/toolbars/statusbar.h
@@ -7,7 +7,7 @@
#include "gui/toolbars/basetoolbar.h"
-class QProgressBar;
+class ProgressBarWithText;
class QLabel;
class PlainToolButton;
@@ -39,14 +39,10 @@ class StatusBar : public QStatusBar, public BaseBar {
private:
void clear();
- QProgressBar* m_barProgressFeeds;
+ ProgressBarWithText* m_barProgressFeeds;
QAction* m_barProgressFeedsAction;
- QLabel* m_lblProgressFeeds;
- QAction* m_lblProgressFeedsAction;
- QProgressBar* m_barProgressDownload;
+ ProgressBarWithText* m_barProgressDownload;
QAction* m_barProgressDownloadAction;
- QLabel* m_lblProgressDownload;
- QAction* m_lblProgressDownloadAction;
};
#endif // STATUSBAR_H
diff --git a/src/librssguard/librssguard.pro b/src/librssguard/librssguard.pro
index 3d6871693..7e0d57be4 100644
--- a/src/librssguard/librssguard.pro
+++ b/src/librssguard/librssguard.pro
@@ -64,6 +64,7 @@ HEADERS += core/feeddownloader.h \
gui/notifications/notificationseditor.h \
gui/notifications/singlenotificationeditor.h \
gui/reusable/baselineedit.h \
+ gui/reusable/progressbarwithtext.h \
gui/settings/settingsnotifications.h \
gui/toolbars/basetoolbar.h \
gui/reusable/comboboxwithstatus.h \
@@ -249,6 +250,7 @@ SOURCES += core/feeddownloader.cpp \
gui/notifications/notificationseditor.cpp \
gui/notifications/singlenotificationeditor.cpp \
gui/reusable/baselineedit.cpp \
+ gui/reusable/progressbarwithtext.cpp \
gui/settings/settingsnotifications.cpp \
gui/toolbars/basetoolbar.cpp \
gui/reusable/comboboxwithstatus.cpp \
diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp
index 17b8d2193..9d69c4678 100755
--- a/src/librssguard/miscellaneous/settings.cpp
+++ b/src/librssguard/miscellaneous/settings.cpp
@@ -143,7 +143,7 @@ DVALUE(char*) GUI::FeedsToolbarActionsDef = "m_actionUpdateAllItems,m_actionStop
DKEY GUI::StatusbarActions = "status_bar";
DVALUE(char*) GUI::StatusbarActionsDef =
- "m_lblProgressFeedsAction,m_barProgressFeedsAction,m_actionUpdateAllItems,m_actionUpdateSelectedItems,m_actionStopRunningItemsUpdate,m_actionFullscreen,m_actionQuit";
+ "m_barProgressDownloadAction,m_barProgressFeedsAction,m_actionUpdateAllItems,m_actionUpdateSelectedItems,m_actionStopRunningItemsUpdate,m_actionFullscreen,m_actionQuit";
DKEY GUI::MainWindowInitialSize = "window_size";
DKEY GUI::MainWindowInitialPosition = "window_position";
diff --git a/src/librssguard/network-web/downloadmanager.cpp b/src/librssguard/network-web/downloadmanager.cpp
index b079db197..c6db9cee2 100644
--- a/src/librssguard/network-web/downloadmanager.cpp
+++ b/src/librssguard/network-web/downloadmanager.cpp
@@ -388,7 +388,9 @@ void DownloadItem::updateDownloadInfoLabel() {
}
bool DownloadItem::downloading() const {
- return (m_ui->m_progressDownload->isVisible());
+ return !m_finishedDownloading;
+
+ //return (m_ui->m_progressDownload->isVisible());
}
bool DownloadItem::downloadedSuccessfully() const {