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);