diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index c55146eea..2f07eac4e 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -24,7 +24,7 @@
https://github.com/sponsors/martinrotter
-
+
none
diff --git a/src/librssguard/network-web/adblock/adblockdialog.cpp b/src/librssguard/network-web/adblock/adblockdialog.cpp
index 88b3cdeab..3a326d2b1 100644
--- a/src/librssguard/network-web/adblock/adblockdialog.cpp
+++ b/src/librssguard/network-web/adblock/adblockdialog.cpp
@@ -17,8 +17,7 @@
#include
#include
-AdBlockDialog::AdBlockDialog(QWidget* parent)
- : QDialog(parent), m_manager(qApp->web()->adBlock()), m_loaded(false) {
+AdBlockDialog::AdBlockDialog(QWidget* parent) : QDialog(parent), m_manager(qApp->web()->adBlock()), m_loaded(false) {
m_ui.setupUi(this);
m_ui.m_cbEnable->setChecked(m_manager->isEnabled());
@@ -57,9 +56,7 @@ void AdBlockDialog::saveOnClose() {
}
}
catch (const ApplicationException& ex) {
- qCriticalNN << LOGSEC_ADBLOCK
- << "Failed to enable AdBlock, error:"
- << QUOTE_W_SPACE_DOT(ex.message());
+ qCriticalNN << LOGSEC_ADBLOCK << "Failed to enable AdBlock, error:" << QUOTE_W_SPACE_DOT(ex.message());
MsgBox::show(this,
QMessageBox::Icon::Critical,
@@ -81,19 +78,18 @@ void AdBlockDialog::enableAdBlock(bool enable) {
m_manager->setEnabled(enable);
}
catch (const ApplicationException& ex) {
- qCriticalNN << LOGSEC_ADBLOCK
- << "Test of configuration failed:"
- << QUOTE_W_SPACE_DOT(ex.message());
+ qCriticalNN << LOGSEC_ADBLOCK << "Test of configuration failed:" << QUOTE_W_SPACE_DOT(ex.message());
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Error,
tr("There is error, check application log for more details and "
"head to online documentation. Also make sure that Node.js is installed."
- "\n\nError: %1").arg(ex.message()),
+ "\n\nError: %1")
+ .arg(ex.message()),
tr("ERROR!"));
}
}
-void AdBlockDialog::onAdBlockEnabledChanged(bool enabled) {
+void AdBlockDialog::onAdBlockEnabledChanged(bool enabled, const QString& message) {
m_ui.m_cbEnable->setChecked(enabled);
if (enabled) {
@@ -101,6 +97,9 @@ void AdBlockDialog::onAdBlockEnabledChanged(bool enabled) {
tr("It seems your AdBlock runs fine, but wait few seconds to be sure."),
tr("OK!"));
}
+ else if (!message.isEmpty()) {
+ m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Warning, message, message);
+ }
else {
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Information,
tr("No additional info."),
diff --git a/src/librssguard/network-web/adblock/adblockdialog.h b/src/librssguard/network-web/adblock/adblockdialog.h
index 80c1ec08e..78667b1b6 100644
--- a/src/librssguard/network-web/adblock/adblockdialog.h
+++ b/src/librssguard/network-web/adblock/adblockdialog.h
@@ -21,7 +21,7 @@ class AdBlockDialog : public QDialog {
private slots:
void saveOnClose();
void enableAdBlock(bool enable);
- void onAdBlockEnabledChanged(bool enabled);
+ void onAdBlockEnabledChanged(bool enabled, const QString &message);
void onAdBlockProcessTerminated();
private:
diff --git a/src/librssguard/network-web/adblock/adblockmanager.cpp b/src/librssguard/network-web/adblock/adblockmanager.cpp
index bc071104f..3fbd218ef 100644
--- a/src/librssguard/network-web/adblock/adblockmanager.cpp
+++ b/src/librssguard/network-web/adblock/adblockmanager.cpp
@@ -30,9 +30,9 @@
AdBlockManager::AdBlockManager(QObject* parent)
: QObject(parent), m_loaded(false), m_enabled(false), m_installing(false),
#if defined(USE_WEBENGINE)
- m_interceptor(new AdBlockUrlInterceptor(this)),
+ m_interceptor(new AdBlockUrlInterceptor(this)),
#endif
- m_serverProcess(nullptr), m_cacheBlocks({}) {
+ m_serverProcess(nullptr), m_cacheBlocks({}) {
m_adblockIcon = new AdBlockIcon(this);
m_adblockIcon->setObjectName(QSL("m_adblockIconAction"));
m_unifiedFiltersFile = qApp->userDataFolder() + QDir::separator() + QSL("adblock-unified-filters.txt");
@@ -47,23 +47,21 @@ AdBlockManager::~AdBlockManager() {
BlockingResult AdBlockManager::block(const AdblockRequestInfo& request) {
if (!isEnabled()) {
- return { false };
+ return {false};
}
const QString url_string = request.requestUrl().toEncoded().toLower();
const QString firstparty_url_string = request.firstPartyUrl().toEncoded().toLower();
const QString url_scheme = request.requestUrl().scheme().toLower();
- const QPair url_pair = { firstparty_url_string, url_string };
+ const QPair url_pair = {firstparty_url_string, url_string};
const QString url_type = request.resourceType();
if (!canRunOnScheme(url_scheme)) {
- return { false };
+ return {false};
}
else {
if (m_cacheBlocks.contains(url_pair)) {
- qDebugNN << LOGSEC_ADBLOCK
- << "Found blocking data in cache, URL:"
- << QUOTE_W_SPACE_DOT(url_pair);
+ qDebugNN << LOGSEC_ADBLOCK << "Found blocking data in cache, URL:" << QUOTE_W_SPACE_DOT(url_pair);
return m_cacheBlocks.value(url_pair);
}
@@ -74,21 +72,18 @@ BlockingResult AdBlockManager::block(const AdblockRequestInfo& request) {
m_cacheBlocks.insert(url_pair, result);
- qDebugNN << LOGSEC_ADBLOCK
- << "Inserted blocking data to cache for:"
- << QUOTE_W_SPACE_DOT(url_pair);
+ qDebugNN << LOGSEC_ADBLOCK << "Inserted blocking data to cache for:" << QUOTE_W_SPACE_DOT(url_pair);
return result;
}
catch (const ApplicationException& ex) {
qCriticalNN << LOGSEC_ADBLOCK
- << "HTTP error when calling server for blocking rules:"
- << QUOTE_W_SPACE_DOT(ex.message());
- return { false };
+ << "HTTP error when calling server for blocking rules:" << QUOTE_W_SPACE_DOT(ex.message());
+ return {false};
}
}
else {
- return { false };
+ return {false};
}
}
}
@@ -111,7 +106,7 @@ void AdBlockManager::setEnabled(bool enabled) {
if (m_enabled) {
if (!m_installing) {
m_installing = true;
- qApp->nodejs()->installUpdatePackages({ { QSL(CLIQZ_ADBLOCKED_PACKAGE), QSL(CLIQZ_ADBLOCKED_VERSION) } });
+ qApp->nodejs()->installUpdatePackages({{QSL(CLIQZ_ADBLOCKED_PACKAGE), QSL(CLIQZ_ADBLOCKED_VERSION)}});
}
}
else {
@@ -128,7 +123,7 @@ bool AdBlockManager::canRunOnScheme(const QString& scheme) const {
}
QString AdBlockManager::elementHidingRulesForDomain(const QUrl& url) const {
- if (m_serverProcess != nullptr && m_serverProcess->state() == QProcess::ProcessState::Running) {
+ if (m_serverProcess != nullptr && m_serverProcess->state() == QProcess::ProcessState::Running) {
try {
auto result = askServerForCosmeticRules(url.toString());
@@ -136,8 +131,7 @@ QString AdBlockManager::elementHidingRulesForDomain(const QUrl& url) const {
}
catch (const ApplicationException& ex) {
qCriticalNN << LOGSEC_ADBLOCK
- << "HTTP error when calling server for cosmetic rules:"
- << QUOTE_W_SPACE_DOT(ex.message());
+ << "HTTP error when calling server for cosmetic rules:" << QUOTE_W_SPACE_DOT(ex.message());
return {};
}
}
@@ -198,12 +192,10 @@ void AdBlockManager::onPackageReady(const QList& pkgs,
updateUnifiedFiltersFileAndStartServer();
}
catch (const ApplicationException& ex) {
- qCriticalNN << LOGSEC_ADBLOCK
- << "Failed to setup filters and start server:"
- << QUOTE_W_SPACE_DOT(ex.message());
+ qCriticalNN << LOGSEC_ADBLOCK << "Failed to setup filters and start server:" << QUOTE_W_SPACE_DOT(ex.message());
m_enabled = false;
- emit enabledChanged(m_enabled);
+ emit enabledChanged(m_enabled, tr("Failed to setup filters and start server: %1.").arg(ex.message()));
}
}
}
@@ -228,52 +220,46 @@ void AdBlockManager::onServerProcessFinished(int exit_code, QProcess::ExitStatus
Q_UNUSED(exit_status)
killServer();
- qCriticalNN << LOGSEC_ADBLOCK
- << "Process exited with exit code"
- << QUOTE_W_SPACE(exit_code)
+ qCriticalNN << LOGSEC_ADBLOCK << "Process exited with exit code" << QUOTE_W_SPACE(exit_code)
<< "so check application log for more details.";
m_enabled = false;
emit processTerminated();
}
-BlockingResult AdBlockManager::askServerIfBlocked(const QString& fp_url, const QString& url, const QString& url_type) const {
+BlockingResult AdBlockManager::askServerIfBlocked(const QString& fp_url,
+ const QString& url,
+ const QString& url_type) const {
QJsonObject req_obj;
QByteArray out;
QElapsedTimer tmr;
req_obj[QSL("fp_url")] = fp_url;
req_obj[QSL("url")] = url;
- req_obj[QSL("url_type")] = url_type,
- req_obj[QSL("filter")] = true;
+ req_obj[QSL("url_type")] = url_type, req_obj[QSL("filter")] = true;
tmr.start();
- auto network_res = NetworkFactory::performNetworkOperation(QSL("http://%1:%2").arg(QHostAddress(QHostAddress::SpecialAddress::LocalHost).toString(),
- QString::number(ADBLOCK_SERVER_PORT)),
- 500,
- QJsonDocument(req_obj).toJson(),
- out,
- QNetworkAccessManager::Operation::PostOperation,
- { {
- QSL(HTTP_HEADERS_CONTENT_TYPE).toLocal8Bit(),
- QSL("application/json").toLocal8Bit() } });
+ auto network_res =
+ NetworkFactory::performNetworkOperation(QSL("http://%1:%2")
+ .arg(QHostAddress(QHostAddress::SpecialAddress::LocalHost).toString(),
+ QString::number(ADBLOCK_SERVER_PORT)),
+ 500,
+ QJsonDocument(req_obj).toJson(),
+ out,
+ QNetworkAccessManager::Operation::PostOperation,
+ {{QSL(HTTP_HEADERS_CONTENT_TYPE).toLocal8Bit(),
+ QSL("application/json").toLocal8Bit()}});
if (network_res.m_networkError == QNetworkReply::NetworkError::NoError) {
- qDebugNN << LOGSEC_ADBLOCK
- << "Query for blocking info to server took "
- << tmr.elapsed()
- << " ms.";
+ qDebugNN << LOGSEC_ADBLOCK << "Query for blocking info to server took " << tmr.elapsed() << " ms.";
QJsonObject out_obj = QJsonDocument::fromJson(out).object();
bool blocking = out_obj[QSL("filter")].toObject()[QSL("match")].toBool();
- return {
- blocking,
- blocking
- ? out_obj[QSL("filter")].toObject()[QSL("filter")].toObject()[QSL("filter")].toString()
- : QString()
- };
+ return {blocking,
+ blocking ? out_obj[QSL("filter")].toObject()[QSL("filter")].toObject()[QSL("filter")].toString()
+ : QString()};
}
else {
throw NetworkException(network_res.m_networkError);
@@ -290,21 +276,19 @@ QString AdBlockManager::askServerForCosmeticRules(const QString& url) const {
tmr.start();
- auto network_res = NetworkFactory::performNetworkOperation(QSL("http://%1:%2").arg(QHostAddress(QHostAddress::SpecialAddress::LocalHost).toString(),
- QString::number(ADBLOCK_SERVER_PORT)),
- 500,
- QJsonDocument(req_obj).toJson(),
- out,
- QNetworkAccessManager::Operation::PostOperation,
- { {
- QSL(HTTP_HEADERS_CONTENT_TYPE).toLocal8Bit(),
- QSL("application/json").toLocal8Bit() } });
+ auto network_res =
+ NetworkFactory::performNetworkOperation(QSL("http://%1:%2")
+ .arg(QHostAddress(QHostAddress::SpecialAddress::LocalHost).toString(),
+ QString::number(ADBLOCK_SERVER_PORT)),
+ 500,
+ QJsonDocument(req_obj).toJson(),
+ out,
+ QNetworkAccessManager::Operation::PostOperation,
+ {{QSL(HTTP_HEADERS_CONTENT_TYPE).toLocal8Bit(),
+ QSL("application/json").toLocal8Bit()}});
if (network_res.m_networkError == QNetworkReply::NetworkError::NoError) {
- qDebugNN << LOGSEC_ADBLOCK
- << "Query for cosmetic rules to server took "
- << tmr.elapsed()
- << " ms.";
+ qDebugNN << LOGSEC_ADBLOCK << "Query for cosmetic rules to server took " << tmr.elapsed() << " ms.";
QJsonObject out_obj = QJsonDocument::fromJson(out).object();
@@ -316,9 +300,9 @@ QString AdBlockManager::askServerForCosmeticRules(const QString& url) const {
}
QProcess* AdBlockManager::startServer(int port) {
- QString temp_server = QDir::toNativeSeparators(IOFactory::getSystemFolder(QStandardPaths::StandardLocation::TempLocation)) +
- QDir::separator() +
- QSL("adblock-server.js");
+ QString temp_server =
+ QDir::toNativeSeparators(IOFactory::getSystemFolder(QStandardPaths::StandardLocation::TempLocation)) +
+ QDir::separator() + QSL("adblock-server.js");
if (!IOFactory::copyFile(QSL(":/scripts/adblock/adblock-server.js"), temp_server)) {
qWarningNN << LOGSEC_ADBLOCK << "Failed to copy server file to TEMP.";
@@ -328,12 +312,14 @@ QProcess* AdBlockManager::startServer(int port) {
proc->setProcessChannelMode(QProcess::ProcessChannelMode::ForwardedErrorChannel);
- connect(proc, QOverload::of(&QProcess::finished), this, &AdBlockManager::onServerProcessFinished);
+ connect(proc,
+ QOverload::of(&QProcess::finished),
+ this,
+ &AdBlockManager::onServerProcessFinished);
- qApp->nodejs()->runScript(proc, QDir::toNativeSeparators(temp_server), {
- QString::number(port),
- QDir::toNativeSeparators(m_unifiedFiltersFile)
- });
+ qApp->nodejs()->runScript(proc,
+ QDir::toNativeSeparators(temp_server),
+ {QString::number(port), QDir::toNativeSeparators(m_unifiedFiltersFile)});
qDebugNN << LOGSEC_ADBLOCK << "Attempting to start AdBlock server.";
return proc;
@@ -341,8 +327,10 @@ QProcess* AdBlockManager::startServer(int port) {
void AdBlockManager::killServer() {
if (m_serverProcess != nullptr) {
- disconnect(m_serverProcess, QOverload::of(&QProcess::finished),
- this, &AdBlockManager::onServerProcessFinished);
+ disconnect(m_serverProcess,
+ QOverload::of(&QProcess::finished),
+ this,
+ &AdBlockManager::onServerProcessFinished);
if (m_serverProcess->state() == QProcess::ProcessState::Running) {
m_serverProcess->kill();
@@ -381,9 +369,7 @@ void AdBlockManager::updateUnifiedFiltersFileAndStartServer() {
unified_contents = unified_contents.append(QString::fromUtf8(out));
unified_contents = unified_contents.append('\n');
- qDebugNN << LOGSEC_ADBLOCK
- << "Downloaded filter list from"
- << QUOTE_W_SPACE_DOT(filter_list_url);
+ qDebugNN << LOGSEC_ADBLOCK << "Downloaded filter list from" << QUOTE_W_SPACE_DOT(filter_list_url);
}
else {
throw NetworkException(res.m_networkError, tr("failed to download filter list '%1'").arg(filter_list_url));
@@ -394,8 +380,7 @@ void AdBlockManager::updateUnifiedFiltersFileAndStartServer() {
// Save.
m_unifiedFiltersFile = IOFactory::getSystemFolder(QStandardPaths::StandardLocation::TempLocation) +
- QDir::separator() +
- QSL("adblock.filters");
+ QDir::separator() + QSL("adblock.filters");
IOFactory::writeFile(m_unifiedFiltersFile, unified_contents.toUtf8());
diff --git a/src/librssguard/network-web/adblock/adblockmanager.h b/src/librssguard/network-web/adblock/adblockmanager.h
index 9a89f3cb2..b68228e9d 100644
--- a/src/librssguard/network-web/adblock/adblockmanager.h
+++ b/src/librssguard/network-web/adblock/adblockmanager.h
@@ -19,18 +19,17 @@ class AdBlockUrlInterceptor;
class AdBlockIcon;
struct BlockingResult {
- bool m_blocked;
- QString m_blockedByFilter;
+ bool m_blocked;
+ QString m_blockedByFilter;
- BlockingResult() : m_blocked(false), m_blockedByFilter(QString()) {}
-
- BlockingResult(bool blocked, QString blocked_by_filter = {})
- : m_blocked(blocked), m_blockedByFilter(std::move(blocked_by_filter)) {}
+ BlockingResult() : m_blocked(false), m_blockedByFilter(QString()) {}
+ BlockingResult(bool blocked, QString blocked_by_filter = {})
+ : m_blocked(blocked), m_blockedByFilter(std::move(blocked_by_filter)) {}
};
class AdBlockManager : public QObject {
- Q_OBJECT
+ Q_OBJECT
public:
explicit AdBlockManager(QObject* parent = nullptr);
@@ -43,8 +42,8 @@ class AdBlockManager : public QObject {
//
// If the process fails then signal
// processTerminated() is thrown.
- // If AdBlock is switched on/off peacefully then signal
- // enabledChanged(bool) is thrown.
+ // If AdBlock is switched on/off then signal
+ // enabledChanged(bool, QString) is thrown.
void setEnabled(bool enabled);
bool isEnabled() const;
@@ -67,7 +66,7 @@ class AdBlockManager : public QObject {
void showDialog();
signals:
- void enabledChanged(bool enabled);
+ void enabledChanged(bool enabled, QString error = {});
void processTerminated();
private slots: