Don't start the entire NeoChat backend when receiving push notifications
This adds a dedicated "set up for push notifications only" function in Controller, which only sets up the KUnifiedPush connector for receiving the message and then quitting right afterward. If the user tries to open a notification, then it will quit and open the main client.
This commit is contained in:
@@ -42,10 +42,6 @@
|
|||||||
#include "trayicon_sni.h"
|
#include "trayicon_sni.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_KUNIFIEDPUSH
|
|
||||||
#include <kunifiedpush/connector.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace Quotient;
|
using namespace Quotient;
|
||||||
|
|
||||||
Controller::Controller(QObject *parent)
|
Controller::Controller(QObject *parent)
|
||||||
@@ -116,9 +112,6 @@ Controller::Controller(QObject *parent)
|
|||||||
connection->setupPushNotifications(endpoint);
|
connection->setupPushNotifications(endpoint);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
connect(connector, &KUnifiedPush::Connector::messageReceived, this, [this](const QByteArray &data) {
|
|
||||||
NotificationsManager::instance().postPushNotification(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
connector->registerClient(i18n("Receiving push notifications"));
|
connector->registerClient(i18n("Receiving push notifications"));
|
||||||
|
|
||||||
@@ -383,6 +376,19 @@ void Controller::forceRefreshTextDocument(QQuickTextDocument *textDocument, QQui
|
|||||||
connect(textDocument->textDocument(), SIGNAL(imagesLoaded()), item, SLOT(updateWholeDocument()));
|
connect(textDocument->textDocument(), SIGNAL(imagesLoaded()), item, SLOT(updateWholeDocument()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Controller::listenForNotifications()
|
||||||
|
{
|
||||||
|
#ifdef HAVE_KUNIFIEDPUSH
|
||||||
|
auto connector = new KUnifiedPush::Connector(QStringLiteral("org.kde.neochat"));
|
||||||
|
|
||||||
|
connect(connector, &KUnifiedPush::Connector::messageReceived, [](const QByteArray &data) {
|
||||||
|
NotificationsManager::instance().postPushNotification(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
connector->registerClient(i18n("Receiving push notifications"));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void Controller::setApplicationProxy()
|
void Controller::setApplicationProxy()
|
||||||
{
|
{
|
||||||
NeoChatConfig *cfg = NeoChatConfig::self();
|
NeoChatConfig *cfg = NeoChatConfig::self();
|
||||||
|
|||||||
@@ -12,6 +12,10 @@
|
|||||||
#include <Quotient/jobs/basejob.h>
|
#include <Quotient/jobs/basejob.h>
|
||||||
#include <Quotient/settings.h>
|
#include <Quotient/settings.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_KUNIFIEDPUSH
|
||||||
|
#include <kunifiedpush/connector.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
class NeoChatRoom;
|
class NeoChatRoom;
|
||||||
class TrayIcon;
|
class TrayIcon;
|
||||||
class QQuickTextDocument;
|
class QQuickTextDocument;
|
||||||
@@ -119,6 +123,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
Q_INVOKABLE void forceRefreshTextDocument(QQuickTextDocument *textDocument, QQuickItem *item);
|
Q_INVOKABLE void forceRefreshTextDocument(QQuickTextDocument *textDocument, QQuickItem *item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Start listening for notifications in dbus-activated mode.
|
||||||
|
* These notifications will quit the application when closed.
|
||||||
|
*/
|
||||||
|
static void listenForNotifications();
|
||||||
|
|
||||||
Quotient::AccountRegistry &accounts();
|
Quotient::AccountRegistry &accounts();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
24
src/main.cpp
24
src/main.cpp
@@ -166,21 +166,11 @@ int main(int argc, char *argv[])
|
|||||||
QStringLiteral("/var/config/fontconfig/conf.d/99-noto-mono-color-emoji.conf"));
|
QStringLiteral("/var/config/fontconfig/conf.d/99-noto-mono-color-emoji.conf"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_KDBUSADDONS
|
|
||||||
KDBusService service(KDBusService::Unique);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ColorSchemer colorScheme;
|
ColorSchemer colorScheme;
|
||||||
if (!NeoChatConfig::self()->colorScheme().isEmpty()) {
|
if (!NeoChatConfig::self()->colorScheme().isEmpty()) {
|
||||||
colorScheme.apply(NeoChatConfig::self()->colorScheme());
|
colorScheme.apply(NeoChatConfig::self()->colorScheme());
|
||||||
}
|
}
|
||||||
|
|
||||||
qml_register_types_org_kde_neochat();
|
|
||||||
qmlRegisterSingletonInstance("org.kde.neochat.config", 1, 0, "Config", NeoChatConfig::self());
|
|
||||||
qmlRegisterSingletonInstance("org.kde.neochat.accounts", 1, 0, "AccountRegistry", &Controller::instance().accounts());
|
|
||||||
|
|
||||||
qmlRegisterUncreatableType<KeyVerificationSession>("com.github.quotient_im.libquotient", 1, 0, "KeyVerificationSession", {});
|
|
||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
parser.setApplicationDescription(i18n("Client for the matrix communication protocol"));
|
parser.setApplicationDescription(i18n("Client for the matrix communication protocol"));
|
||||||
parser.addPositionalArgument(QStringLiteral("urls"), i18n("Supports matrix: url scheme"));
|
parser.addPositionalArgument(QStringLiteral("urls"), i18n("Supports matrix: url scheme"));
|
||||||
@@ -198,10 +188,24 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#ifdef HAVE_KUNIFIEDPUSH
|
#ifdef HAVE_KUNIFIEDPUSH
|
||||||
if (parser.isSet(dbusActivatedOption)) {
|
if (parser.isSet(dbusActivatedOption)) {
|
||||||
|
// We want to be replaceable by the main client
|
||||||
|
KDBusService service(KDBusService::Replace);
|
||||||
|
|
||||||
|
Controller::listenForNotifications();
|
||||||
return QCoreApplication::exec();
|
return QCoreApplication::exec();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_KDBUSADDONS
|
||||||
|
KDBusService service(KDBusService::Unique);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
qml_register_types_org_kde_neochat();
|
||||||
|
qmlRegisterSingletonInstance("org.kde.neochat.config", 1, 0, "Config", NeoChatConfig::self());
|
||||||
|
qmlRegisterSingletonInstance("org.kde.neochat.accounts", 1, 0, "AccountRegistry", &Controller::instance().accounts());
|
||||||
|
|
||||||
|
qmlRegisterUncreatableType<KeyVerificationSession>("com.github.quotient_im.libquotient", 1, 0, "KeyVerificationSession", {});
|
||||||
|
|
||||||
QQmlApplicationEngine engine;
|
QQmlApplicationEngine engine;
|
||||||
|
|
||||||
#ifdef HAVE_KDBUSADDONS
|
#ifdef HAVE_KDBUSADDONS
|
||||||
|
|||||||
@@ -16,6 +16,10 @@
|
|||||||
#include <Quotient/csapi/pushrules.h>
|
#include <Quotient/csapi/pushrules.h>
|
||||||
#include <Quotient/user.h>
|
#include <Quotient/user.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_KIO
|
||||||
|
#include <KIO/ApplicationLauncherJob>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "controller.h"
|
#include "controller.h"
|
||||||
#include "neochatconfig.h"
|
#include "neochatconfig.h"
|
||||||
#include "neochatconnection.h"
|
#include "neochatconnection.h"
|
||||||
@@ -319,10 +323,15 @@ void NotificationsManager::postPushNotification(const QByteArray &message)
|
|||||||
notification->setText(i18n("Encrypted Message"));
|
notification->setText(i18n("Encrypted Message"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_KIO
|
||||||
auto openAction = notification->addAction(i18n("Open NeoChat"));
|
auto openAction = notification->addAction(i18n("Open NeoChat"));
|
||||||
connect(openAction, &KNotificationAction::activated, this, [=]() {
|
connect(openAction, &KNotificationAction::activated, this, [=]() {
|
||||||
WindowController::instance().showAndRaiseWindow(notification->xdgActivationToken());
|
auto *job = new KIO::ApplicationLauncherJob(KService::serviceByDesktopName(QStringLiteral("org.kde.neochat")));
|
||||||
|
job->start();
|
||||||
});
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
|
connect(notification, &KNotification::closed, qGuiApp, &QGuiApplication::quit);
|
||||||
|
|
||||||
notification->sendEvent();
|
notification->sendEvent();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user