Add backend for ConnectivityReport plugin
This commit is contained in:
parent
7193cfc927
commit
a75da62f4d
12 changed files with 277 additions and 1 deletions
|
@ -72,6 +72,7 @@ void KdeConnectDeclarativePlugin::registerTypes(const char* uri)
|
||||||
|
|
||||||
registerFactory<DeviceDbusInterface>(uri, "DeviceDbusInterfaceFactory");
|
registerFactory<DeviceDbusInterface>(uri, "DeviceDbusInterfaceFactory");
|
||||||
registerFactory<BatteryDbusInterface>(uri, "DeviceBatteryDbusInterfaceFactory");
|
registerFactory<BatteryDbusInterface>(uri, "DeviceBatteryDbusInterfaceFactory");
|
||||||
|
registerFactory<ConnectivityReportDbusInterface>(uri, "DeviceConnectivityReportDbusInterfaceFactory");
|
||||||
registerFactory<FindMyPhoneDeviceDbusInterface>(uri, "FindMyPhoneDbusInterfaceFactory");
|
registerFactory<FindMyPhoneDeviceDbusInterface>(uri, "FindMyPhoneDbusInterfaceFactory");
|
||||||
registerFactory<SftpDbusInterface>(uri, "SftpDbusInterfaceFactory");
|
registerFactory<SftpDbusInterface>(uri, "SftpDbusInterfaceFactory");
|
||||||
registerFactory<RemoteKeyboardDbusInterface>(uri, "RemoteKeyboardDbusInterfaceFactory");
|
registerFactory<RemoteKeyboardDbusInterface>(uri, "RemoteKeyboardDbusInterfaceFactory");
|
||||||
|
|
|
@ -41,6 +41,7 @@ set(libkdeconnect_SRC
|
||||||
geninterface(${PROJECT_SOURCE_DIR}/core/daemon.h daemoninterface)
|
geninterface(${PROJECT_SOURCE_DIR}/core/daemon.h daemoninterface)
|
||||||
geninterface(${PROJECT_SOURCE_DIR}/core/device.h deviceinterface)
|
geninterface(${PROJECT_SOURCE_DIR}/core/device.h deviceinterface)
|
||||||
geninterface(${PROJECT_SOURCE_DIR}/plugins/battery/batteryplugin.h batteryinterface)
|
geninterface(${PROJECT_SOURCE_DIR}/plugins/battery/batteryplugin.h batteryinterface)
|
||||||
|
geninterface(${PROJECT_SOURCE_DIR}/plugins/connectivity-report/connectivity_reportplugin.h connectivityinterface)
|
||||||
geninterface(${PROJECT_SOURCE_DIR}/plugins/sftp/sftpplugin.h devicesftpinterface)
|
geninterface(${PROJECT_SOURCE_DIR}/plugins/sftp/sftpplugin.h devicesftpinterface)
|
||||||
geninterface(${PROJECT_SOURCE_DIR}/plugins/notifications/notificationsplugin.h devicenotificationsinterface)
|
geninterface(${PROJECT_SOURCE_DIR}/plugins/notifications/notificationsplugin.h devicenotificationsinterface)
|
||||||
geninterface(${PROJECT_SOURCE_DIR}/plugins/findmyphone/findmyphoneplugin.h devicefindmyphoneinterface)
|
geninterface(${PROJECT_SOURCE_DIR}/plugins/findmyphone/findmyphoneplugin.h devicefindmyphoneinterface)
|
||||||
|
|
|
@ -66,6 +66,14 @@ BatteryDbusInterface::BatteryDbusInterface(const QString& id, QObject* parent)
|
||||||
|
|
||||||
BatteryDbusInterface::~BatteryDbusInterface() = default;
|
BatteryDbusInterface::~BatteryDbusInterface() = default;
|
||||||
|
|
||||||
|
ConnectivityReportDbusInterface::ConnectivityReportDbusInterface(const QString& id, QObject* parent)
|
||||||
|
: OrgKdeKdeconnectDeviceConnectivity_reportInterface(DaemonDbusInterface::activatedService(), QStringLiteral("/modules/kdeconnect/devices/") + id + QStringLiteral("/connectivity_report"), DBusHelper::sessionBus(), parent)
|
||||||
|
{
|
||||||
|
connect(this, &OrgKdeKdeconnectDeviceConnectivity_reportInterface::refreshed, this, &ConnectivityReportDbusInterface::refreshedProxy);
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectivityReportDbusInterface::~ConnectivityReportDbusInterface() = default;
|
||||||
|
|
||||||
DeviceNotificationsDbusInterface::DeviceNotificationsDbusInterface(const QString& id, QObject* parent)
|
DeviceNotificationsDbusInterface::DeviceNotificationsDbusInterface(const QString& id, QObject* parent)
|
||||||
: OrgKdeKdeconnectDeviceNotificationsInterface(DaemonDbusInterface::activatedService(), QStringLiteral("/modules/kdeconnect/devices/") + id + QStringLiteral("/notifications"), DBusHelper::sessionBus(), parent)
|
: OrgKdeKdeconnectDeviceNotificationsInterface(DaemonDbusInterface::activatedService(), QStringLiteral("/modules/kdeconnect/devices/") + id + QStringLiteral("/notifications"), DBusHelper::sessionBus(), parent)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "daemoninterface.h"
|
#include "daemoninterface.h"
|
||||||
#include "deviceinterface.h"
|
#include "deviceinterface.h"
|
||||||
#include "batteryinterface.h"
|
#include "batteryinterface.h"
|
||||||
|
#include "connectivityinterface.h"
|
||||||
#include "devicesftpinterface.h"
|
#include "devicesftpinterface.h"
|
||||||
#include "devicefindmyphoneinterface.h"
|
#include "devicefindmyphoneinterface.h"
|
||||||
#include "devicenotificationsinterface.h"
|
#include "devicenotificationsinterface.h"
|
||||||
|
@ -91,6 +92,20 @@ Q_SIGNALS:
|
||||||
void refreshedProxy(bool isCharging, int charge);
|
void refreshedProxy(bool isCharging, int charge);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class KDECONNECTINTERFACES_EXPORT ConnectivityReportDbusInterface
|
||||||
|
: public OrgKdeKdeconnectDeviceConnectivity_reportInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString cellularNetworkType READ cellularNetworkType NOTIFY refreshedProxy)
|
||||||
|
Q_PROPERTY(int cellularNetworkStrength READ cellularNetworkStrength NOTIFY refreshedProxy)
|
||||||
|
public:
|
||||||
|
explicit ConnectivityReportDbusInterface(const QString& deviceId, QObject* parent = nullptr);
|
||||||
|
~ConnectivityReportDbusInterface() override;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void refreshedProxy(QString cellularNetworkType, int cellularNetworkStrength);
|
||||||
|
};
|
||||||
|
|
||||||
class KDECONNECTINTERFACES_EXPORT DeviceNotificationsDbusInterface
|
class KDECONNECTINTERFACES_EXPORT DeviceNotificationsDbusInterface
|
||||||
: public OrgKdeKdeconnectDeviceNotificationsInterface
|
: public OrgKdeKdeconnectDeviceNotificationsInterface
|
||||||
{
|
{
|
||||||
|
|
43
plasmoid/package/contents/ui/Connectivity.qml
Normal file
43
plasmoid/package/contents/ui/Connectivity.qml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/**
|
||||||
|
* SPDX-FileCopyrightText: 2021 David Shlemayev <david.shlemayev@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
|
*/
|
||||||
|
|
||||||
|
import QtQuick 2.1
|
||||||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||||
|
import org.kde.kdeconnect 1.0
|
||||||
|
|
||||||
|
QtObject {
|
||||||
|
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property alias device: checker.device
|
||||||
|
readonly property alias available: checker.available
|
||||||
|
readonly property bool ready: connectivity && connectivity.cellularNetworkType != "Unknown" && connectivity.cellularNetworkStrength > -1
|
||||||
|
|
||||||
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
|
id: checker
|
||||||
|
pluginName: "connectivity_report"
|
||||||
|
}
|
||||||
|
|
||||||
|
property string networkType: connectivity ? connectivity.cellularNetworkType : i18n("Unknown")
|
||||||
|
property int signalStrength: connectivity ? connectivity.cellularNetworkStrength : -1
|
||||||
|
property string displayString: {
|
||||||
|
if (ready) {
|
||||||
|
return `${networkType} ${signalStrength}/4`;
|
||||||
|
} else {
|
||||||
|
return i18n("No signal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
property variant connectivity: null
|
||||||
|
|
||||||
|
onAvailableChanged: {
|
||||||
|
if (available) {
|
||||||
|
connectivity = DeviceConnectivityReportDbusInterfaceFactory.create(device.id())
|
||||||
|
} else {
|
||||||
|
connectivity = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -64,10 +64,31 @@ PlasmaComponents.ListItem
|
||||||
device: root.device
|
device: root.device
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connectivity {
|
||||||
|
id: connectivity
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
PlasmaComponents.Label {
|
||||||
id: deviceName
|
id: deviceName
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
text: (battery.available && battery.charge > -1) ? i18n("%1 (%2)", display, battery.displayString) : display
|
text: {
|
||||||
|
let statuses = [];
|
||||||
|
|
||||||
|
if (connectivity.available) {
|
||||||
|
statuses.push(connectivity.displayString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (battery.available && battery.charge > -1) {
|
||||||
|
statuses.push(i18nc("Display the battery charge percentage with the label \"Battery:\" so the user knows what is being displayed", "Battery: %1", battery.displayString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (statuses.length > 0) {
|
||||||
|
return i18n("%1 (%2)", display, statuses.join(", "));
|
||||||
|
} else {
|
||||||
|
return display;
|
||||||
|
}
|
||||||
|
}
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
textFormat: Text.PlainText
|
textFormat: Text.PlainText
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ add_definitions(-DTRANSLATION_DOMAIN=\"kdeconnect-plugins\")
|
||||||
|
|
||||||
add_subdirectory(ping)
|
add_subdirectory(ping)
|
||||||
add_subdirectory(battery)
|
add_subdirectory(battery)
|
||||||
|
add_subdirectory(connectivity-report)
|
||||||
add_subdirectory(remotecommands)
|
add_subdirectory(remotecommands)
|
||||||
add_subdirectory(remotecontrol)
|
add_subdirectory(remotecontrol)
|
||||||
add_subdirectory(remotesystemvolume)
|
add_subdirectory(remotesystemvolume)
|
||||||
|
|
20
plugins/connectivity-report/CMakeLists.txt
Normal file
20
plugins/connectivity-report/CMakeLists.txt
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
set(debug_file_SRCS)
|
||||||
|
ecm_qt_declare_logging_category(
|
||||||
|
debug_file_SRCS HEADER plugin_connectivity_report_debug.h
|
||||||
|
IDENTIFIER KDECONNECT_PLUGIN_CONNECTIVITY_REPORT CATEGORY_NAME kdeconnect.plugin.connectivity_report
|
||||||
|
DEFAULT_SEVERITY Warning
|
||||||
|
EXPORT kdeconnect-kde DESCRIPTION "kdeconnect (plugin connectivity_report)")
|
||||||
|
|
||||||
|
set(kdeconnect_connectivity_report_SRCS
|
||||||
|
connectivity_reportplugin.cpp
|
||||||
|
${debug_file_SRCS}
|
||||||
|
)
|
||||||
|
|
||||||
|
kdeconnect_add_plugin(kdeconnect_connectivity_report JSON kdeconnect_connectivity_report.json SOURCES ${kdeconnect_connectivity_report_SRCS})
|
||||||
|
|
||||||
|
target_link_libraries(kdeconnect_connectivity_report
|
||||||
|
kdeconnectcore
|
||||||
|
Qt5::DBus
|
||||||
|
KF5::Solid
|
||||||
|
KF5::I18n
|
||||||
|
)
|
11
plugins/connectivity-report/README
Normal file
11
plugins/connectivity-report/README
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
This plugins receives packages with type "kdeconnect.connectivity_report" and reads the
|
||||||
|
following fields:
|
||||||
|
|
||||||
|
signalStrengths (object<string, object>): Maps each SIM (subscription ID) to the following object:
|
||||||
|
networkType (string):
|
||||||
|
One of "5G", "LTE", "CDMA", "EDGE", "GPRS", "GSM", "HSPA", "UMTS", "CDMA2000", "iDEN", "Unknown"
|
||||||
|
signalStrength (int) [0..=4]: The signal strength
|
||||||
|
|
||||||
|
It also sends empty packages with type kdeconnect.connectivity_report.request
|
||||||
|
to ask the peer device to send a package like the mentioned above.
|
60
plugins/connectivity-report/connectivity_reportplugin.cpp
Normal file
60
plugins/connectivity-report/connectivity_reportplugin.cpp
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
/**
|
||||||
|
* SPDX-FileCopyrightText: 2021 David Shlemayev <david.shlemayev@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "connectivity_reportplugin.h"
|
||||||
|
|
||||||
|
#include <KLocalizedString>
|
||||||
|
#include <KPluginFactory>
|
||||||
|
|
||||||
|
#include <core/daemon.h>
|
||||||
|
|
||||||
|
#include "plugin_connectivity_report_debug.h"
|
||||||
|
|
||||||
|
K_PLUGIN_CLASS_WITH_JSON(ConnectivityReportPlugin, "kdeconnect_connectivity_report.json")
|
||||||
|
|
||||||
|
ConnectivityReportPlugin::ConnectivityReportPlugin(QObject* parent, const QVariantList& args)
|
||||||
|
: KdeConnectPlugin(parent, args)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ConnectivityReportPlugin::cellularNetworkType() const
|
||||||
|
{
|
||||||
|
return m_cellularNetworkType;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ConnectivityReportPlugin::cellularNetworkStrength() const
|
||||||
|
{
|
||||||
|
return m_cellularNetworkStrength;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConnectivityReportPlugin::connected()
|
||||||
|
{
|
||||||
|
// We've just connected. Request connectivity_report information from the remote device...
|
||||||
|
NetworkPacket np(PACKET_TYPE_CONNECTIVITY_REPORT_REQUEST, {{QStringLiteral("request"),true}});
|
||||||
|
sendPacket(np);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ConnectivityReportPlugin::receivePacket(const NetworkPacket& np)
|
||||||
|
{
|
||||||
|
if (np.type() == PACKET_TYPE_CONNECTIVITY_REPORT) {
|
||||||
|
auto subscriptions = np.get<QVariantMap>(QStringLiteral("signalStrengths"), QVariantMap());
|
||||||
|
auto networkInfo = subscriptions.first().toMap();
|
||||||
|
|
||||||
|
m_cellularNetworkType = networkInfo.value(QStringLiteral("networkType")).toString();
|
||||||
|
m_cellularNetworkStrength = networkInfo.value(QStringLiteral("signalStrength")).toInt();
|
||||||
|
|
||||||
|
Q_EMIT refreshed(m_cellularNetworkType, m_cellularNetworkStrength);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ConnectivityReportPlugin::dbusPath() const
|
||||||
|
{
|
||||||
|
return QStringLiteral("/modules/kdeconnect/devices/") + device()->id() + QStringLiteral("/connectivity_report");
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "connectivity_reportplugin.moc"
|
68
plugins/connectivity-report/connectivity_reportplugin.h
Normal file
68
plugins/connectivity-report/connectivity_reportplugin.h
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/**
|
||||||
|
* SPDX-FileCopyrightText: 2021 David Shlemayev <david.shlemayev@gmail.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONNECTIVITY_REPORT_H
|
||||||
|
#define CONNECTIVITY_REPORT_H
|
||||||
|
|
||||||
|
#include <core/kdeconnectplugin.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet used to report the current connectivity state
|
||||||
|
* <p>
|
||||||
|
* The body should contain a key "signalStrengths" which has a dict that maps
|
||||||
|
* a SubscriptionID (opaque value) to a dict with the connection info (See below)
|
||||||
|
* <p>
|
||||||
|
* For example:
|
||||||
|
* {
|
||||||
|
* "signalStrengths": {
|
||||||
|
* "6": {
|
||||||
|
* "networkType": "4G",
|
||||||
|
* "signalStrength": 3
|
||||||
|
* },
|
||||||
|
* "17": {
|
||||||
|
* "networkType": "HSPA",
|
||||||
|
* "signalStrength": 2
|
||||||
|
* },
|
||||||
|
* ...
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
#define PACKET_TYPE_CONNECTIVITY_REPORT QStringLiteral("kdeconnect.connectivity_report")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Packet sent to request the current connectivity state
|
||||||
|
* <p>
|
||||||
|
* The request packet shall contain no body
|
||||||
|
*/
|
||||||
|
#define PACKET_TYPE_CONNECTIVITY_REPORT_REQUEST QStringLiteral("kdeconnect.connectivity_report.request")
|
||||||
|
|
||||||
|
class ConnectivityReportPlugin
|
||||||
|
: public KdeConnectPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.device.connectivity_report")
|
||||||
|
Q_PROPERTY(QString cellularNetworkType READ cellularNetworkType NOTIFY refreshed)
|
||||||
|
Q_PROPERTY(int cellularNetworkStrength READ cellularNetworkStrength NOTIFY refreshed)
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ConnectivityReportPlugin(QObject* parent, const QVariantList& args);
|
||||||
|
|
||||||
|
bool receivePacket(const NetworkPacket& np) override;
|
||||||
|
void connected() override;
|
||||||
|
QString dbusPath() const override;
|
||||||
|
|
||||||
|
QString cellularNetworkType() const;
|
||||||
|
int cellularNetworkStrength() const;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
Q_SCRIPTABLE void refreshed(QString cellularNetworkType, int cellularNetworkStrength);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_cellularNetworkType;
|
||||||
|
int m_cellularNetworkStrength = -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"KPlugin": {
|
||||||
|
"Authors": [
|
||||||
|
{
|
||||||
|
"Email": "david.shlemayev@gmail.com",
|
||||||
|
"Name": "David Shlemayev"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Description": "Show your phone's network signal strength",
|
||||||
|
"EnabledByDefault": true,
|
||||||
|
"Icon": "network-wireless",
|
||||||
|
"Id": "kdeconnect_connectivity_report",
|
||||||
|
"License": "GPL",
|
||||||
|
"Name": "Connectivity monitor",
|
||||||
|
"ServiceTypes": [
|
||||||
|
"KdeConnect/Plugin"
|
||||||
|
],
|
||||||
|
"Version": "1.0"
|
||||||
|
},
|
||||||
|
"X-KdeConnect-OutgoingPacketType": [
|
||||||
|
"kdeconnect.connectivity_report.request"
|
||||||
|
],
|
||||||
|
"X-KdeConnect-SupportedPacketType": [
|
||||||
|
"kdeconnect.connectivity_report"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in a new issue