diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp
index c3b16f29b..d7fc7ca71 100644
--- a/src/librssguard/gui/dialogs/formmain.cpp
+++ b/src/librssguard/gui/dialogs/formmain.cpp
@@ -638,6 +638,7 @@ void FormMain::setupIcons() {
m_ui->m_actionTabsPrevious->setIcon(icon_theme_factory->fromTheme(QSL("go-previous")));
m_ui->m_actionBrowserScrollUp->setIcon(icon_theme_factory->fromTheme(QSL("arrow-up")));
m_ui->m_actionBrowserScrollDown->setIcon(icon_theme_factory->fromTheme(QSL("arrow-down")));
+ m_ui->m_actionCleanupWebCache->setIcon(icon_theme_factory->fromTheme(QSL("edit-clear")));
// Setup icons on TabWidget too.
m_ui->m_tabWidget->setupIcons();
@@ -759,6 +760,12 @@ void FormMain::createConnections() {
connect(m_ui->m_actionDownloadManager, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::showDownloadManager);
connect(m_ui->m_actionCleanupDatabase, &QAction::triggered, this, &FormMain::showDbCleanupAssistant);
+#if defined(USE_WEBENGINE)
+ connect(m_ui->m_actionCleanupWebCache, &QAction::triggered, qApp->web(), &WebFactory::cleanupCache);
+#else
+ m_ui->m_menuTools->removeAction(m_ui->m_actionCleanupWebCache);
+#endif
+
// Menu "Help" connections.
connect(m_ui->m_actionAboutGuard, &QAction::triggered, this, [this]() {
FormAbout(this).exec();
diff --git a/src/librssguard/gui/dialogs/formmain.ui b/src/librssguard/gui/dialogs/formmain.ui
index 16cebce67..66619858a 100755
--- a/src/librssguard/gui/dialogs/formmain.ui
+++ b/src/librssguard/gui/dialogs/formmain.ui
@@ -97,6 +97,7 @@
+
diff --git a/src/librssguard/gui/feedsview.cpp b/src/librssguard/gui/feedsview.cpp
index 5bc9d7183..d8b4216e3 100644
--- a/src/librssguard/gui/feedsview.cpp
+++ b/src/librssguard/gui/feedsview.cpp
@@ -1002,10 +1002,10 @@ void FeedsView::onItemExpandRequested(const QList& items, bool exp) {
}
void FeedsView::drawRow(QPainter* painter, const QStyleOptionViewItem& options, const QModelIndex& index) const {
- // auto opts = options;
+ auto opts = options;
- // opts.decorationAlignment = Qt::AlignmentFlag::AlignLeft;
- // opts.decorationSize = {options.decorationSize.height(), options.decorationSize.height()};
+ opts.decorationAlignment = Qt::AlignmentFlag::AlignLeft;
+ // opts.decorationSize = {options.decorationSize.height(), 70};
- BaseTreeView::drawRow(painter, options, index);
+ BaseTreeView::drawRow(painter, opts, index);
}
diff --git a/src/librssguard/miscellaneous/iofactory.cpp b/src/librssguard/miscellaneous/iofactory.cpp
index 60e5123f5..3072e6633 100644
--- a/src/librssguard/miscellaneous/iofactory.cpp
+++ b/src/librssguard/miscellaneous/iofactory.cpp
@@ -178,3 +178,8 @@ bool IOFactory::copyFile(const QString& source, const QString& destination) {
return QFile::copy(source, destination);
}
+
+void IOFactory::removeFolder(const QString& path) {
+ QDir dir(path);
+ dir.removeRecursively();
+}
diff --git a/src/librssguard/miscellaneous/iofactory.h b/src/librssguard/miscellaneous/iofactory.h
index 713740f0c..8f0a84586 100644
--- a/src/librssguard/miscellaneous/iofactory.h
+++ b/src/librssguard/miscellaneous/iofactory.h
@@ -48,6 +48,8 @@ class IOFactory {
// Copies file, overwrites destination.
static bool copyFile(const QString& source, const QString& destination);
+
+ static void removeFolder(const QString& path);
};
#endif // IOFACTORY_H
diff --git a/src/librssguard/network-web/webfactory.cpp b/src/librssguard/network-web/webfactory.cpp
index 0852e16ec..f5a4ba612 100644
--- a/src/librssguard/network-web/webfactory.cpp
+++ b/src/librssguard/network-web/webfactory.cpp
@@ -673,3 +673,26 @@ QString WebFactory::customUserAgent() const {
void WebFactory::setCustomUserAgent(const QString& user_agent) {
m_customUserAgent = user_agent;
}
+
+#if defined(USE_WEBENGINE)
+void WebFactory::cleanupCache() {
+ if (MsgBox::show(nullptr,
+ QMessageBox::Icon::Question,
+ tr("Web cache is going to be cleared"),
+ tr("Do you really want to clear web cache?"),
+ {},
+ {},
+ QMessageBox::StandardButton::Yes | QMessageBox::StandardButton::No) ==
+ QMessageBox::StandardButton::Yes) {
+ m_engineProfile->clearHttpCache();
+
+ // NOTE: Manually clear storage.
+ try {
+ IOFactory::removeFolder(m_engineProfile->persistentStoragePath());
+ }
+ catch (const ApplicationException& ex) {
+ qCriticalNN << LOGSEC_CORE << "Removing of webengine storage failed:" << QUOTE_W_SPACE_DOT(ex.message());
+ }
+ }
+}
+#endif
diff --git a/src/librssguard/network-web/webfactory.h b/src/librssguard/network-web/webfactory.h
index ef7beee7e..74d5fad6b 100644
--- a/src/librssguard/network-web/webfactory.h
+++ b/src/librssguard/network-web/webfactory.h
@@ -58,6 +58,11 @@ class WebFactory : public QObject {
QString customUserAgent() const;
void setCustomUserAgent(const QString& user_agent);
+ public slots:
+#if defined(USE_WEBENGINE)
+ void cleanupCache();
+#endif
+
#if defined(USE_WEBENGINE)
private slots:
void createMenu(QMenu* menu = nullptr);