new notification events for nodejs packages info

This commit is contained in:
Martin Rotter 2022-02-11 08:54:49 +01:00
parent f9d0607adf
commit d21520f28a
10 changed files with 63 additions and 41 deletions

View File

@ -26,7 +26,7 @@
<url type="donation">https://github.com/sponsors/martinrotter</url>
<content_rating type="oars-1.1" />
<releases>
<release version="4.1.2" date="2022-02-10"/>
<release version="4.1.2" date="2022-02-11"/>
</releases>
<content_rating type="oars-1.0">
<content_attribute id="violence-cartoon">none</content_attribute>

View File

@ -15,7 +15,6 @@
#include "miscellaneous/iconfactory.h"
#include "miscellaneous/iofactory.h"
#include "miscellaneous/mutex.h"
#include "miscellaneous/nodejs.h"
#include "miscellaneous/notificationfactory.h"
#include "network-web/webfactory.h"
#include "services/abstract/serviceroot.h"
@ -91,6 +90,9 @@ Application::Application(const QString& id, int& argc, char** argv)
connect(this, &Application::commitDataRequest, this, &Application::onCommitData);
connect(this, &Application::saveStateRequest, this, &Application::onSaveState);
connect(m_nodejs, &NodeJs::packageError, this, &Application::onNodeJsPackageUpdateError);
connect(m_nodejs, &NodeJs::packageInstalledUpdated, this, &Application::onNodeJsPackageInstalled);
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
QString app_dir = QString::fromLocal8Bit(qgetenv("APPDIR"));
@ -132,7 +134,9 @@ Application::Application(const QString& id, int& argc, char** argv)
Notification(Notification::Event::NewUnreadArticlesFetched, true,
QSL("%1/notify.wav").arg(SOUNDS_BUILTIN_DIRECTORY)),
Notification(Notification::Event::NewAppVersionAvailable, true),
Notification(Notification::Event::LoginFailure, true)
Notification(Notification::Event::LoginFailure, true),
Notification(Notification::Event::NodePackageUpdated, true),
Notification(Notification::Event::NodePackageFailedToUpdate, true)
}, settings());
}
else {
@ -141,8 +145,6 @@ 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());
@ -535,7 +537,13 @@ void Application::showGuiMessage(Notification::Event event,
SystemTrayIcon::isSystemTrayAreaAvailable() &&
notification.balloonEnabled() &&
dest.m_tray) {
trayIcon()->showMessage(msg.m_title, msg.m_message, msg.m_type, TRAY_ICON_BUBBLE_TIMEOUT, std::move(action.m_action));
trayIcon()->showMessage(msg.m_title.simplified().isEmpty()
? Notification::nameForEvent(notification.event())
: msg.m_title,
msg.m_message,
msg.m_type,
TRAY_ICON_BUBBLE_TIMEOUT,
std::move(action.m_action));
return;
}
}
@ -839,6 +847,24 @@ void Application::parseCmdArgumentsFromMyInstance() {
}
}
void Application::onNodeJsPackageUpdateError(const NodeJs::PackageMetadata& pkg, const QString& error) {
qApp->showGuiMessage(Notification::Event::NodePackageUpdated,
{ {},
tr("Package %1 was NOT updated to version %2 because of error: %3.").arg(pkg.m_name,
pkg.m_version,
error),
QSystemTrayIcon::MessageIcon::Critical });
}
void Application::onNodeJsPackageInstalled(const NodeJs::PackageMetadata& pkg, bool already_up_to_date) {
if (!already_up_to_date) {
qApp->showGuiMessage(Notification::Event::NodePackageUpdated,
{ {},
tr("Package %1 was updated to version %2.").arg(pkg.m_name, pkg.m_version),
QSystemTrayIcon::MessageIcon::Information });
}
}
QString Application::customDataFolder() const {
return m_customDataFolder;
}

View File

@ -10,6 +10,7 @@
#include "miscellaneous/feedreader.h"
#include "miscellaneous/iofactory.h"
#include "miscellaneous/localization.h"
#include "miscellaneous/nodejs.h"
#include "miscellaneous/notification.h"
#include "miscellaneous/settings.h"
#include "miscellaneous/singleapplication.h"
@ -33,7 +34,6 @@ class FormMain;
class IconFactory;
class QAction;
class Mutex;
class NodeJs;
#if QT_VERSION_MAJOR == 6
class QWebEngineDownloadRequest;
@ -172,6 +172,8 @@ class RSSGUARD_DLLSPEC Application : public SingleApplication {
void parseCmdArgumentsFromMyInstance();
private slots:
void onNodeJsPackageUpdateError(const NodeJs::PackageMetadata& pkg, const QString& error);
void onNodeJsPackageInstalled(const NodeJs::PackageMetadata& pkg, bool already_up_to_date);
void onCommitData(QSessionManager& manager);
void onSaveState(QSessionManager& manager);
void onAboutToQuit();

View File

@ -106,7 +106,7 @@ void NodeJs::installUpdatePackage(const PackageMetadata& pkg) {
case PackageStatus::UpToDate:
qDebugNN << LOGSEC_NODEJS << "Package" << QUOTE_W_SPACE(pkg.m_name) << "is up-to-date.";
emit packageInstalledUpdated(pkg);
emit packageInstalledUpdated(pkg, true);
break;
}
@ -130,7 +130,7 @@ void NodeJs::installPackage(const PackageMetadata& pkg) {
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);
emit packageInstalledUpdated(pkg, false);
}
});
connect(proc, &QProcess::errorOccurred, this, [pkg, this](QProcess::ProcessError error) {

View File

@ -66,7 +66,7 @@ class NodeJs : public QObject {
signals:
void packageError(const PackageMetadata& pkg, const QString& error);
void packageInstalledUpdated(const PackageMetadata& pkg);
void packageInstalledUpdated(const PackageMetadata& pkg, bool already_up_to_date);
private:
void installPackage(const PackageMetadata& pkg);

View File

@ -120,6 +120,8 @@ QList<Notification::Event> Notification::allEvents() {
Event::LoginDataRefreshed,
Event::LoginFailure,
Event::NewAppVersionAvailable,
Event::NodePackageUpdated,
Event::NodePackageFailedToUpdate
};
}
@ -143,6 +145,12 @@ QString Notification::nameForEvent(Notification::Event event) {
case Notification::Event::GeneralEvent:
return QObject::tr("Miscellaneous events");
case Notification::Event::NodePackageUpdated:
return QObject::tr("Node.js - package updated");
case Notification::Event::NodePackageFailedToUpdate:
return QObject::tr("Node.js - package failed to updated");
default:
return QObject::tr("Unknown event");
}

View File

@ -30,9 +30,17 @@ class Notification {
// OAuth or similar mechanism.
LoginDataRefreshed = 4,
// New RSS Guard version available.
NewAppVersionAvailable = 5,
LoginFailure = 6
// Some service failed to login.
LoginFailure = 6,
// Node.js - package updated.
NodePackageUpdated = 7,
// Node.js - package failde to update.
NodePackageFailedToUpdate = 8
};
explicit Notification(Event event = Event::NoEvent, bool balloon = {}, const QString& sound_path = {},

View File

@ -23,6 +23,7 @@
#include <QJsonObject>
#include <QProcess>
#include <QString>
#include <QVersionNumber>
using UpdateCheck = QPair<UpdateInfo, QNetworkReply::NetworkError>;
@ -226,35 +227,10 @@ void SystemFactory::checkForUpdatesOnStartup() {
}
bool SystemFactory::isVersionNewer(const QString& new_version, const QString& base_version) {
QStringList base_version_tkn = base_version.split(QL1C('.'));
QStringList new_version_tkn = new_version.split(QL1C('.'));
QVersionNumber nw = QVersionNumber::fromString(new_version);
QVersionNumber bs = QVersionNumber::fromString(base_version);
while (!base_version_tkn.isEmpty() && !new_version_tkn.isEmpty()) {
const int base_number = base_version_tkn.takeFirst().toInt();
const int new_number = new_version_tkn.takeFirst().toInt();
if (new_number > base_number) {
// New version is indeed higher that current version.
return true;
}
else if (new_number < base_number) {
return false;
}
}
// Versions are either the same or they have unequal sizes.
if (base_version_tkn.isEmpty() && new_version_tkn.isEmpty()) {
// Versions are the same.
return false;
}
else {
if (new_version_tkn.isEmpty()) {
return false;
}
else {
return new_version_tkn.join(QString()).toInt() > 0;
}
}
return nw > bs;
}
bool SystemFactory::isVersionEqualOrNewer(const QString& new_version, const QString& base_version) {

View File

@ -175,7 +175,9 @@ void AdBlockManager::showDialog() {
AdBlockDialog(qApp->mainFormWidget()).exec();
}
void AdBlockManager::onPackageReady(const NodeJs::PackageMetadata& pkg) {
void AdBlockManager::onPackageReady(const NodeJs::PackageMetadata& pkg, bool already_up_to_date) {
Q_UNUSED(already_up_to_date)
if (pkg.m_name == QSL(CLIQZ_ADBLOCKED_PACKAGE)) {
m_installing = false;

View File

@ -71,7 +71,7 @@ class AdBlockManager : public QObject {
void processTerminated();
private slots:
void onPackageReady(const NodeJs::PackageMetadata& pkg);
void onPackageReady(const NodeJs::PackageMetadata& pkg, bool already_up_to_date);
void onPackageError(const NodeJs::PackageMetadata& pkg, const QString& error);
void onServerProcessFinished(int exit_code, QProcess::ExitStatus exit_status);