nodejs can install/update packages
This commit is contained in:
parent
43c611fcc0
commit
d9d9541d71
@ -251,7 +251,7 @@ void FormMain::prepareMenus() {
|
||||
m_trayMenu->addAction(m_ui->m_actionSettings);
|
||||
m_trayMenu->addAction(m_ui->m_actionQuit);
|
||||
|
||||
qDebugNN << LOGSEC_MESSAGEMODEL << "Creating tray icon menu.";
|
||||
qDebugNN << LOGSEC_GUI << "Creating tray icon menu.";
|
||||
}
|
||||
|
||||
#if !defined(USE_WEBENGINE)
|
||||
|
@ -141,6 +141,8 @@ Application::Application(const QString& id, int& argc, char** argv)
|
||||
|
||||
QTimer::singleShot(1000, system(), &SystemFactory::checkForUpdatesOnStartup);
|
||||
|
||||
//nodejs()->installUpdatePackage({ "@cliqz/adblocker", ">=1.0.0 <2.0.0" });
|
||||
|
||||
qDebugNN << LOGSEC_CORE
|
||||
<< "OpenSSL version:"
|
||||
<< QUOTE_W_SPACE_DOT(QSslSocket::sslLibraryVersionString());
|
||||
|
@ -94,6 +94,26 @@ bool IOFactory::startProcessDetached(const QString& program, const QStringList&
|
||||
return process.startDetached(nullptr);
|
||||
}
|
||||
|
||||
void IOFactory::startProcess(QProcess* const proc,
|
||||
const QString& executable,
|
||||
const QStringList& arguments,
|
||||
const QProcessEnvironment& pe,
|
||||
const QString& working_directory) {
|
||||
proc->setProgram(executable);
|
||||
proc->setArguments(arguments);
|
||||
|
||||
QProcessEnvironment system_pe = QProcessEnvironment::systemEnvironment();
|
||||
|
||||
system_pe.insert(pe);
|
||||
proc->setProcessEnvironment(system_pe);
|
||||
|
||||
if (!working_directory.isEmpty()) {
|
||||
proc->setWorkingDirectory(working_directory);
|
||||
}
|
||||
|
||||
proc->start();
|
||||
}
|
||||
|
||||
QString IOFactory::startProcessGetOutput(const QString& executable,
|
||||
const QStringList& arguments,
|
||||
const QProcessEnvironment& pe,
|
||||
|
@ -32,6 +32,11 @@ class IOFactory {
|
||||
const QStringList& arguments,
|
||||
const QString& native_arguments = {},
|
||||
const QString& working_directory = {});
|
||||
static void startProcess(QProcess* const proc,
|
||||
const QString& executable,
|
||||
const QStringList& arguments = {},
|
||||
const QProcessEnvironment& pe = {},
|
||||
const QString& working_directory = {});
|
||||
static QString startProcessGetOutput(const QString& executable,
|
||||
const QStringList& arguments = {},
|
||||
const QProcessEnvironment& pe = {},
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "miscellaneous/nodejs.h"
|
||||
|
||||
#include "exceptions/applicationexception.h"
|
||||
#include "exceptions/processexception.h"
|
||||
#include "miscellaneous/application.h"
|
||||
#include "miscellaneous/iofactory.h"
|
||||
#include "miscellaneous/settings.h"
|
||||
@ -73,7 +74,14 @@ NodeJs::PackageStatus NodeJs::packageStatus(const PackageMetadata& pkg) const {
|
||||
QJsonDocument json = QJsonDocument::fromJson(npm_ls.toUtf8());
|
||||
QJsonObject deps = json.object()["dependencies"].toObject();
|
||||
|
||||
return {};
|
||||
if (deps.contains(pkg.m_name)) {
|
||||
QString vers = deps[pkg.m_name].toObject()["version"].toString();
|
||||
|
||||
return vers == pkg.m_version ? PackageStatus::UpToDate : PackageStatus::OutOfDate;
|
||||
}
|
||||
else {
|
||||
return PackageStatus::NotInstalled;
|
||||
}
|
||||
}
|
||||
|
||||
void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
|
||||
@ -81,12 +89,13 @@ void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
|
||||
|
||||
switch (pkg_status) {
|
||||
case PackageStatus::NotInstalled:
|
||||
break;
|
||||
|
||||
case PackageStatus::OutOfDate:
|
||||
installPackage(pkg);
|
||||
break;
|
||||
|
||||
case PackageStatus::UpToDate:
|
||||
emit packageInstalledUpdated(pkg);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -94,11 +103,47 @@ void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
|
||||
void NodeJs::installPackage(const PackageMetadata& pkg) {
|
||||
// npm install --prefix "." @cliqz/adblocker@">=1.0.0 <2.0.0" --production --save-exact
|
||||
//https://docs.npmjs.com/cli/v8/commands/npm-install
|
||||
try {
|
||||
QProcess* proc = new QProcess();
|
||||
|
||||
connect(proc, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, [pkg, this](int exit_code,
|
||||
QProcess::ExitStatus status) {
|
||||
QProcess* sndr = qobject_cast<QProcess*>(sender());
|
||||
|
||||
if (exit_code != EXIT_SUCCESS || status == QProcess::ExitStatus::CrashExit) {
|
||||
qCriticalNN << LOGSEC_NODEJS << "Error when installing package" << QUOTE_W_SPACE_DOT(pkg.m_name)
|
||||
<< " Exit code:" << QUOTE_W_SPACE_DOT(exit_code)
|
||||
<< " Message:" << QUOTE_W_SPACE_DOT(sndr->readAllStandardError());
|
||||
|
||||
emit packageError(pkg, sndr->errorString());
|
||||
}
|
||||
else {
|
||||
qDebugNN << LOGSEC_NODEJS << "Installed/updated package" << QUOTE_W_SPACE(pkg.m_name)
|
||||
<< "with version" << QUOTE_W_SPACE_DOT(pkg.m_version);
|
||||
emit packageInstalledUpdated(pkg);
|
||||
}
|
||||
});
|
||||
connect(proc, &QProcess::errorOccurred, this, [pkg, this](QProcess::ProcessError error) {
|
||||
QProcess* sndr = qobject_cast<QProcess*>(sender());
|
||||
|
||||
qCriticalNN << LOGSEC_NODEJS << "Error when installing package" << QUOTE_W_SPACE_DOT(pkg.m_name)
|
||||
<< " Message:" << QUOTE_W_SPACE_DOT(error);
|
||||
|
||||
emit packageError(pkg, sndr->errorString());
|
||||
});
|
||||
|
||||
IOFactory::startProcess(proc,
|
||||
npmExecutable(),
|
||||
{ QSL("install"), QSL("--production"),
|
||||
QSL("%1@%2").arg(pkg.m_name, pkg.m_version),
|
||||
QSL("--prefix"), processedPackageFolder() });
|
||||
}
|
||||
catch (const ProcessException& ex) {
|
||||
emit packageError(pkg, ex.message());
|
||||
}
|
||||
}
|
||||
|
||||
void NodeJs::updatePackage(const PackageMetadata& pkg)
|
||||
{
|
||||
void NodeJs::updatePackage(const PackageMetadata& pkg) {
|
||||
// npm update --prefix "." @cliqz/adblocker@">=1.0.0 <2.0.0" --production --save-exact
|
||||
//https://docs.npmjs.com/cli/v8/commands/npm-update
|
||||
}
|
||||
|
@ -61,6 +61,10 @@ class NodeJs : public QObject {
|
||||
// NOTE: https://docs.npmjs.com/cli/v8/commands/npm-install
|
||||
void installUpdatePackage(const PackageMetadata& pkg);
|
||||
|
||||
signals:
|
||||
void packageError(const PackageMetadata& pkg, const QString& error);
|
||||
void packageInstalledUpdated(const PackageMetadata& pkg);
|
||||
|
||||
private:
|
||||
void installPackage(const PackageMetadata& pkg);
|
||||
void updatePackage(const PackageMetadata& pkg);
|
||||
|
@ -150,7 +150,7 @@ void GreaderNetwork::prepareFeedFetching(GreaderServiceRoot* root,
|
||||
|
||||
qDebugNN << LOGSEC_GREADER
|
||||
<< "Percentage of feeds for fetching:"
|
||||
<< QUOTE_W_SPACE_DOT(perc_of_fetching);
|
||||
<< QUOTE_W_SPACE_DOT(perc_of_fetching * 100.0);
|
||||
|
||||
auto remote_starred_ids_list = itemIds(QSL(GREADER_API_FULL_STATE_IMPORTANT), false, proxy, -1, m_newerThanFilter);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user