Revert changes to QML incompatible with Qt 6.6 and older
- Revert "plasmoid: Port to pragma ComponentBehavior: Bound" This reverts commit9ee0b23727
. - Revert "plasmoid: Flatten plugin controllers, menu and other non-graphical components" This reverts commitd2ee2bfdd8
. - Revert "plasmoid: Basic code cleanup" This reverts commit90946829bf
.
This commit is contained in:
parent
622708aa63
commit
f3fa818cbf
17 changed files with 444 additions and 583 deletions
|
@ -71,19 +71,6 @@ void KdeConnectDeclarativePlugin::registerTypes(const char *uri)
|
||||||
"RemoteKeyboardDbusInterface",
|
"RemoteKeyboardDbusInterface",
|
||||||
QStringLiteral("You're not supposed to instantiate interfaces"));
|
QStringLiteral("You're not supposed to instantiate interfaces"));
|
||||||
qmlRegisterUncreatableType<DeviceDbusInterface>(uri, 1, 0, "DeviceDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces"));
|
qmlRegisterUncreatableType<DeviceDbusInterface>(uri, 1, 0, "DeviceDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces"));
|
||||||
qmlRegisterUncreatableType<BatteryDbusInterface>(uri, 1, 0, "BatteryDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces"));
|
|
||||||
qmlRegisterUncreatableType<ConnectivityReportDbusInterface>(uri,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
"ConnectivityReportDbusInterface",
|
|
||||||
QStringLiteral("You're not supposed to instantiate interfaces"));
|
|
||||||
qmlRegisterUncreatableType<SftpDbusInterface>(uri, 1, 0, "SftpDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces"));
|
|
||||||
qmlRegisterUncreatableType<SmsDbusInterface>(uri, 1, 0, "SmsDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces"));
|
|
||||||
qmlRegisterUncreatableType<VirtualmonitorDbusInterface>(uri,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
"VirtualmonitorDbusInterface",
|
|
||||||
QStringLiteral("You're not supposed to instantiate interfaces"));
|
|
||||||
qmlRegisterUncreatableType<RemoteCommandsDbusInterface>(uri,
|
qmlRegisterUncreatableType<RemoteCommandsDbusInterface>(uri,
|
||||||
1,
|
1,
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -1,43 +1,36 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2016 Aleix Pol Gonzalez <aleixpol@kde.org>
|
* SPDX-FileCopyrightText: 2016 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
import QtQml 2.2
|
||||||
|
import org.kde.kdeconnect 1.0
|
||||||
import QtQml
|
|
||||||
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
id: prop
|
id: prop
|
||||||
|
property QtObject object: null
|
||||||
property QtObject object
|
|
||||||
property string read
|
property string read
|
||||||
property string change: read+"Changed"
|
property string change: read+"Changed"
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: get();
|
||||||
get();
|
|
||||||
}
|
|
||||||
|
|
||||||
onChangeChanged: {
|
onChangeChanged: {
|
||||||
if (object) {
|
if (object) {
|
||||||
const signal = object[change];
|
var theSignal = object[change];
|
||||||
if (signal) {
|
if (theSignal) {
|
||||||
signal.connect(valueReceived);
|
theSignal.connect(valueReceived);
|
||||||
} else {
|
} else {
|
||||||
console.warn(`couldn't find signal ${change} for ${object}`);
|
console.warn("couldn't find signal", change, "for", object)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function valueReceived(value: var): void {
|
function valueReceived(val) {
|
||||||
if (!value) {
|
if (!val) {
|
||||||
get();
|
get();
|
||||||
} else {
|
} else {
|
||||||
_value = value;
|
_value = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,26 +38,18 @@ QtObject {
|
||||||
property var _value: defaultValue
|
property var _value: defaultValue
|
||||||
readonly property var value: _value
|
readonly property var value: _value
|
||||||
|
|
||||||
readonly property KDEConnect.DBusAsyncResponse __response: KDEConnect.DBusAsyncResponse {
|
readonly property var v: DBusAsyncResponse {
|
||||||
id: response
|
id: response
|
||||||
|
|
||||||
autoDelete: false
|
autoDelete: false
|
||||||
|
|
||||||
onSuccess: result => {
|
onSuccess: result => {
|
||||||
prop._value = result;
|
prop._value = result;
|
||||||
}
|
}
|
||||||
|
|
||||||
onError: message => {
|
onError: message => {
|
||||||
console.warn("failed call", prop.object, prop.read, prop.change, message);
|
console.warn("failed call", prop.object, prop.read, prop.change, message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function get(): void {
|
function get() {
|
||||||
if (object) {
|
response.setPendingCall(object[read]());
|
||||||
const method = object[read];
|
|
||||||
if (method) {
|
|
||||||
response.setPendingCall(method());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,71 +1,47 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2016 David Kahles <david.kahles96@gmail.com>
|
* SPDX-FileCopyrightText: 2016 David Kahles <david.kahles96@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
import QtQml 2.2
|
||||||
|
import org.kde.kdeconnect 1.0
|
||||||
import QtQml
|
|
||||||
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property KDEConnect.DeviceDbusInterface device
|
property alias device: conn.target
|
||||||
property string pluginName
|
property string pluginName: ""
|
||||||
property bool available
|
property bool available: false
|
||||||
property string iconName
|
property string iconName: ""
|
||||||
|
|
||||||
readonly property Connections connection: Connections {
|
readonly property Connections connection: Connections {
|
||||||
id: conn
|
id: conn
|
||||||
|
function onPluginsChanged() {
|
||||||
target: root.device
|
|
||||||
|
|
||||||
function onPluginsChanged(): void {
|
|
||||||
root.pluginsChanged();
|
root.pluginsChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: pluginsChanged()
|
||||||
pluginsChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
readonly property KDEConnect.DBusAsyncResponse __availableResponse: KDEConnect.DBusAsyncResponse {
|
readonly property var v: DBusAsyncResponse {
|
||||||
id: availableResponse
|
id: availableResponse
|
||||||
|
|
||||||
autoDelete: false
|
autoDelete: false
|
||||||
|
onSuccess: (result) => { root.available = result; }
|
||||||
onSuccess: result => {
|
onError: () => { root.available = false }
|
||||||
root.available = result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onError: message => {
|
function pluginsChanged() {
|
||||||
root.available = false;
|
availableResponse.setPendingCall(device.hasPlugin("kdeconnect_" + pluginName))
|
||||||
}
|
iconResponse.setPendingCall(device.pluginIconName("kdeconnect_" + pluginName))
|
||||||
}
|
}
|
||||||
|
|
||||||
function pluginsChanged(): void {
|
readonly property var vv: DBusAsyncResponse {
|
||||||
if (device) {
|
|
||||||
availableResponse.setPendingCall(device.hasPlugin("kdeconnect_" + pluginName));
|
|
||||||
iconResponse.setPendingCall(device.pluginIconName("kdeconnect_" + pluginName));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
readonly property KDEConnect.DBusAsyncResponse __iconResponse: KDEConnect.DBusAsyncResponse {
|
|
||||||
id: iconResponse
|
id: iconResponse
|
||||||
|
|
||||||
autoDelete: false
|
autoDelete: false
|
||||||
|
onSuccess: (result) => { root.iconName = result; }
|
||||||
onSuccess: result => {
|
onError: () => { root.iconName = "" }
|
||||||
root.iconName = result;
|
|
||||||
}
|
|
||||||
|
|
||||||
onError: message => {
|
|
||||||
root.iconName = "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,77 +1,70 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2017 Holger Kaelberer <holger.k@elberer.de>
|
* SPDX-FileCopyrightText: 2017 Holger Kaelberer <holger.k@elberer.de>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
import QtQuick 2.1
|
||||||
|
import org.kde.kdeconnect 1.0
|
||||||
|
import QtQuick.Controls 2.4
|
||||||
|
|
||||||
import QtQuick
|
TextField {
|
||||||
import QtQuick.Controls as QQC2
|
|
||||||
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
|
||||||
|
|
||||||
QQC2.TextField {
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "remotekeyboard"
|
pluginName: "remotekeyboard"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property KDEConnect.RemoteKeyboardDbusInterface remoteKeyboard
|
property var remoteKeyboard: null
|
||||||
|
|
||||||
readonly property bool remoteState: available && remoteKeyboard ? remoteKeyboard.remoteState : false
|
readonly property bool remoteState: available ? remoteKeyboard.remoteState : false
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: root.remoteKeyboard
|
target: remoteKeyboard
|
||||||
|
function onKeyPressReceived() {
|
||||||
function onKeyPressReceived(key: string, specialKey: int, shift: bool, ctrl: bool, alt: bool): void {
|
|
||||||
//console.log("XXX received keypress key=" + key + " special=" + specialKey + " shift=" + shift + " ctrl=" + ctrl + " text=" + text + " cursorPos=" + cursorPosition);
|
//console.log("XXX received keypress key=" + key + " special=" + specialKey + " shift=" + shift + " ctrl=" + ctrl + " text=" + text + " cursorPos=" + cursorPosition);
|
||||||
// interpret some special keys:
|
// interpret some special keys:
|
||||||
if (specialKey === 12 || specialKey === 14) { // Return/Esc -> clear
|
if (specialKey == 12 || specialKey == 14) // Return/Esc -> clear
|
||||||
text = "";
|
text = "";
|
||||||
} else if (specialKey === 4 // Left
|
else if (specialKey == 4 // Left
|
||||||
&& cursorPosition > 0) {
|
&& cursorPosition > 0)
|
||||||
--cursorPosition;
|
--cursorPosition;
|
||||||
} else if (specialKey === 6 // Right
|
else if (specialKey == 6 // Right
|
||||||
&& cursorPosition < text.length) {
|
&& cursorPosition < text.length)
|
||||||
++cursorPosition;
|
++cursorPosition;
|
||||||
} else if (specialKey === 1) { // Backspace -> delete left
|
else if (specialKey == 1) { // Backspace -> delete left
|
||||||
const pos = cursorPosition;
|
var pos = cursorPosition;
|
||||||
if (pos > 0) {
|
if (pos > 0) {
|
||||||
text = text.substring(0, pos-1)
|
text = text.substring(0, pos-1)
|
||||||
+ text.substring(pos, text.length);
|
+ text.substring(pos, text.length);
|
||||||
cursorPosition = pos - 1;
|
cursorPosition = pos - 1;
|
||||||
}
|
}
|
||||||
} else if (specialKey === 13) { // Delete -> delete right
|
} else if (specialKey == 13) { // Delete -> delete right
|
||||||
const pos = cursorPosition;
|
var pos = cursorPosition;
|
||||||
if (pos < text.length) {
|
if (pos < text.length) {
|
||||||
text = text.substring(0, pos)
|
text = text.substring(0, pos)
|
||||||
+ text.substring(pos+1, text.length);
|
+ text.substring(pos+1, text.length);
|
||||||
cursorPosition = pos; // seems to be set to text.length automatically!
|
cursorPosition = pos; // seems to be set to text.length automatically!
|
||||||
}
|
}
|
||||||
} else if (specialKey === 10) { // Home
|
} else if (specialKey == 10) // Home
|
||||||
cursorPosition = 0;
|
cursorPosition = 0;
|
||||||
} else if (specialKey == 11) { // End
|
else if (specialKey == 11) // End
|
||||||
cursorPosition = text.length;
|
cursorPosition = text.length;
|
||||||
} else {
|
else {
|
||||||
// echo visible keys
|
// echo visible keys
|
||||||
let sanitized = "";
|
var sanitized = "";
|
||||||
for (let i = 0; i < key.length; i++) {
|
for (var i = 0; i < key.length; i++) {
|
||||||
if (key.charCodeAt(i) > 31) {
|
if (key.charCodeAt(i) > 31)
|
||||||
sanitized += key.charAt(i);
|
sanitized += key.charAt(i);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (sanitized.length > 0 && !ctrl && !alt) {
|
if (sanitized.length > 0 && !ctrl && !alt) {
|
||||||
// insert sanitized at current pos:
|
// insert sanitized at current pos:
|
||||||
const pos = cursorPosition;
|
var pos = cursorPosition;
|
||||||
text = text.substring(0, pos)
|
text = text.substring(0, pos)
|
||||||
+ sanitized
|
+ sanitized
|
||||||
+ text.substring(pos, text.length);
|
+ text.substring(pos, text.length);
|
||||||
|
@ -82,27 +75,28 @@ QQC2.TextField {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendEvent(event: KeyEvent): void {
|
|
||||||
|
function sendEvent(event) {
|
||||||
if (remoteKeyboard) {
|
if (remoteKeyboard) {
|
||||||
const transEvent = JSON.parse(JSON.stringify(event)); // transform to anonymous object
|
var transEvent = JSON.parse(JSON.stringify(event)); // transform to anonymous object
|
||||||
remoteKeyboard.sendQKeyEvent(transEvent);
|
remoteKeyboard.sendQKeyEvent(transEvent);
|
||||||
event.accepted = true
|
event.accepted = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Keys.onPressed: event => {
|
Keys.onPressed: {
|
||||||
if (available) {
|
if (available)
|
||||||
sendEvent(event);
|
sendEvent(event);
|
||||||
}
|
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
onAvailableChanged: {
|
onAvailableChanged: {
|
||||||
if (available && device !== null) {
|
if (available) {
|
||||||
remoteKeyboard = KDEConnect.RemoteKeyboardDbusInterfaceFactory.create(device.id());
|
remoteKeyboard = RemoteKeyboardDbusInterfaceFactory.create(device.id());
|
||||||
|
//remoteKeyboard.keyPressReceived.connect(keyPressReceived);
|
||||||
remoteKeyboard.remoteStateChanged.connect(remoteStateChanged);
|
remoteKeyboard.remoteStateChanged.connect(remoteStateChanged);
|
||||||
} else {
|
} else {
|
||||||
remoteKeyboard = null;
|
remoteKeyboard = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,80 +1,62 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "battery"
|
pluginName: "battery"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly property bool charging: battery?.isCharging ?? false
|
property bool charging: battery ? battery.isCharging : false
|
||||||
readonly property int charge: battery?.charge ?? -1
|
property int charge: battery ? battery.charge : -1
|
||||||
|
property string displayString: (available && charge > -1) ? ((charging) ? (i18n("%1% charging", charge)) : (i18n("%1%", charge))) : i18n("No info")
|
||||||
readonly property string displayString: {
|
property variant battery: null
|
||||||
if (available && charge > -1) {
|
|
||||||
if (charging) {
|
|
||||||
return i18n("%1% charging", charge);
|
|
||||||
} else {
|
|
||||||
return i18n("%1%", charge);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return i18n("No info");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
property KDEConnect.BatteryDbusInterface battery
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Suggests an icon name to use for the current battery level
|
* Suggests an icon name to use for the current battery level
|
||||||
*/
|
*/
|
||||||
readonly property string iconName: {
|
readonly property string iconName: {
|
||||||
if (charge < 0) {
|
charge < 0 ?
|
||||||
return "battery-missing-symbolic";
|
"battery-missing-symbolic" :
|
||||||
} else if (charge < 10) {
|
charge < 10 ?
|
||||||
return charging
|
charging ?
|
||||||
? "battery-empty-charging-symbolic"
|
"battery-empty-charging-symbolic" :
|
||||||
: "battery-empty-symbolic";
|
"battery-empty-symbolic" :
|
||||||
} else if (charge < 25) {
|
charge < 25 ?
|
||||||
return charging
|
charging ?
|
||||||
? "battery-caution-charging-symbolic"
|
"battery-caution-charging-symbolic" :
|
||||||
: "battery-caution-symbolic";
|
"battery-caution-symbolic" :
|
||||||
} else if (charge < 50) {
|
charge < 50 ?
|
||||||
return charging
|
charging ?
|
||||||
? "battery-low-charging-symbolic"
|
"battery-low-charging-symbolic" :
|
||||||
: "battery-low-symbolic";
|
"battery-low-symbolic" :
|
||||||
} else if (charge < 75) {
|
charge < 75 ?
|
||||||
return charging
|
charging ?
|
||||||
? "battery-good-charging-symbolic"
|
"battery-good-charging-symbolic" :
|
||||||
: "battery-good-symbolic";
|
"battery-good-symbolic" :
|
||||||
} else {
|
charging ?
|
||||||
return charging
|
"battery-full-charging-symbolic":
|
||||||
? "battery-full-charging-symbolic"
|
"battery-full-symbolic"
|
||||||
: "battery-full-symbolic";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onAvailableChanged: {
|
onAvailableChanged: {
|
||||||
if (available) {
|
if (available) {
|
||||||
battery = KDEConnect.DeviceBatteryDbusInterfaceFactory.create(device.id());
|
battery = DeviceBatteryDbusInterfaceFactory.create(device.id())
|
||||||
} else {
|
} else {
|
||||||
battery = null;
|
battery = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,32 +1,28 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2021 Yaman Qalieh <ybq987@gmail.com>
|
* SPDX-FileCopyrightText: 2021 Yaman Qalieh <ybq987@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "clipboard"
|
pluginName: "clipboard"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property KDEConnect.ClipboardDbusInterface clipboard
|
property variant clipboard: null
|
||||||
|
|
||||||
function sendClipboard(): void {
|
function sendClipboard() {
|
||||||
if (clipboard) {
|
if (clipboard) {
|
||||||
clipboard.sendClipboard();
|
clipboard.sendClipboard();
|
||||||
}
|
}
|
||||||
|
@ -34,9 +30,9 @@ QtObject {
|
||||||
|
|
||||||
onAvailableChanged: {
|
onAvailableChanged: {
|
||||||
if (available) {
|
if (available) {
|
||||||
clipboard = KDEConnect.ClipboardDbusInterfaceFactory.create(device.id());
|
clipboard = ClipboardDbusInterfaceFactory.create(device.id())
|
||||||
} else {
|
} else {
|
||||||
clipboard = null;
|
clipboard = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,44 +1,32 @@
|
||||||
/**
|
/*
|
||||||
* SPDX-FileCopyrightText: 2014-2015 Frederic St-Pierre <me@fredericstpierre.com>
|
SPDX-FileCopyrightText: 2014-2015 Frederic St-Pierre <me@fredericstpierre.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
import org.kde.kirigami as Kirigami
|
import org.kde.kirigami as Kirigami
|
||||||
import org.kde.plasma.plasmoid
|
|
||||||
|
|
||||||
DropArea {
|
DropArea {
|
||||||
id: root
|
onEntered: {
|
||||||
|
|
||||||
required property PlasmoidItem plasmoidItem
|
|
||||||
|
|
||||||
onEntered: drag => {
|
|
||||||
if (drag.hasUrls) {
|
if (drag.hasUrls) {
|
||||||
root.plasmoidItem.expanded = true;
|
root.expanded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
|
id: kdeConnectMouseArea
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
property bool wasExpanded: false
|
onClicked: {
|
||||||
|
root.expanded = !root.expanded;
|
||||||
onPressed: mouse => {
|
|
||||||
wasExpanded = root.plasmoidItem.expanded;
|
|
||||||
}
|
|
||||||
|
|
||||||
onClicked: mouse => {
|
|
||||||
root.plasmoidItem.expanded = !root.plasmoidItem.expanded;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Kirigami.Icon {
|
Kirigami.Icon {
|
||||||
|
id: kdeConnectIcon
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
source: Plasmoid.icon
|
source: plasmoid.icon
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,24 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2021 David Shlemayev <david.shlemayev@gmail.com>
|
* SPDX-FileCopyrightText: 2021 David Shlemayev <david.shlemayev@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
readonly property bool ready: connectivity
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "connectivity_report"
|
pluginName: "connectivity_report"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,22 +37,20 @@ QtObject {
|
||||||
* The parsing from Android values into these strings is handled in the
|
* The parsing from Android values into these strings is handled in the
|
||||||
* [ConnectivityReportPlugin.networkTypeToString method](https://invent.kde.org/network/kdeconnect-android/-/blob/master/src/org/kde/kdeconnect/Plugins/ConnectivityReportPlugin/ConnectivityReportPlugin.java#L82)
|
* [ConnectivityReportPlugin.networkTypeToString method](https://invent.kde.org/network/kdeconnect-android/-/blob/master/src/org/kde/kdeconnect/Plugins/ConnectivityReportPlugin/ConnectivityReportPlugin.java#L82)
|
||||||
*/
|
*/
|
||||||
readonly property string networkType: connectivity?.cellularNetworkType ?? i18n("Unknown")
|
readonly property string networkType: connectivity ? connectivity.cellularNetworkType : i18n("Unknown")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports a value between 0 and 4 (inclusive) which represents the strength of the cellular connection
|
* Reports a value between 0 and 4 (inclusive) which represents the strength of the cellular connection
|
||||||
*/
|
*/
|
||||||
readonly property int signalStrength: connectivity?.cellularNetworkStrength ?? -1
|
readonly property int signalStrength: connectivity ? connectivity.cellularNetworkStrength : -1
|
||||||
|
property string displayString: {
|
||||||
readonly property string displayString: {
|
if (ready) {
|
||||||
if (connectivity !== null) {
|
|
||||||
return `${networkType} ${signalStrength}/4`;
|
return `${networkType} ${signalStrength}/4`;
|
||||||
} else {
|
} else {
|
||||||
return i18n("No signal");
|
return i18n("No signal");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
property variant connectivity: null
|
||||||
property KDEConnect.ConnectivityReportDbusInterface connectivity
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Suggests an icon name to use for the current signal level
|
* Suggests an icon name to use for the current signal level
|
||||||
|
@ -65,27 +60,27 @@ QtObject {
|
||||||
*/
|
*/
|
||||||
readonly property string iconName: {
|
readonly property string iconName: {
|
||||||
// Firstly, get the name prefix which represents the signal strength
|
// Firstly, get the name prefix which represents the signal strength
|
||||||
const signalStrengthIconName =
|
var signalStrengthIconName =
|
||||||
(signalStrength < 0 || connectivity === null) ?
|
(signalStrength < 0 || !ready) ?
|
||||||
// As long as the signal strength is nonsense or the plugin reports as non-ready,
|
// As long as the signal strength is nonsense or the plugin reports as non-ready,
|
||||||
// show us as disconnected
|
// show us as disconnected
|
||||||
"network-mobile-off" :
|
"network-mobile-off" :
|
||||||
(signalStrength === 0) ?
|
(signalStrength == 0) ?
|
||||||
"network-mobile-0" :
|
"network-mobile-0" :
|
||||||
(signalStrength === 1) ?
|
(signalStrength == 1) ?
|
||||||
"network-mobile-20" :
|
"network-mobile-20" :
|
||||||
(signalStrength === 2) ?
|
(signalStrength == 2) ?
|
||||||
"network-mobile-60" :
|
"network-mobile-60" :
|
||||||
(signalStrength === 3) ?
|
(signalStrength == 3) ?
|
||||||
"network-mobile-80" :
|
"network-mobile-80" :
|
||||||
(signalStrength === 4) ?
|
(signalStrength == 4) ?
|
||||||
"network-mobile-100" :
|
"network-mobile-100" :
|
||||||
// Since all possible values are enumerated above, this default case should never be hit.
|
// Since all possible values are enumerated above, this default case should never be hit.
|
||||||
// However, I need it in order for my ternary syntax to be valid!
|
// However, I need it in order for my ternary syntax to be valid!
|
||||||
"network-mobile-available";
|
"network-mobile-available"
|
||||||
|
|
||||||
// If we understand the network type, append to the icon name to show the type
|
// If we understand the network type, append to the icon name to show the type
|
||||||
const networkTypeSuffix =
|
var networkTypeSuffix =
|
||||||
(networkType === "5G") ?
|
(networkType === "5G") ?
|
||||||
// No icon for this case!
|
// No icon for this case!
|
||||||
"" :
|
"" :
|
||||||
|
@ -115,16 +110,15 @@ QtObject {
|
||||||
// GSconnect just uses the 2g icon
|
// GSconnect just uses the 2g icon
|
||||||
// No icon for this case!
|
// No icon for this case!
|
||||||
"" :
|
"" :
|
||||||
""; // We didn't recognize the network type. Don't append anything.
|
"" // We didn't recognize the network type. Don't append anything.
|
||||||
|
return signalStrengthIconName + networkTypeSuffix
|
||||||
return signalStrengthIconName + networkTypeSuffix;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onAvailableChanged: {
|
onAvailableChanged: {
|
||||||
if (available) {
|
if (available) {
|
||||||
connectivity = KDEConnect.DeviceConnectivityReportDbusInterfaceFactory.create(device.id());
|
connectivity = DeviceConnectivityReportDbusInterfaceFactory.create(device.id())
|
||||||
} else {
|
} else {
|
||||||
connectivity = null;
|
connectivity = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,79 +1,28 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
|
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtCore
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Dialogs as QtDialogs
|
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
|
||||||
import org.kde.kirigami as Kirigami
|
|
||||||
import org.kde.plasma.components as PlasmaComponents
|
|
||||||
import org.kde.plasma.core as PlasmaCore
|
import org.kde.plasma.core as PlasmaCore
|
||||||
|
import org.kde.plasma.components as PlasmaComponents
|
||||||
|
import org.kde.kdeconnect
|
||||||
|
import QtQuick.Controls
|
||||||
|
import org.kde.kirigami as Kirigami
|
||||||
import org.kde.plasma.extras as PlasmaExtras
|
import org.kde.plasma.extras as PlasmaExtras
|
||||||
|
import QtQuick.Dialogs
|
||||||
|
import QtCore
|
||||||
|
|
||||||
PlasmaComponents.ItemDelegate {
|
PlasmaComponents.ItemDelegate
|
||||||
|
{
|
||||||
id: root
|
id: root
|
||||||
|
readonly property QtObject device: DeviceDbusInterfaceFactory.create(model.deviceId)
|
||||||
required property int index
|
|
||||||
required property var model
|
|
||||||
|
|
||||||
readonly property KDEConnect.DeviceDbusInterface device: KDEConnect.DeviceDbusInterfaceFactory.create(model.deviceId)
|
|
||||||
|
|
||||||
hoverEnabled: false
|
hoverEnabled: false
|
||||||
down: false
|
down: false
|
||||||
|
|
||||||
Battery {
|
|
||||||
id: battery
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
Clipboard {
|
|
||||||
id: clipboard
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
Connectivity {
|
|
||||||
id: connectivity
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
FindMyPhone {
|
|
||||||
id: findmyphone
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
RemoteCommands {
|
|
||||||
id: remoteCommands
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
Sftp {
|
|
||||||
id: sftp
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
Share {
|
|
||||||
id: share
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
SMS {
|
|
||||||
id: sms
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
VirtualMonitor {
|
|
||||||
id: virtualmonitor
|
|
||||||
device: root.device
|
|
||||||
}
|
|
||||||
|
|
||||||
Kirigami.PromptDialog {
|
Kirigami.PromptDialog {
|
||||||
id: prompt
|
id: prompt
|
||||||
visible: false
|
visible: false
|
||||||
|
@ -82,83 +31,27 @@ PlasmaComponents.ItemDelegate {
|
||||||
title: i18n("Virtual Monitor is not available")
|
title: i18n("Virtual Monitor is not available")
|
||||||
}
|
}
|
||||||
|
|
||||||
QtDialogs.FileDialog {
|
|
||||||
id: fileDialog
|
|
||||||
title: i18n("Please choose a file")
|
|
||||||
currentFolder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
|
||||||
fileMode: QtDialogs.FileDialog.OpenFiles
|
|
||||||
onAccepted: {
|
|
||||||
selectedFiles.forEach(url => share.plugin.shareUrl(url));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaExtras.Menu {
|
|
||||||
id: menu
|
|
||||||
|
|
||||||
visualParent: overflowMenu
|
|
||||||
placement: PlasmaExtras.Menu.BottomPosedLeftAlignedPopup
|
|
||||||
|
|
||||||
// Share
|
|
||||||
PlasmaExtras.MenuItem {
|
|
||||||
icon: "document-share"
|
|
||||||
visible: share.available
|
|
||||||
text: i18n("Share file")
|
|
||||||
onClicked: fileDialog.open()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clipboard
|
|
||||||
PlasmaExtras.MenuItem {
|
|
||||||
icon: "klipper"
|
|
||||||
visible: clipboard.clipboard?.isAutoShareDisabled ?? false
|
|
||||||
text: i18n("Send Clipboard")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
clipboard.sendClipboard()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find my phone
|
|
||||||
PlasmaExtras.MenuItem {
|
|
||||||
icon: "irc-voice"
|
|
||||||
visible: findmyphone.available
|
|
||||||
text: i18n("Ring my phone")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
findmyphone.ring()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SFTP
|
|
||||||
PlasmaExtras.MenuItem {
|
|
||||||
icon: "document-open-folder"
|
|
||||||
visible: sftp.available
|
|
||||||
text: i18n("Browse this device")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
sftp.browse()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SMS
|
|
||||||
PlasmaExtras.MenuItem {
|
|
||||||
icon: "message-new"
|
|
||||||
visible: sms.available
|
|
||||||
text: i18n("SMS Messages")
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
sms.plugin.launchApp()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DropArea {
|
DropArea {
|
||||||
id: fileDropArea
|
id: fileDropArea
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
onDropped: drop => {
|
onDropped: {
|
||||||
if (drop.hasUrls) {
|
if (drop.hasUrls) {
|
||||||
const urls = new Set(drop.urls.map(url => url.toString()));
|
|
||||||
urls.forEach(url => share.plugin.shareUrl(url));
|
var urls = [];
|
||||||
|
|
||||||
|
for (var v in drop.urls) {
|
||||||
|
if (drop.urls[v] != null) {
|
||||||
|
if (urls.indexOf(drop.urls[v].toString()) == -1) {
|
||||||
|
urls.push(drop.urls[v].toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < urls.length; i++) {
|
||||||
|
share.plugin.shareUrl(urls[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
drop.accepted = true;
|
drop.accepted = true;
|
||||||
}
|
}
|
||||||
|
@ -175,14 +68,30 @@ PlasmaComponents.ItemDelegate {
|
||||||
contentItem: ColumnLayout {
|
contentItem: ColumnLayout {
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
RowLayout {
|
RowLayout
|
||||||
|
{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
|
Battery {
|
||||||
|
id: battery
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
|
Connectivity {
|
||||||
|
id: connectivity
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualMonitor {
|
||||||
|
id: virtualmonitor
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
PlasmaComponents.Label {
|
||||||
id: deviceName
|
id: deviceName
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
text: root.model.name
|
text: model.name
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
textFormat: Text.PlainText
|
textFormat: Text.PlainText
|
||||||
}
|
}
|
||||||
|
@ -210,10 +119,9 @@ PlasmaComponents.ItemDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RowLayout
|
||||||
RowLayout {
|
{
|
||||||
id: connectionInformation
|
id: connectionInformation
|
||||||
|
|
||||||
visible: connectivity.available
|
visible: connectivity.available
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
|
@ -239,10 +147,10 @@ PlasmaComponents.ItemDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout
|
||||||
|
{
|
||||||
id: batteryInformation
|
id: batteryInformation
|
||||||
|
visible: (battery.available && battery.charge > -1)
|
||||||
visible: battery.available && battery.charge > -1
|
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
Kirigami.Icon {
|
Kirigami.Icon {
|
||||||
|
@ -263,11 +171,106 @@ PlasmaComponents.ItemDelegate {
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
PlasmaComponents.ToolButton {
|
||||||
id: overflowMenu
|
id: overflowMenu
|
||||||
|
|
||||||
icon.name: "application-menu"
|
icon.name: "application-menu"
|
||||||
checked: menu.status === PlasmaExtras.Menu.Open
|
checked: menu.status === PlasmaExtras.Menu.Open
|
||||||
|
|
||||||
onPressed: menu.openRelative()
|
onPressed: menu.openRelative()
|
||||||
|
|
||||||
|
PlasmaExtras.Menu {
|
||||||
|
id: menu
|
||||||
|
visualParent: overflowMenu
|
||||||
|
placement: PlasmaExtras.Menu.BottomPosedLeftAlignedPopup
|
||||||
|
|
||||||
|
//Share
|
||||||
|
PlasmaExtras.MenuItem
|
||||||
|
{
|
||||||
|
property FileDialog data: FileDialog {
|
||||||
|
id: fileDialog
|
||||||
|
title: i18n("Please choose a file")
|
||||||
|
currentFolder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
||||||
|
fileMode: FileDialog.OpenFiles
|
||||||
|
onAccepted: fileDialog.selectedFiles.forEach(url => share.plugin.shareUrl(url))
|
||||||
|
}
|
||||||
|
|
||||||
|
id: shareFile
|
||||||
|
icon: "document-share"
|
||||||
|
visible: share.available
|
||||||
|
text: i18n("Share file")
|
||||||
|
onClicked: fileDialog.open()
|
||||||
|
}
|
||||||
|
|
||||||
|
//Clipboard
|
||||||
|
PlasmaExtras.MenuItem
|
||||||
|
{
|
||||||
|
property Clipboard data: Clipboard {
|
||||||
|
id: clipboard
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
|
id: sendclipboard
|
||||||
|
icon: "klipper"
|
||||||
|
visible: clipboard.available && clipboard.clipboard.isAutoShareDisabled
|
||||||
|
text: i18n("Send Clipboard")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
clipboard.sendClipboard()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Find my phone
|
||||||
|
PlasmaExtras.MenuItem
|
||||||
|
{
|
||||||
|
property FindMyPhone data: FindMyPhone {
|
||||||
|
id: findmyphone
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
|
id: ring
|
||||||
|
icon: "irc-voice"
|
||||||
|
visible: findmyphone.available
|
||||||
|
text: i18n("Ring my phone")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
findmyphone.ring()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//SFTP
|
||||||
|
PlasmaExtras.MenuItem
|
||||||
|
{
|
||||||
|
property Sftp data: Sftp {
|
||||||
|
id: sftp
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
|
id: browse
|
||||||
|
icon: "document-open-folder"
|
||||||
|
visible: sftp.available
|
||||||
|
text: i18n("Browse this device")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
sftp.browse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//SMS
|
||||||
|
PlasmaExtras.MenuItem
|
||||||
|
{
|
||||||
|
property SMS data: SMS {
|
||||||
|
id: sms
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
|
icon: "message-new"
|
||||||
|
visible: sms.available
|
||||||
|
text: i18n("SMS Messages")
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
sms.plugin.launchApp()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,7 +288,7 @@ PlasmaComponents.ItemDelegate {
|
||||||
text: i18n("Remote Keyboard")
|
text: i18n("Remote Keyboard")
|
||||||
}
|
}
|
||||||
|
|
||||||
KDEConnect.RemoteKeyboard {
|
RemoteKeyboard {
|
||||||
id: remoteKeyboard
|
id: remoteKeyboard
|
||||||
device: root.device
|
device: root.device
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -311,26 +314,19 @@ PlasmaComponents.ItemDelegate {
|
||||||
visible: notificationsModel.isAnyDimissable;
|
visible: notificationsModel.isAnyDimissable;
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
icon.name: "edit-clear-history"
|
icon.name: "edit-clear-history"
|
||||||
PlasmaComponents.ToolTip.text: i18n("Dismiss all notifications")
|
ToolTip.text: i18n("Dismiss all notifications")
|
||||||
onClicked: notificationsModel.dismissAll();
|
onClicked: notificationsModel.dismissAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
id: notificationsView
|
id: notificationsView
|
||||||
|
model: NotificationsModel {
|
||||||
model: KDEConnect.NotificationsModel {
|
|
||||||
id: notificationsModel
|
id: notificationsModel
|
||||||
deviceId: root.model.deviceId
|
deviceId: root.device.id()
|
||||||
}
|
}
|
||||||
|
|
||||||
delegate: PlasmaComponents.ItemDelegate {
|
delegate: PlasmaComponents.ItemDelegate {
|
||||||
id: listitem
|
id: listitem
|
||||||
|
|
||||||
required property int index
|
|
||||||
required property var model
|
|
||||||
|
|
||||||
enabled: true
|
enabled: true
|
||||||
onClicked: checked = !checked
|
onClicked: checked = !checked
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -345,79 +341,72 @@ PlasmaComponents.ItemDelegate {
|
||||||
|
|
||||||
Kirigami.Icon {
|
Kirigami.Icon {
|
||||||
id: notificationIcon
|
id: notificationIcon
|
||||||
source: listitem.model.appIcon
|
source: appIcon
|
||||||
width: (valid && listitem.model.appIcon !== "") ? dismissButton.width : 0
|
width: (valid && appIcon.length) ? dismissButton.width : 0
|
||||||
height: width
|
height: width
|
||||||
Layout.alignment: Qt.AlignLeft
|
Layout.alignment: Qt.AlignLeft
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
PlasmaComponents.Label {
|
||||||
id: notificationLabel
|
id: notificationLabel
|
||||||
text: {
|
text: appName + ": " + (title.length>0 ? (appName==title?notitext:title+": "+notitext) : model.name)
|
||||||
const { appName, notitext, title } = listitem.model;
|
|
||||||
const description = title !== "" ? (appName === title ? notitext : `${title}: ${notitext}`) : notitext;
|
|
||||||
return `${appName}: ${description}`;
|
|
||||||
}
|
|
||||||
elide: listitem.checked ? Text.ElideNone : Text.ElideRight
|
elide: listitem.checked ? Text.ElideNone : Text.ElideRight
|
||||||
maximumLineCount: listitem.checked ? 0 : 1
|
maximumLineCount: listitem.checked ? 0 : 1
|
||||||
wrapMode: Text.Wrap
|
wrapMode: Text.WordWrap
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
PlasmaComponents.ToolButton {
|
||||||
id: replyButton
|
id: replyButton
|
||||||
visible: listitem.model.repliable
|
visible: repliable
|
||||||
enabled: listitem.model.repliable && !listitem.replying
|
enabled: repliable && !replying
|
||||||
icon.name: "mail-reply-sender"
|
icon.name: "mail-reply-sender"
|
||||||
PlasmaComponents.ToolTip.text: i18n("Reply")
|
ToolTip.text: i18n("Reply")
|
||||||
onClicked: {
|
onClicked: { replying = true; replyTextField.forceActiveFocus(); }
|
||||||
listitem.replying = true;
|
|
||||||
replyTextField.forceActiveFocus();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
PlasmaComponents.ToolButton {
|
||||||
id: dismissButton
|
id: dismissButton
|
||||||
visible: notificationsModel.isAnyDimissable;
|
visible: notificationsModel.isAnyDimissable;
|
||||||
enabled: listitem.model.dismissable
|
enabled: dismissable
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
icon.name: "window-close"
|
icon.name: "window-close"
|
||||||
PlasmaComponents.ToolTip.text: i18n("Dismiss")
|
ToolTip.text: i18n("Dismiss")
|
||||||
onClicked: listitem.model.dbusInterface.dismiss();
|
onClicked: dbusInterface.dismiss();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
visible: listitem.replying
|
visible: replying
|
||||||
width: notificationLabel.width + replyButton.width + dismissButton.width + Kirigami.Units.smallSpacing * 2
|
width: notificationLabel.width + replyButton.width + dismissButton.width + Kirigami.Units.smallSpacing * 2
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
PlasmaComponents.Button {
|
PlasmaComponents.Button {
|
||||||
id: replyCancelButton
|
|
||||||
Layout.alignment: Qt.AlignBottom
|
Layout.alignment: Qt.AlignBottom
|
||||||
|
id: replyCancelButton
|
||||||
text: i18n("Cancel")
|
text: i18n("Cancel")
|
||||||
display: PlasmaComponents.AbstractButton.IconOnly
|
display: PlasmaComponents.AbstractButton.IconOnly
|
||||||
PlasmaComponents.ToolTip {
|
PlasmaComponents.ToolTip {
|
||||||
text: replyCancelButton.text
|
text: parent.text
|
||||||
}
|
}
|
||||||
icon.name: "dialog-cancel"
|
icon.name: "dialog-cancel"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
replyTextField.text = "";
|
replyTextField.text = "";
|
||||||
listitem.replying = false;
|
replying = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents.TextArea {
|
PlasmaComponents.TextArea {
|
||||||
id: replyTextField
|
id: replyTextField
|
||||||
placeholderText: i18nc("@info:placeholder", "Reply to %1…", listitem.model.appName)
|
placeholderText: i18nc("@info:placeholder", "Reply to %1…", appName)
|
||||||
wrapMode: TextEdit.Wrap
|
wrapMode: TextEdit.Wrap
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Keys.onPressed: event => {
|
Keys.onPressed: {
|
||||||
if ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter) && !(event.modifiers & Qt.ShiftModifier)) {
|
if ((event.key == Qt.Key_Return || event.key == Qt.Key_Enter) && !(event.modifiers & Qt.ShiftModifier)) {
|
||||||
replySendButton.clicked();
|
replySendButton.clicked();
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
}
|
}
|
||||||
if (event.key === Qt.Key_Escape) {
|
if (event.key == Qt.Key_Escape) {
|
||||||
replyCancelButton.clicked();
|
replyCancelButton.clicked();
|
||||||
event.accepted = true;
|
event.accepted = true;
|
||||||
}
|
}
|
||||||
|
@ -429,11 +418,11 @@ PlasmaComponents.ItemDelegate {
|
||||||
id: replySendButton
|
id: replySendButton
|
||||||
text: i18n("Send")
|
text: i18n("Send")
|
||||||
icon.name: "document-send"
|
icon.name: "document-send"
|
||||||
enabled: replyTextField.text !== ""
|
enabled: replyTextField.text
|
||||||
onClicked: {
|
onClicked: {
|
||||||
listitem.model.dbusInterface.sendReply(replyTextField.text);
|
dbusInterface.sendReply(replyTextField.text);
|
||||||
replyTextField.text = "";
|
replyTextField.text = "";
|
||||||
listitem.replying = false;
|
replying = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -441,9 +430,14 @@ PlasmaComponents.ItemDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RemoteCommands {
|
||||||
|
id: rc
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
|
|
||||||
// Commands
|
// Commands
|
||||||
RowLayout {
|
RowLayout {
|
||||||
visible: remoteCommands.available
|
visible: rc.available
|
||||||
width: parent.width
|
width: parent.width
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
|
@ -452,43 +446,37 @@ PlasmaComponents.ItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents.Button {
|
PlasmaComponents.Button
|
||||||
|
{
|
||||||
id: addCommandButton
|
id: addCommandButton
|
||||||
icon.name: "list-add"
|
icon.name: "list-add"
|
||||||
PlasmaComponents.ToolTip.text: i18n("Add command")
|
ToolTip.text: i18n("Add command")
|
||||||
onClicked: remoteCommands.plugin.editCommands()
|
onClicked: rc.plugin.editCommands()
|
||||||
visible: remoteCommands.plugin?.canAddCommand ?? false
|
visible: rc.plugin && rc.plugin.canAddCommand
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
id: commandsView
|
id: commandsView
|
||||||
|
visible: rc.available
|
||||||
visible: remoteCommands.available
|
model: RemoteCommandsModel {
|
||||||
|
|
||||||
model: KDEConnect.RemoteCommandsModel {
|
|
||||||
id: commandsModel
|
id: commandsModel
|
||||||
deviceId: root.model.deviceId
|
deviceId: rc.device.id()
|
||||||
}
|
}
|
||||||
|
|
||||||
delegate: PlasmaComponents.ItemDelegate {
|
delegate: PlasmaComponents.ItemDelegate {
|
||||||
id: commandDelegate
|
|
||||||
|
|
||||||
required property int index
|
|
||||||
required property var model
|
|
||||||
|
|
||||||
enabled: true
|
enabled: true
|
||||||
|
onClicked: rc.plugin.triggerCommand(key)
|
||||||
onClicked: {
|
|
||||||
remoteCommands.plugin?.triggerCommand(commandDelegate.model.key);
|
|
||||||
}
|
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
||||||
contentItem: PlasmaComponents.Label {
|
contentItem: PlasmaComponents.Label {
|
||||||
text: `${commandDelegate.model.name}\n${commandDelegate.model.command}`
|
text: name + "\n" + command
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Share
|
||||||
|
Share {
|
||||||
|
id: share
|
||||||
|
device: root.device
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,32 +1,28 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "findmyphone"
|
pluginName: "findmyphone"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property KDEConnect.FindMyPhoneDbusInterface findMyPhone
|
property variant findMyPhone: null
|
||||||
|
|
||||||
function ring(): void {
|
function ring() {
|
||||||
if (findMyPhone) {
|
if (findMyPhone) {
|
||||||
findMyPhone.ring();
|
findMyPhone.ring();
|
||||||
}
|
}
|
||||||
|
@ -34,9 +30,9 @@ QtObject {
|
||||||
|
|
||||||
onAvailableChanged: {
|
onAvailableChanged: {
|
||||||
if (available) {
|
if (available) {
|
||||||
findMyPhone = KDEConnect.FindMyPhoneDbusInterfaceFactory.create(device.id());
|
findMyPhone = FindMyPhoneDbusInterfaceFactory.create(device.id())
|
||||||
} else {
|
} else {
|
||||||
findMyPhone = null;
|
findMyPhone = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,45 +1,40 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
|
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Controls as QQC2
|
import QtQuick.Controls
|
||||||
import QtQuick.Layouts
|
import org.kde.plasma.core as PlasmaCore
|
||||||
|
|
||||||
import org.kde.config as KConfig
|
|
||||||
import org.kde.kcmutils as KCMUtils
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
|
||||||
import org.kde.kirigami as Kirigami
|
|
||||||
import org.kde.plasma.components as PlasmaComponents3
|
import org.kde.plasma.components as PlasmaComponents3
|
||||||
import org.kde.plasma.extras as PlasmaExtras
|
import org.kde.plasma.extras as PlasmaExtras
|
||||||
|
import org.kde.kdeconnect as KdeConnect
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import org.kde.kquickcontrolsaddons
|
||||||
|
import org.kde.kirigami as Kirigami
|
||||||
|
import org.kde.kcmutils as KCMUtils
|
||||||
|
import org.kde.config as KConfig
|
||||||
|
|
||||||
PlasmaExtras.Representation {
|
PlasmaExtras.Representation {
|
||||||
id: kdeconnect
|
id: kdeconnect
|
||||||
|
|
||||||
property alias devicesModel: devicesView.model
|
property alias devicesModel: devicesView.model
|
||||||
|
|
||||||
collapseMarginsHint: true
|
collapseMarginsHint: true
|
||||||
|
|
||||||
KDEConnect.DevicesModel {
|
KdeConnect.DevicesModel {
|
||||||
id: allDevicesModel
|
id: allDevicesModel
|
||||||
}
|
}
|
||||||
|
KdeConnect.DevicesModel {
|
||||||
KDEConnect.DevicesModel {
|
|
||||||
id: pairedDevicesModel
|
id: pairedDevicesModel
|
||||||
displayFilter: KDEConnect.DevicesModel.Paired
|
displayFilter: KdeConnect.DevicesModel.Paired
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents3.ScrollView {
|
PlasmaComponents3.ScrollView {
|
||||||
|
id: dialogItem
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
contentItem: ListView {
|
contentItem: ListView {
|
||||||
id: devicesView
|
id: devicesView
|
||||||
|
|
||||||
spacing: Kirigami.Units.smallSpacing
|
spacing: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
clip: true
|
clip: true
|
||||||
|
@ -62,16 +57,16 @@ PlasmaExtras.Representation {
|
||||||
|
|
||||||
text: {
|
text: {
|
||||||
if (pairedDevicesModel.count >= 0) {
|
if (pairedDevicesModel.count >= 0) {
|
||||||
return pairedDevicesModel.count === 0 ? i18n("No paired devices") : i18np("Paired device is unavailable", "All paired devices are unavailable", pairedDevicesModel.count)
|
return pairedDevicesModel.count == 0 ? i18n("No paired devices") : i18np("Paired device is unavailable", "All paired devices are unavailable", pairedDevicesModel.count)
|
||||||
} else if (allDevicesModel.count === 0) {
|
} else if (allDevicesModel.count == 0) {
|
||||||
return i18n("Install KDE Connect on your Android device to integrate it with Plasma!")
|
return i18n("Install KDE Connect on your Android device to integrate it with Plasma!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
helpfulAction: QQC2.Action {
|
helpfulAction: Action {
|
||||||
text: i18n("Pair a Device…")
|
text: i18n("Pair a Device…")
|
||||||
icon.name: "list-add"
|
icon.name: "list-add"
|
||||||
onTriggered: KCMUtils.KCMLauncher.openSystemSettings("kcm_kdeconnect")
|
onTriggered: KCMUtils.KCMLauncher.openSystemSettings("kcm_kdeconnect")
|
||||||
enabled: pairedDevicesModel.count === 0 && KConfig.KAuthorized.authorizeControlModule("kcm_kdeconnect")
|
enabled: pairedDevicesModel.count == 0 && KConfig.KAuthorized.authorizeControlModule("kcm_kdeconnect")
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaComponents3.Button {
|
PlasmaComponents3.Button {
|
||||||
|
|
|
@ -1,29 +1,24 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
|
* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "remotecommands"
|
pluginName: "remotecommands"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property KDEConnect.RemoteCommandsDbusInterface plugin:
|
property variant plugin: available ? RemoteCommandsDbusInterfaceFactory.create(device.id()) : null
|
||||||
available ? KDEConnect.RemoteCommandsDbusInterfaceFactory.create(device.id()) : null
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,25 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez <aleixpol@kde.org>
|
* SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "sms"
|
pluginName: "sms"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly property KDEConnect.SmsDbusInterface plugin:
|
readonly property variant plugin: available ? SmsDbusInterfaceFactory.create(device.id()) : null
|
||||||
available ? KDEConnect.SmsDbusInterfaceFactory.create(device.id()) : null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,37 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "sftp"
|
pluginName: "sftp"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property KDEConnect.SftpDbusInterface sftp
|
property variant sftp: null
|
||||||
|
|
||||||
function browse(): void {
|
function browse() {
|
||||||
if (sftp) {
|
if (sftp)
|
||||||
sftp.startBrowsing();
|
sftp.startBrowsing();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
onAvailableChanged: {
|
onAvailableChanged: {
|
||||||
if (available) {
|
if (available) {
|
||||||
sftp = KDEConnect.SftpDbusInterfaceFactory.create(device.id());
|
sftp = SftpDbusInterfaceFactory.create(device.id())
|
||||||
} else {
|
} else {
|
||||||
sftp = null;
|
sftp = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,25 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
|
* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.kdeconnect as KDEConnect
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
QtObject {
|
QtObject {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
property alias device: checker.device
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "share"
|
pluginName: "share"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
property KDEConnect.ShareDbusInterface plugin:
|
property variant plugin: available ? ShareDbusInterfaceFactory.create(device.id()) : null
|
||||||
available ? KDEConnect.ShareDbusInterfaceFactory.create(device.id()) : null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,23 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org>
|
* SPDX-FileCopyrightText: 2021 Aleix Pol i Gonzalez <aleixpol@kde.org>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
import org.kde.plasma.core as PlasmaCore
|
||||||
|
import org.kde.kdeconnect
|
||||||
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
QtObject
|
||||||
|
{
|
||||||
QtObject {
|
property alias device: checker.device
|
||||||
id: root
|
|
||||||
|
|
||||||
required property KDEConnect.DeviceDbusInterface device
|
|
||||||
|
|
||||||
readonly property alias available: checker.available
|
readonly property alias available: checker.available
|
||||||
|
|
||||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||||
id: checker
|
id: checker
|
||||||
pluginName: "virtualmonitor"
|
pluginName: "virtualmonitor"
|
||||||
device: root.device
|
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly property KDEConnect.VirtualmonitorDbusInterface plugin:
|
readonly property QtObject plugin: available ? VirtualmonitorDbusInterfaceFactory.create(device.id()) : null
|
||||||
available ? KDEConnect.VirtualmonitorDbusInterfaceFactory.create(device.id()) : null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,61 +1,65 @@
|
||||||
/**
|
/**
|
||||||
* SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@kde.org>
|
* SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
import QtQuick
|
import QtQuick
|
||||||
|
|
||||||
import org.kde.config as KConfig
|
|
||||||
import org.kde.kcmutils as KCMUtils
|
|
||||||
import org.kde.kdeconnect as KDEConnect
|
|
||||||
import org.kde.kquickcontrolsaddons as KQuickControlsAddons
|
|
||||||
import org.kde.plasma.core as PlasmaCore
|
import org.kde.plasma.core as PlasmaCore
|
||||||
import org.kde.plasma.plasmoid
|
import org.kde.plasma.plasmoid
|
||||||
|
import org.kde.kquickcontrolsaddons
|
||||||
|
import org.kde.kdeconnect
|
||||||
|
import org.kde.kcmutils as KCMUtils
|
||||||
|
import org.kde.config as KConfig
|
||||||
|
|
||||||
PlasmoidItem {
|
PlasmoidItem
|
||||||
|
{
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
readonly property bool inPanel: [
|
readonly property bool inPanel: (plasmoid.location == PlasmaCore.Types.TopEdge
|
||||||
PlasmaCore.Types.TopEdge,
|
|| plasmoid.location == PlasmaCore.Types.RightEdge
|
||||||
PlasmaCore.Types.RightEdge,
|
|| plasmoid.location == PlasmaCore.Types.BottomEdge
|
||||||
PlasmaCore.Types.BottomEdge,
|
|| plasmoid.location == PlasmaCore.Types.LeftEdge)
|
||||||
PlasmaCore.Types.LeftEdge,
|
|
||||||
].includes(Plasmoid.location)
|
|
||||||
|
|
||||||
KDEConnect.DevicesModel {
|
DevicesModel {
|
||||||
id: connectedDeviceModel
|
id: connectDeviceModel
|
||||||
displayFilter: KDEConnect.DevicesModel.Paired | KDEConnect.DevicesModel.Reachable
|
displayFilter: DevicesModel.Paired | DevicesModel.Reachable
|
||||||
}
|
}
|
||||||
|
|
||||||
KDEConnect.DevicesModel {
|
DevicesModel {
|
||||||
id: pairedDeviceModel
|
id: pairedDeviceModel
|
||||||
displayFilter: KDEConnect.DevicesModel.Paired
|
displayFilter: DevicesModel.Paired
|
||||||
}
|
}
|
||||||
|
|
||||||
Plasmoid.icon: inPanel
|
Plasmoid.icon: {
|
||||||
? "kdeconnect-tray-symbolic"
|
let iconName = "kdeconnect-tray";
|
||||||
: "kdeconnect-tray"
|
|
||||||
|
|
||||||
Plasmoid.status: connectedDeviceModel.count > 0 ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus
|
if (inPanel) {
|
||||||
|
return "kdeconnect-tray-symbolic";
|
||||||
|
}
|
||||||
|
|
||||||
|
return iconName;
|
||||||
|
}
|
||||||
|
|
||||||
|
Binding {
|
||||||
|
target: plasmoid
|
||||||
|
property: "status"
|
||||||
|
value: (connectDeviceModel.count > 0) ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus
|
||||||
|
}
|
||||||
|
|
||||||
fullRepresentation: FullRepresentation {
|
fullRepresentation: FullRepresentation {
|
||||||
devicesModel: connectedDeviceModel
|
devicesModel: connectDeviceModel
|
||||||
}
|
}
|
||||||
|
|
||||||
compactRepresentation: CompactRepresentation {
|
compactRepresentation: CompactRepresentation {
|
||||||
plasmoidItem: root
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaCore.Action {
|
PlasmaCore.Action {
|
||||||
id: configureAction
|
id: configureAction
|
||||||
text: i18n("KDE Connect Settings…")
|
text: i18n("KDE Connect Settings…")
|
||||||
icon.name: "configure"
|
icon.name: "configure"
|
||||||
visible: KConfig.KAuthorized.authorizeControlModule("kcm_kdeconnect")
|
visible: KConfig.KAuthorized.authorizeControlModule("kcm_kdeconnect");
|
||||||
onTriggered: checked => {
|
onTriggered: {
|
||||||
KCMUtils.KCMLauncher.openSystemSettings("kcm_kdeconnect");
|
KCMUtils.KCMLauncher.openSystemSettings("kcm_kdeconnect");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue