Skip to content

Commit

Permalink
Split DesktopDaemon into its own files
Browse files Browse the repository at this point in the history
  • Loading branch information
albertvaka committed Sep 12, 2024
1 parent 5af9a33 commit da07bce
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 71 deletions.
2 changes: 1 addition & 1 deletion daemon/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
add_definitions(-DTRANSLATION_DOMAIN="kdeconnect-kded")

add_executable(kdeconnectd kdeconnectd.cpp ${CMAKE_SOURCE_DIR}/icons/custom_icons.qrc)
add_executable(kdeconnectd kdeconnectd.cpp desktop_daemon.cpp ${CMAKE_SOURCE_DIR}/icons/custom_icons.qrc)
ecm_qt_declare_logging_category(kdeconnectd
HEADER kdeconnectd_debug.h
IDENTIFIER KDECONNECT_DAEMON CATEGORY_NAME kdeconnect.daemon
Expand Down
83 changes: 83 additions & 0 deletions daemon/desktop_daemon.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/**
* SPDX-FileCopyrightText: 2024 Albert Vaca <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/

#include "desktop_daemon.h"

#include <QApplication>
#include <QIcon>
#include <QStandardPaths>
#include <QTimer>

#include <KDBusService>
#include <KIO/Global>
#include <KIO/JobTracker>
#include <KLocalizedString>
#include <KNotification>

#include "core/backends/pairinghandler.h"
#include "core/device.h"
#include "core/openconfig.h"

DesktopDaemon::DesktopDaemon(QObject *parent)
: Daemon(parent)
{
qApp->setWindowIcon(QIcon(QStringLiteral(":/icons/kdeconnect/kdeconnect.png")));
}

void DesktopDaemon::askPairingConfirmation(Device *device)
{
KNotification *notification = new KNotification(QStringLiteral("pairingRequest"), KNotification::NotificationFlag::Persistent);
QTimer::singleShot(PairingHandler::pairingTimeoutMsec, notification, &KNotification::close);
notification->setIconName(QStringLiteral("dialog-information"));
notification->setComponentName(QStringLiteral("kdeconnect"));
notification->setTitle(QStringLiteral("KDE Connect"));
notification->setText(i18n("Pairing request from %1\nKey: %2", device->name().toHtmlEscaped(), device->verificationKey()));
QString deviceId = device->id();
auto openSettings = [deviceId, notification] {
OpenConfig oc;
oc.setXdgActivationToken(notification->xdgActivationToken());
oc.openConfiguration(deviceId);
};

KNotificationAction *openSettingsAction = notification->addDefaultAction(i18n("Open"));
connect(openSettingsAction, &KNotificationAction::activated, openSettings);

KNotificationAction *acceptAction = notification->addAction(i18n("Accept"));
connect(acceptAction, &KNotificationAction::activated, device, &Device::acceptPairing);

KNotificationAction *rejectAction = notification->addAction(i18n("Reject"));
connect(rejectAction, &KNotificationAction::activated, device, &Device::cancelPairing);

KNotificationAction *viewKeyAction = notification->addAction(i18n("View key"));
connect(viewKeyAction, &KNotificationAction::activated, openSettings);
notification->sendEvent();
}

void DesktopDaemon::reportError(const QString &title, const QString &description)
{
qWarning() << title << ":" << description;
KNotification::event(KNotification::Error, title, description);
}

KJobTrackerInterface *DesktopDaemon::jobTracker()
{
return KIO::getJobTracker();
}

Q_SCRIPTABLE void DesktopDaemon::sendSimpleNotification(const QString &eventId, const QString &title, const QString &text, const QString &iconName)
{
KNotification *notification = new KNotification(eventId); // KNotification::Persistent
notification->setIconName(iconName);
notification->setComponentName(QStringLiteral("kdeconnect"));
notification->setTitle(title);
notification->setText(text);
notification->sendEvent();
}

void DesktopDaemon::quit()
{
QApplication::quit();
}
29 changes: 29 additions & 0 deletions daemon/desktop_daemon.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/**
* SPDX-FileCopyrightText: 2024 Albert Vaca Cintora <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/

#pragma once

#include <QString>
#include <QObject>

#include "daemon.h"

class Device;
class KJobTrackerInterface;

class DesktopDaemon : public Daemon
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.daemon")
public:
DesktopDaemon(QObject *parent = nullptr);

void askPairingConfirmation(Device *device) override;
void reportError(const QString &title, const QString &description) override;
KJobTrackerInterface *jobTracker() override;
Q_SCRIPTABLE void sendSimpleNotification(const QString &eventId, const QString &title, const QString &text, const QString &iconName) override;
void quit() override;
};
71 changes: 1 addition & 70 deletions daemon/kdeconnectd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,79 +30,12 @@
#include <dbushelper.h>

#include "core/backends/pairinghandler.h"
#include "core/daemon.h"
#include "desktop_daemon.h"
#include "core/device.h"
#include "core/openconfig.h"
#include "kdeconnect-version.h"
#include "kdeconnectd_debug.h"

class DesktopDaemon : public Daemon
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.daemon")
public:
DesktopDaemon(QObject *parent = nullptr)
: Daemon(parent)
{
qApp->setWindowIcon(QIcon(QStringLiteral(":/icons/kdeconnect/kdeconnect.png")));
}

void askPairingConfirmation(Device *device) override
{
KNotification *notification = new KNotification(QStringLiteral("pairingRequest"), KNotification::NotificationFlag::Persistent);
QTimer::singleShot(PairingHandler::pairingTimeoutMsec, notification, &KNotification::close);
notification->setIconName(QStringLiteral("dialog-information"));
notification->setComponentName(QStringLiteral("kdeconnect"));
notification->setTitle(QStringLiteral("KDE Connect"));
notification->setText(i18n("Pairing request from %1\nKey: %2", device->name().toHtmlEscaped(), device->verificationKey()));
QString deviceId = device->id();
auto openSettings = [deviceId, notification] {
OpenConfig oc;
oc.setXdgActivationToken(notification->xdgActivationToken());
oc.openConfiguration(deviceId);
};

KNotificationAction *openSettingsAction = notification->addDefaultAction(i18n("Open"));
connect(openSettingsAction, &KNotificationAction::activated, openSettings);

KNotificationAction *acceptAction = notification->addAction(i18n("Accept"));
connect(acceptAction, &KNotificationAction::activated, device, &Device::acceptPairing);

KNotificationAction *rejectAction = notification->addAction(i18n("Reject"));
connect(rejectAction, &KNotificationAction::activated, device, &Device::cancelPairing);

KNotificationAction *viewKeyAction = notification->addAction(i18n("View key"));
connect(viewKeyAction, &KNotificationAction::activated, openSettings);
notification->sendEvent();
}

void reportError(const QString &title, const QString &description) override
{
qCWarning(KDECONNECT_DAEMON) << title << ":" << description;
KNotification::event(KNotification::Error, title, description);
}

KJobTrackerInterface *jobTracker() override
{
return KIO::getJobTracker();
}

Q_SCRIPTABLE void sendSimpleNotification(const QString &eventId, const QString &title, const QString &text, const QString &iconName) override
{
KNotification *notification = new KNotification(eventId); // KNotification::Persistent
notification->setIconName(iconName);
notification->setComponentName(QStringLiteral("kdeconnect"));
notification->setTitle(title);
notification->setText(text);
notification->sendEvent();
}

void quit() override
{
QApplication::quit();
}
};

// Copied from plasma-workspace/libkworkspace/kworkspace.cpp
static void detectPlatform(int argc, char **argv)
{
Expand Down Expand Up @@ -195,5 +128,3 @@ int main(int argc, char *argv[])

return app.exec();
}

#include "kdeconnectd.moc"

0 comments on commit da07bce

Please sign in to comment.