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_actionSettings);
|
||||||
m_trayMenu->addAction(m_ui->m_actionQuit);
|
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)
|
#if !defined(USE_WEBENGINE)
|
||||||
|
@ -141,6 +141,8 @@ Application::Application(const QString& id, int& argc, char** argv)
|
|||||||
|
|
||||||
QTimer::singleShot(1000, system(), &SystemFactory::checkForUpdatesOnStartup);
|
QTimer::singleShot(1000, system(), &SystemFactory::checkForUpdatesOnStartup);
|
||||||
|
|
||||||
|
//nodejs()->installUpdatePackage({ "@cliqz/adblocker", ">=1.0.0 <2.0.0" });
|
||||||
|
|
||||||
qDebugNN << LOGSEC_CORE
|
qDebugNN << LOGSEC_CORE
|
||||||
<< "OpenSSL version:"
|
<< "OpenSSL version:"
|
||||||
<< QUOTE_W_SPACE_DOT(QSslSocket::sslLibraryVersionString());
|
<< QUOTE_W_SPACE_DOT(QSslSocket::sslLibraryVersionString());
|
||||||
|
@ -94,6 +94,26 @@ bool IOFactory::startProcessDetached(const QString& program, const QStringList&
|
|||||||
return process.startDetached(nullptr);
|
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,
|
QString IOFactory::startProcessGetOutput(const QString& executable,
|
||||||
const QStringList& arguments,
|
const QStringList& arguments,
|
||||||
const QProcessEnvironment& pe,
|
const QProcessEnvironment& pe,
|
||||||
|
@ -32,6 +32,11 @@ class IOFactory {
|
|||||||
const QStringList& arguments,
|
const QStringList& arguments,
|
||||||
const QString& native_arguments = {},
|
const QString& native_arguments = {},
|
||||||
const QString& working_directory = {});
|
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,
|
static QString startProcessGetOutput(const QString& executable,
|
||||||
const QStringList& arguments = {},
|
const QStringList& arguments = {},
|
||||||
const QProcessEnvironment& pe = {},
|
const QProcessEnvironment& pe = {},
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "miscellaneous/nodejs.h"
|
#include "miscellaneous/nodejs.h"
|
||||||
|
|
||||||
#include "exceptions/applicationexception.h"
|
#include "exceptions/applicationexception.h"
|
||||||
|
#include "exceptions/processexception.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "miscellaneous/iofactory.h"
|
#include "miscellaneous/iofactory.h"
|
||||||
#include "miscellaneous/settings.h"
|
#include "miscellaneous/settings.h"
|
||||||
@ -73,7 +74,14 @@ NodeJs::PackageStatus NodeJs::packageStatus(const PackageMetadata& pkg) const {
|
|||||||
QJsonDocument json = QJsonDocument::fromJson(npm_ls.toUtf8());
|
QJsonDocument json = QJsonDocument::fromJson(npm_ls.toUtf8());
|
||||||
QJsonObject deps = json.object()["dependencies"].toObject();
|
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) {
|
void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
|
||||||
@ -81,12 +89,13 @@ void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
|
|||||||
|
|
||||||
switch (pkg_status) {
|
switch (pkg_status) {
|
||||||
case PackageStatus::NotInstalled:
|
case PackageStatus::NotInstalled:
|
||||||
break;
|
|
||||||
|
|
||||||
case PackageStatus::OutOfDate:
|
case PackageStatus::OutOfDate:
|
||||||
|
installPackage(pkg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PackageStatus::UpToDate:
|
case PackageStatus::UpToDate:
|
||||||
|
emit packageInstalledUpdated(pkg);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,11 +103,47 @@ void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
|
|||||||
void NodeJs::installPackage(const PackageMetadata& pkg) {
|
void NodeJs::installPackage(const PackageMetadata& pkg) {
|
||||||
// npm install --prefix "." @cliqz/adblocker@">=1.0.0 <2.0.0" --production --save-exact
|
// npm install --prefix "." @cliqz/adblocker@">=1.0.0 <2.0.0" --production --save-exact
|
||||||
//https://docs.npmjs.com/cli/v8/commands/npm-install
|
//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
|
// npm update --prefix "." @cliqz/adblocker@">=1.0.0 <2.0.0" --production --save-exact
|
||||||
//https://docs.npmjs.com/cli/v8/commands/npm-update
|
//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
|
// NOTE: https://docs.npmjs.com/cli/v8/commands/npm-install
|
||||||
void installUpdatePackage(const PackageMetadata& pkg);
|
void installUpdatePackage(const PackageMetadata& pkg);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void packageError(const PackageMetadata& pkg, const QString& error);
|
||||||
|
void packageInstalledUpdated(const PackageMetadata& pkg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void installPackage(const PackageMetadata& pkg);
|
void installPackage(const PackageMetadata& pkg);
|
||||||
void updatePackage(const PackageMetadata& pkg);
|
void updatePackage(const PackageMetadata& pkg);
|
||||||
|
@ -150,7 +150,7 @@ void GreaderNetwork::prepareFeedFetching(GreaderServiceRoot* root,
|
|||||||
|
|
||||||
qDebugNN << LOGSEC_GREADER
|
qDebugNN << LOGSEC_GREADER
|
||||||
<< "Percentage of feeds for fetching:"
|
<< "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);
|
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