diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index 30c77e7f2..76c5137a0 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -26,7 +26,7 @@
https://github.com/sponsors/martinrotter
-
+
none
diff --git a/src/librssguard/core/filterutils.cpp b/src/librssguard/core/filterutils.cpp
index d9854ed4e..e2e19fd9b 100644
--- a/src/librssguard/core/filterutils.cpp
+++ b/src/librssguard/core/filterutils.cpp
@@ -3,6 +3,7 @@
#include "core/filterutils.h"
#include "definitions/definitions.h"
+#include "miscellaneous/iofactory.h"
#include "miscellaneous/textfactory.h"
#include
@@ -87,19 +88,5 @@ QDateTime FilterUtils::parseDateTime(const QString& dat) const {
}
QString FilterUtils::runExecutableGetOutput(const QString& executable, const QStringList& arguments) const {
- QProcess proc;
-
- proc.setProgram(executable);
- proc.setArguments(arguments);
-
- proc.start();
-
- if (proc.waitForFinished() &&
- proc.exitStatus() == QProcess::ExitStatus::NormalExit &&
- proc.exitCode() == EXIT_SUCCESS) {
- return proc.readAllStandardOutput();
- }
- else {
- return proc.readAllStandardError().simplified();
- }
+ return IOFactory::startProcessGetOutput(executable, arguments);
}
diff --git a/src/librssguard/miscellaneous/iofactory.cpp b/src/librssguard/miscellaneous/iofactory.cpp
index 8dacb3b47..d8a144ac4 100644
--- a/src/librssguard/miscellaneous/iofactory.cpp
+++ b/src/librssguard/miscellaneous/iofactory.cpp
@@ -93,6 +93,27 @@ bool IOFactory::startProcessDetached(const QString& program, const QStringList&
return process.startDetached(nullptr);
}
+QString IOFactory::startProcessGetOutput(const QString& executable, const QStringList& arguments) {
+ QProcess proc;
+
+ proc.setProgram(executable);
+ proc.setArguments(arguments);
+ proc.setProcessEnvironment(QProcessEnvironment::systemEnvironment());
+
+ proc.start();
+
+ if (proc.waitForFinished() &&
+ proc.exitStatus() == QProcess::ExitStatus::NormalExit &&
+ proc.exitCode() == EXIT_SUCCESS) {
+ return proc.readAllStandardOutput();
+ }
+ else {
+ QString err = proc.readAllStandardError().simplified();
+
+ return err;
+ }
+}
+
QByteArray IOFactory::readFile(const QString& file_path) {
QFile input_file(file_path);
QByteArray input_data;
diff --git a/src/librssguard/miscellaneous/iofactory.h b/src/librssguard/miscellaneous/iofactory.h
index a3dd426e5..27ecb29b7 100644
--- a/src/librssguard/miscellaneous/iofactory.h
+++ b/src/librssguard/miscellaneous/iofactory.h
@@ -31,6 +31,7 @@ class IOFactory {
const QStringList& arguments,
const QString& native_arguments = {},
const QString& working_directory = {});
+ static QString startProcessGetOutput(const QString& executable, const QStringList& arguments = {});
// Returns contents of a file.
// Throws exception when no such file exists.
diff --git a/src/librssguard/network-web/adblock/adblockmanager.cpp b/src/librssguard/network-web/adblock/adblockmanager.cpp
index 34760c9e6..d542972f6 100644
--- a/src/librssguard/network-web/adblock/adblockmanager.cpp
+++ b/src/librssguard/network-web/adblock/adblockmanager.cpp
@@ -296,19 +296,20 @@ QProcess* AdBlockManager::startServer(int port) {
proc->setProcessEnvironment(QProcessEnvironment::systemEnvironment());
auto pe = proc->processEnvironment();
- QString default_node_path =
-#if defined(Q_OS_WIN)
- pe.value(QSL("APPDATA")) + QDir::separator() + QSL("npm") + QDir::separator() + QSL("node_modules");
-#elif defined(Q_OS_LINUX)
- QSL("/usr/lib/node_modules");
-#elif defined(Q_OS_MACOS)
- QSL("/usr/local/lib/node_modules");
-#else
- QSL("");
-#endif
- if (!pe.contains(QSL("NODE_PATH")) && !default_node_path.isEmpty()) {
- pe.insert(QSL("NODE_PATH"), default_node_path);
+ if (!pe.contains(QSL("NODE_PATH"))) {
+ const QString system_node_prefix = IOFactory::startProcessGetOutput(
+#if defined(Q_OS_WIN)
+ QSL("npm.cmd")
+#else
+ QSL("npm")
+#endif
+ , { QSL("root"), QSL("--quiet"), QSL("-g") }
+ );
+
+ if (!system_node_prefix.isEmpty()) {
+ pe.insert(QSL("NODE_PATH"), system_node_prefix.simplified());
+ }
}
proc->setProcessEnvironment(pe);