Merge branch 'master' into 1.x
# Conflicts: # plugins/battery/kdeconnect_battery.json # plugins/clipboard/kdeconnect_clipboard.json # plugins/findmyphone/kdeconnect_findmyphone.json # plugins/kdeconnect.notifyrc # plugins/lockdevice/kdeconnect_lockdevice.json # plugins/mousepad/kdeconnect_mousepad.json # plugins/mpriscontrol/kdeconnect_mpriscontrol.json # plugins/mprisremote/kdeconnect_mprisremote.json # plugins/notifications/kdeconnect_notifications.json # plugins/pausemusic/kdeconnect_pausemusic.json # plugins/ping/kdeconnect_ping.json # plugins/remotecommands/kdeconnect_remotecommands.json # plugins/remotecontrol/kdeconnect_remotecontrol.json # plugins/runcommand/kdeconnect_runcommand.json # plugins/screensaver-inhibit/kdeconnect_screensaver_inhibit.json # plugins/sendnotifications/kdeconnect_sendnotifications.json # plugins/sendnotifications/kdeconnect_sendnotifications_config.desktop # plugins/sftp/kdeconnect_sftp.json # plugins/share/kdeconnect_share.json # plugins/telephony/kdeconnect_telephony.json
This commit is contained in:
commit
0dbaceafa3
61 changed files with 872 additions and 194 deletions
|
@ -1,16 +1,20 @@
|
|||
[Desktop Entry]
|
||||
Name=KDE Connect Application
|
||||
Name[ar]=تطبيق كدي المتّصل
|
||||
Name[ast]=Aplicación KDE Connect
|
||||
Name[ca]=Aplicació KDE Connect
|
||||
Name[ca@valencia]=Aplicació KDE Connect
|
||||
Name[cs]=Aplikace KDE Connect
|
||||
Name[da]=Programmet KDE Connect
|
||||
Name[de]=KDE-Connect-Anwendung
|
||||
Name[el]=Εφαρμογή KDE Connect
|
||||
Name[en_GB]=KDE Connect Application
|
||||
Name[es]=Aplicación KDE Connect
|
||||
Name[et]=KDE Connecti rakendus
|
||||
Name[fi]=KDE Connect -sovellus
|
||||
Name[fr]=Application KDE Connect
|
||||
Name[gl]=Programa de KDE Connect
|
||||
Name[he]=היישום KDE Connect
|
||||
Name[hu]=KDE Connect alkalmazás
|
||||
Name[it]=Applicazione KDE Connect
|
||||
Name[ko]=KDE Connect 프로그램
|
||||
|
@ -27,17 +31,21 @@ Name[uk]=Програма KDE Connect
|
|||
Name[x-test]=xxKDE Connect Applicationxx
|
||||
Name[zh_CN]=KDE Connect 应用程序
|
||||
GenericName=Device Synchronization
|
||||
GenericName[ar]=مزامنة الأجهزة
|
||||
GenericName[ast]=Sincronización de preseos
|
||||
GenericName[ca]=Sincronització de dispositius
|
||||
GenericName[ca@valencia]=Sincronització de dispositius
|
||||
GenericName[cs]=Synchronizace zařízení
|
||||
GenericName[da]=Enhedssynkronisering
|
||||
GenericName[de]=Geräteabgleich
|
||||
GenericName[el]=Συγχρονισμός συσκευών
|
||||
GenericName[en_GB]=Device Synchronisation
|
||||
GenericName[es]=Sincronización de dispositivos
|
||||
GenericName[et]=Seadmete sünkroonimine
|
||||
GenericName[fi]=Laitteiden synkronointi
|
||||
GenericName[fr]=Synchronisation de périphériques
|
||||
GenericName[gl]=Sincronización de dispositivos
|
||||
GenericName[he]=סנכרון התקן
|
||||
GenericName[hu]=Eszközszinkronizáció
|
||||
GenericName[it]=Sincronizzazione dispositivo
|
||||
GenericName[ko]=장치 동기화
|
||||
|
@ -55,17 +63,21 @@ GenericName[uk]=Синхронізація із пристроями
|
|||
GenericName[x-test]=xxDevice Synchronizationxx
|
||||
GenericName[zh_CN]=设备同步
|
||||
Comment=Make all your devices one
|
||||
Comment[ar]=اجعل أجهزتك كلّها واحدًا
|
||||
Comment[ast]=Fai tolos tos preseos ún mesmu
|
||||
Comment[ca]=Fa que tots els vostres dispositius siguin un
|
||||
Comment[ca@valencia]=Fa que tots els vostres dispositius siguen un
|
||||
Comment[cs]=Sjednoťte svá zařízení
|
||||
Comment[da]=Gør alle dine enheder til en
|
||||
Comment[de]=Gleichen Sie alle Ihre Geräte ab
|
||||
Comment[el]=Όλες οι συσκευές σας σε μία
|
||||
Comment[en_GB]=Make all your devices one
|
||||
Comment[es]=Convertir todos sus dispositivos en uno
|
||||
Comment[et]=Kõigi seadmete ühendamine
|
||||
Comment[fi]=Yhdistä kaikki laitteesi toisiinsa
|
||||
Comment[fr]=Unifiez vos périphériques
|
||||
Comment[gl]=Unifique os seus dispositivos.
|
||||
Comment[he]=הפוך את כך ההתקנים שלך לאחד
|
||||
Comment[hu]=Egyesítse eszközeit
|
||||
Comment[it]=Fai di tutti i tuoi dispositivi un solo dispositivo
|
||||
Comment[ko]=모든 장치를 하나로 동기화
|
||||
|
|
|
@ -45,7 +45,7 @@ Kirigami.Page
|
|||
property list<QtObject> actions: [
|
||||
Kirigami.Action {
|
||||
onTriggered: deviceView.currentDevice.unpair()
|
||||
text: i18n("UnPair")
|
||||
text: i18n("Unpair")
|
||||
},
|
||||
Kirigami.Action {
|
||||
text: i18n("Send Ping")
|
||||
|
@ -59,42 +59,34 @@ Kirigami.Page
|
|||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
Kirigami.BasicListItem {
|
||||
readonly property var fu: PluginChecker {
|
||||
id: mprisChecker
|
||||
pluginName: "mpriscontrol"
|
||||
}
|
||||
enabled: mprisChecker.available
|
||||
PluginItem {
|
||||
label: i18n("Multimedia control")
|
||||
onClicked: pageStack.push(
|
||||
"qrc:/qml/mpris.qml",
|
||||
{ mprisInterface: MprisDbusInterfaceFactory.create(deviceView.currentDevice.id()) }
|
||||
);
|
||||
interfaceFactory: MprisDbusInterfaceFactory
|
||||
component: "qrc:/qml/mpris.qml"
|
||||
pluginName: "mprisremote"
|
||||
}
|
||||
Kirigami.BasicListItem {
|
||||
readonly property var fu: PluginChecker {
|
||||
id: mousepadChecker
|
||||
pluginName: "mousepad"
|
||||
}
|
||||
enabled: mousepadChecker.available
|
||||
PluginItem {
|
||||
label: i18n("Remote input")
|
||||
onClicked: pageStack.push(
|
||||
"qrc:/qml/mousepad.qml",
|
||||
{ remoteControlInterface: RemoteControlDbusInterfaceFactory.create(deviceView.currentDevice.id()) }
|
||||
);
|
||||
interfaceFactory: RemoteControlDbusInterfaceFactory
|
||||
component: "qrc:/qml/mousepad.qml"
|
||||
pluginName: "remotecontrol"
|
||||
}
|
||||
Kirigami.BasicListItem {
|
||||
readonly property var fu: PluginChecker {
|
||||
id: lockdeviceChecker
|
||||
pluginName: "lockdevice"
|
||||
}
|
||||
enabled: lockdeviceChecker.available
|
||||
property var lockIface: LockDeviceDbusInterfaceFactory.create(deviceView.currentDevice.id())
|
||||
PluginItem {
|
||||
readonly property var lockIface: LockDeviceDbusInterfaceFactory.create(deviceView.currentDevice.id())
|
||||
pluginName: "lockdevice"
|
||||
label: lockIface.isLocked ? i18n("Unlock") : i18n("Lock")
|
||||
onClicked: {
|
||||
lockIface.isLocked = !lockIface.isLocked;
|
||||
}
|
||||
}
|
||||
PluginItem {
|
||||
readonly property var findmyphoneIface: FindMyPhoneDbusInterfaceFactory.create(deviceView.currentDevice.id())
|
||||
pluginName: "findmyphone"
|
||||
label: i18n("Find Device")
|
||||
onClicked: {
|
||||
findmyphoneIface.ring()
|
||||
}
|
||||
}
|
||||
|
||||
Item { Layout.fillHeight: true }
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.kde.kdeconnect 1.0
|
|||
|
||||
Kirigami.Page
|
||||
{
|
||||
objectName: "FindDevices"
|
||||
title: i18n("Pair")
|
||||
ScrollView {
|
||||
anchors.fill: parent
|
||||
|
@ -55,8 +56,8 @@ Kirigami.Page
|
|||
label: display + "\n" + toolTip
|
||||
enabled: !(status & DevicesModel.Paired)
|
||||
onClicked: {
|
||||
root.pageStack.clear()
|
||||
root.pageStack.push(
|
||||
pageStack.clear()
|
||||
pageStack.push(
|
||||
"qrc:/qml/DevicePage.qml",
|
||||
{currentDevice: device}
|
||||
);
|
||||
|
|
49
app/qml/PluginItem.qml
Normal file
49
app/qml/PluginItem.qml
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright 2015 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License or (at your option) version 3 or any later version
|
||||
* accepted by the membership of KDE e.V. (or its successor approved
|
||||
* by the membership of KDE e.V.), which shall act as a proxy
|
||||
* defined in Section 14 of version 3 of the license.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import org.kde.kirigami 1.0 as Kirigami
|
||||
import org.kde.kdeconnect 1.0
|
||||
|
||||
Kirigami.BasicListItem
|
||||
{
|
||||
property alias pluginName: checker.pluginName
|
||||
property var interfaceFactory
|
||||
property string component
|
||||
|
||||
readonly property var checker: PluginChecker {
|
||||
id: checker
|
||||
device: deviceView.currentDevice
|
||||
}
|
||||
visible: checker.available
|
||||
onClicked: {
|
||||
if (component === "")
|
||||
return;
|
||||
|
||||
var obj = interfaceFactory.create(checker.deviceId);
|
||||
var page = pageStack.push(
|
||||
component,
|
||||
{ pluginInterface: obj }
|
||||
);
|
||||
obj.parent = page
|
||||
}
|
||||
}
|
|
@ -31,32 +31,55 @@ Kirigami.ApplicationWindow
|
|||
width: 400
|
||||
height: 500
|
||||
|
||||
Kirigami.Action {
|
||||
id: findDevicesAction
|
||||
text: i18n ("Find devices...")
|
||||
iconName: "list-add"
|
||||
checkable: pageStack.currentItem && pageStack.currentItem.objectName == "FindDevices"
|
||||
checked: true
|
||||
|
||||
onTriggered: {
|
||||
root.pageStack.clear()
|
||||
root.pageStack.push("qrc:/qml/FindDevicesPage.qml");
|
||||
}
|
||||
}
|
||||
|
||||
globalDrawer: Kirigami.GlobalDrawer {
|
||||
id: drawer
|
||||
title: i18n("KDE Connect")
|
||||
titleIcon: "kdeconnect"
|
||||
// bannerImageSource: "/home/apol/devel/kde5/share/wallpapers/Next/contents/images/1024x768.png"
|
||||
|
||||
content: ListView {
|
||||
anchors.fill: parent
|
||||
topContent: [
|
||||
TextField {
|
||||
Layout.fillWidth: true
|
||||
|
||||
DBusProperty {
|
||||
id: announcedNameProperty
|
||||
object: DaemonDbusInterface
|
||||
read: "announcedName"
|
||||
defaultValue: ""
|
||||
}
|
||||
|
||||
text: announcedNameProperty.value
|
||||
onAccepted: {
|
||||
DaemonDbusInterface.setAnnouncedName(text)
|
||||
text = Qt.binding(function() {return announcedNameProperty.value})
|
||||
}
|
||||
}
|
||||
]
|
||||
property var objects: [findDevicesAction]
|
||||
Instantiator {
|
||||
model: DevicesSortProxyModel {
|
||||
sourceModel: DevicesModel { displayFilter: DevicesModel.Paired }
|
||||
}
|
||||
header: Kirigami.BasicListItem {
|
||||
label: i18n ("Find devices...")
|
||||
icon: "list-add"
|
||||
onClicked: {
|
||||
root.pageStack.clear()
|
||||
root.pageStack.push("qrc:/qml/FindDevicesPage.qml");
|
||||
}
|
||||
}
|
||||
|
||||
delegate: Kirigami.BasicListItem {
|
||||
width: ListView.view.width
|
||||
icon: iconName
|
||||
label: display + "\n" + toolTip
|
||||
delegate: Kirigami.Action {
|
||||
iconName: model.iconName
|
||||
text: display + "\n" + toolTip
|
||||
enabled: status & DevicesModel.Reachable
|
||||
checked: root.pageStack.currentDevice == device
|
||||
onClicked: {
|
||||
checkable: pageStack.currentItem && pageStack.currentItem.currentDevice == device
|
||||
checked: true
|
||||
onTriggered: {
|
||||
root.pageStack.clear()
|
||||
root.pageStack.push(
|
||||
"qrc:/qml/DevicePage.qml",
|
||||
|
@ -64,7 +87,20 @@ Kirigami.ApplicationWindow
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
onObjectAdded: {
|
||||
drawer.objects.push(object)
|
||||
drawer.objects = drawer.objects
|
||||
}
|
||||
onObjectRemoved: {
|
||||
var idx = drawer.objects.indexOf(object);
|
||||
if (idx>=0) {
|
||||
var removed = drawer.objects.splice(idx, 1)
|
||||
drawer.objects = drawer.objects
|
||||
}
|
||||
}
|
||||
}
|
||||
actions: objects
|
||||
}
|
||||
|
||||
contextDrawer: Kirigami.ContextDrawer {
|
||||
|
|
|
@ -27,7 +27,7 @@ Kirigami.Page
|
|||
{
|
||||
id: mousepad
|
||||
title: i18n("Remote Control")
|
||||
property QtObject remoteControlInterface
|
||||
property QtObject pluginInterface
|
||||
|
||||
ColumnLayout
|
||||
{
|
||||
|
@ -39,14 +39,14 @@ Kirigami.Page
|
|||
Layout.fillHeight: true
|
||||
property var lastPos: Qt.point(-1, -1)
|
||||
|
||||
onClicked: mousepad.remoteControlInterface.sendCommand("singleclick", true);
|
||||
onClicked: mousepad.pluginInterface.sendCommand("singleclick", true);
|
||||
|
||||
onPositionChanged: {
|
||||
if (lastPos.x > -1) {
|
||||
// console.log("move", mouse.x, mouse.y, lastPos)
|
||||
var delta = Qt.point(mouse.x-lastPos.x, mouse.y-lastPos.y);
|
||||
|
||||
remoteControlInterface.moveCursor(delta);
|
||||
pluginInterface.moveCursor(delta);
|
||||
}
|
||||
lastPos = Qt.point(mouse.x, mouse.y);
|
||||
}
|
||||
|
@ -59,15 +59,15 @@ Kirigami.Page
|
|||
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
onClicked: mousepad.remoteControlInterface.sendCommand("singleclick", true);
|
||||
onClicked: mousepad.pluginInterface.sendCommand("singleclick", true);
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
onClicked: mousepad.remoteControlInterface.sendCommand("middleclick", true);
|
||||
onClicked: mousepad.pluginInterface.sendCommand("middleclick", true);
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
onClicked: mousepad.remoteControlInterface.sendCommand("rightclick", true);
|
||||
onClicked: mousepad.pluginInterface.sendCommand("rightclick", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.kde.kirigami 1.0 as Kirigami
|
|||
Kirigami.Page
|
||||
{
|
||||
id: root
|
||||
property QtObject mprisInterface
|
||||
property QtObject pluginInterface
|
||||
title: i18n("Multimedia Controls")
|
||||
|
||||
ColumnLayout
|
||||
|
@ -34,42 +34,42 @@ Kirigami.Page
|
|||
anchors.fill: parent
|
||||
|
||||
Component.onCompleted: {
|
||||
mprisInterface.requestPlayerList();
|
||||
pluginInterface.requestPlayerList();
|
||||
}
|
||||
|
||||
Item { Layout.fillHeight: true }
|
||||
ComboBox {
|
||||
Layout.fillWidth: true
|
||||
model: root.mprisInterface.playerList
|
||||
onCurrentTextChanged: root.mprisInterface.player = currentText
|
||||
model: root.pluginInterface.playerList
|
||||
onCurrentTextChanged: root.pluginInterface.player = currentText
|
||||
}
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
text: root.mprisInterface.nowPlaying
|
||||
text: root.pluginInterface.nowPlaying
|
||||
}
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
iconName: "media-skip-backward"
|
||||
onClicked: root.mprisInterface.sendAction("Previous")
|
||||
onClicked: root.pluginInterface.sendAction("Previous")
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
iconName: root.mprisInterface.isPlaying ? "media-playback-pause" : "media-playback-start"
|
||||
onClicked: root.mprisInterface.sendAction("PlayPause");
|
||||
iconName: root.pluginInterface.isPlaying ? "media-playback-pause" : "media-playback-start"
|
||||
onClicked: root.pluginInterface.sendAction("PlayPause");
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
iconName: "media-skip-forward"
|
||||
onClicked: root.mprisInterface.sendAction("Next")
|
||||
onClicked: root.pluginInterface.sendAction("Next")
|
||||
}
|
||||
}
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Label { text: i18n("Volume:") }
|
||||
Slider {
|
||||
value: root.mprisInterface.volume
|
||||
value: root.pluginInterface.volume
|
||||
maximumValue: 100
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<file>qml/main.qml</file>
|
||||
<file>qml/mpris.qml</file>
|
||||
<file>qml/mousepad.qml</file>
|
||||
<file>qml/PluginItem.qml</file>
|
||||
<file>qml/DevicePage.qml</file>
|
||||
<file>qml/FindDevicesPage.qml</file>
|
||||
</qresource>
|
||||
|
|
|
@ -214,6 +214,7 @@ void Daemon::setAnnouncedName(const QString &name)
|
|||
qCDebug(KDECONNECT_CORE()) << "Announcing name";
|
||||
KdeConnectConfig::instance()->setName(name);
|
||||
forceOnNetworkChange();
|
||||
Q_EMIT announcedNameChanged(name);
|
||||
}
|
||||
|
||||
QString Daemon::announcedName()
|
||||
|
|
|
@ -73,6 +73,7 @@ Q_SIGNALS:
|
|||
Q_SCRIPTABLE void deviceAdded(const QString& id);
|
||||
Q_SCRIPTABLE void deviceRemoved(const QString& id); //Note that paired devices will never be removed
|
||||
Q_SCRIPTABLE void deviceVisibilityChanged(const QString& id, bool isVisible);
|
||||
Q_SCRIPTABLE void announcedNameChanged(const QString &announcedName);
|
||||
|
||||
private Q_SLOTS:
|
||||
void onNewDeviceLink(const NetworkPackage& identityPackage, DeviceLink* dl);
|
||||
|
|
|
@ -97,7 +97,7 @@ QStringList Device::loadedPlugins() const
|
|||
|
||||
void Device::reloadPlugins()
|
||||
{
|
||||
QHash<QString, KdeConnectPlugin*> newPluginMap;
|
||||
QHash<QString, KdeConnectPlugin*> newPluginMap, oldPluginMap = m_plugins;
|
||||
QMultiMap<QString, KdeConnectPlugin*> newPluginsByIncomingCapability;
|
||||
|
||||
if (isTrusted() && isReachable()) { //Do not load any plugin for unpaired devices, nor useless loading them for unreachable devices
|
||||
|
@ -127,7 +127,7 @@ void Device::reloadPlugins()
|
|||
}
|
||||
}
|
||||
|
||||
const bool differentPlugins = m_plugins != newPluginMap;
|
||||
const bool differentPlugins = oldPluginMap != newPluginMap;
|
||||
|
||||
//Erase all left plugins in the original map (meaning that we don't want
|
||||
//them anymore, otherwise they would have been moved to the newPluginMap)
|
||||
|
|
|
@ -39,8 +39,6 @@
|
|||
#include "dbushelper.h"
|
||||
#include "daemon.h"
|
||||
|
||||
static const QString TRUSTED_DEVICES = QStringLiteral("trusted_devices_ssl");
|
||||
|
||||
struct KdeConnectConfigPrivate {
|
||||
|
||||
// The Initializer object sets things up, and also does cleanup when it goes out of scope
|
||||
|
@ -51,6 +49,7 @@ struct KdeConnectConfigPrivate {
|
|||
QSslCertificate certificate; // Use QSslCertificate instead of QCA::Certificate due to compatibility with QSslSocket
|
||||
|
||||
QSettings* config;
|
||||
QSettings* trusted_devices;
|
||||
|
||||
};
|
||||
|
||||
|
@ -78,9 +77,9 @@ KdeConnectConfig::KdeConnectConfig()
|
|||
|
||||
//.config/kdeconnect/config
|
||||
d->config = new QSettings(baseConfigDir().absoluteFilePath("config"), QSettings::IniFormat);
|
||||
d->trusted_devices = new QSettings(baseConfigDir().absoluteFilePath("trusted_devices"), QSettings::IniFormat);
|
||||
|
||||
//Register my own id if not there yet
|
||||
d->config->beginGroup("myself");
|
||||
if (!d->config->contains("id")) {
|
||||
QString uuid = QUuid::createUuid().toString();
|
||||
DbusHelper::filterNonExportableCharacters(uuid);
|
||||
|
@ -88,7 +87,6 @@ KdeConnectConfig::KdeConnectConfig()
|
|||
d->config->sync();
|
||||
qCDebug(KDECONNECT_CORE) << "My id:" << uuid;
|
||||
}
|
||||
d->config->endGroup();
|
||||
|
||||
const QFile::Permissions strict = QFile::ReadOwner | QFile::WriteOwner | QFile::ReadUser | QFile::WriteUser;
|
||||
|
||||
|
@ -153,17 +151,13 @@ KdeConnectConfig::KdeConnectConfig()
|
|||
QString KdeConnectConfig::name()
|
||||
{
|
||||
QString defaultName = qgetenv("USER") + '@' + QHostInfo::localHostName();
|
||||
d->config->beginGroup("myself");
|
||||
QString name = d->config->value("name", defaultName).toString();
|
||||
d->config->endGroup();
|
||||
return name;
|
||||
}
|
||||
|
||||
void KdeConnectConfig::setName(QString name)
|
||||
{
|
||||
d->config->beginGroup("myself");
|
||||
d->config->setValue("name", name);
|
||||
d->config->endGroup();
|
||||
d->config->sync();
|
||||
}
|
||||
|
||||
|
@ -174,9 +168,7 @@ QString KdeConnectConfig::deviceType()
|
|||
|
||||
QString KdeConnectConfig::deviceId()
|
||||
{
|
||||
d->config->beginGroup("myself");
|
||||
QString id = d->config->value("id", "").toString();
|
||||
d->config->endGroup();
|
||||
return id;
|
||||
}
|
||||
|
||||
|
@ -214,70 +206,56 @@ QDir KdeConnectConfig::baseConfigDir()
|
|||
|
||||
QStringList KdeConnectConfig::trustedDevices()
|
||||
{
|
||||
d->config->beginGroup(TRUSTED_DEVICES);
|
||||
const QStringList& list = d->config->childGroups();
|
||||
d->config->endGroup();
|
||||
const QStringList& list = d->trusted_devices->childGroups();
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
void KdeConnectConfig::addTrustedDevice(const QString &id, const QString &name, const QString &type)
|
||||
{
|
||||
d->config->beginGroup(TRUSTED_DEVICES);
|
||||
d->config->beginGroup(id);
|
||||
d->config->setValue("name", name);
|
||||
d->config->setValue("type", type);
|
||||
d->config->endGroup();
|
||||
d->config->endGroup();
|
||||
d->config->sync();
|
||||
d->trusted_devices->beginGroup(id);
|
||||
d->trusted_devices->setValue("name", name);
|
||||
d->trusted_devices->setValue("type", type);
|
||||
d->trusted_devices->endGroup();
|
||||
d->trusted_devices->sync();
|
||||
|
||||
QDir().mkpath(deviceConfigDir(id).path());
|
||||
}
|
||||
|
||||
KdeConnectConfig::DeviceInfo KdeConnectConfig::getTrustedDevice(const QString &id)
|
||||
{
|
||||
d->config->beginGroup(TRUSTED_DEVICES);
|
||||
d->config->beginGroup(id);
|
||||
d->trusted_devices->beginGroup(id);
|
||||
|
||||
KdeConnectConfig::DeviceInfo info;
|
||||
info.deviceName = d->config->value("name", QLatin1String("unnamed")).toString();
|
||||
info.deviceType = d->config->value("type", QLatin1String("unknown")).toString();
|
||||
info.deviceName = d->trusted_devices->value("name", QLatin1String("unnamed")).toString();
|
||||
info.deviceType = d->trusted_devices->value("type", QLatin1String("unknown")).toString();
|
||||
|
||||
d->config->endGroup();
|
||||
d->config->endGroup();
|
||||
d->trusted_devices->endGroup();
|
||||
return info;
|
||||
}
|
||||
|
||||
void KdeConnectConfig::removeTrustedDevice(const QString &deviceId)
|
||||
{
|
||||
d->config->beginGroup(TRUSTED_DEVICES);
|
||||
d->config->beginGroup(deviceId);
|
||||
d->config->remove(QString());
|
||||
d->config->endGroup();
|
||||
d->config->endGroup();
|
||||
d->config->sync();
|
||||
d->trusted_devices->remove(deviceId);
|
||||
d->trusted_devices->sync();
|
||||
//We do not remove the config files.
|
||||
}
|
||||
|
||||
// Utility functions to set and get a value
|
||||
void KdeConnectConfig::setDeviceProperty(QString deviceId, QString key, QString value)
|
||||
{
|
||||
d->config->beginGroup(TRUSTED_DEVICES);
|
||||
d->config->beginGroup(deviceId);
|
||||
d->config->setValue(key, value);
|
||||
d->config->endGroup();
|
||||
d->config->endGroup();
|
||||
d->config->sync();
|
||||
d->trusted_devices->beginGroup(deviceId);
|
||||
d->trusted_devices->setValue(key, value);
|
||||
d->trusted_devices->endGroup();
|
||||
d->trusted_devices->sync();
|
||||
}
|
||||
|
||||
QString KdeConnectConfig::getDeviceProperty(QString deviceId, QString key, QString defaultValue)
|
||||
{
|
||||
QString value;
|
||||
d->config->beginGroup(TRUSTED_DEVICES);
|
||||
d->config->beginGroup(deviceId);
|
||||
value = d->config->value(key, defaultValue).toString();
|
||||
d->config->endGroup();
|
||||
d->config->endGroup();
|
||||
d->trusted_devices->beginGroup(deviceId);
|
||||
value = d->trusted_devices->value(key, defaultValue).toString();
|
||||
d->trusted_devices->endGroup();
|
||||
return value;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ X-KDE-Kded-load-on-demand=false
|
|||
X-KDE-Kded-phase=1
|
||||
|
||||
Name=KDE Connect
|
||||
Name[ar]=كدي المتّصل
|
||||
Name[ast]=KDE Connect
|
||||
Name[bg]=KDE Connect
|
||||
Name[bs]=Konekcija KDE
|
||||
Name[ca]=KDE Connect
|
||||
|
@ -17,12 +19,14 @@ Name[ca@valencia]=KDE Connect
|
|||
Name[cs]=KDE Connect
|
||||
Name[da]=KDE Connect
|
||||
Name[de]=KDE-Connect
|
||||
Name[el]=KDE Connect
|
||||
Name[en_GB]=KDE Connect
|
||||
Name[es]=KDE Connect
|
||||
Name[et]=KDE Connect
|
||||
Name[fi]=KDE Connect
|
||||
Name[fr]=KDE Connect
|
||||
Name[gl]=KDE Connect
|
||||
Name[he]=KDE Connect
|
||||
Name[hu]=KDE csatlakozás
|
||||
Name[it]=KDE Connect
|
||||
Name[ko]=KDE Connect
|
||||
|
@ -41,6 +45,8 @@ Name[x-test]=xxKDE Connectxx
|
|||
Name[zh_CN]=KDE Connect
|
||||
|
||||
Comment=Connect KDE with your smartphone
|
||||
Comment[ar]=أوصل كدي بهاتفك الذّكيّ
|
||||
Comment[ast]=Coneuta KDE col to preséu
|
||||
Comment[bg]=Свържете КДЕ с вашия смартфон
|
||||
Comment[bs]=Konektujte se na KDE sa Vašim mobitelom
|
||||
Comment[ca]=Connecta el KDE amb el vostre telèfon intel·ligent
|
||||
|
@ -48,12 +54,14 @@ Comment[ca@valencia]=Connecta el KDE amb el vostre telèfon intel·ligent
|
|||
Comment[cs]=Propojte KDE s vaším telefonem
|
||||
Comment[da]=Forbind KDE med din smartphone
|
||||
Comment[de]=KDE mit Ihren Smartphone verbinden
|
||||
Comment[el]=Σύνδεση του KDE με το έξυπνο τηλέφωνό σας
|
||||
Comment[en_GB]=Connect KDE with your smartphone
|
||||
Comment[es]=Conecte KDE con su teléfono móvil
|
||||
Comment[et]=KDE ühendamine oma nutitelefoniga
|
||||
Comment[fi]=Yhdistä KDE älypuhelimeesi
|
||||
Comment[fr]=Connectez KDE avec votre smartphone
|
||||
Comment[gl]=Conectar KDE co seu teléfono móbil.
|
||||
Comment[he]=חבר את KDE לפלאפון החכם שלך
|
||||
Comment[hu]=A KDE csatlakoztatása az okostelefonnal
|
||||
Comment[it]=Connetti KDE con il tuo smartphone
|
||||
Comment[ko]=KDE와 스마트폰 연결
|
||||
|
|
|
@ -8,18 +8,22 @@ OnlyShowIn=KDE;GNOME;Unity;XFCE;
|
|||
NoDisplay=true
|
||||
|
||||
Name=KDEConnect daemon
|
||||
Name[ar]=عفريت KDEConnect
|
||||
Name[ast]=Degorriu KDEConnect
|
||||
Name[bg]=Услуга KDE Connect
|
||||
Name[ca]=Dimoni del KDEConnect
|
||||
Name[ca@valencia]=Dimoni del KDEConnect
|
||||
Name[cs]=Démon KDE Connect
|
||||
Name[da]=KDEConnect-dæmon
|
||||
Name[de]=KDE-Connect-Dienst
|
||||
Name[el]=Δαίμονας του KDEConnect
|
||||
Name[en_GB]=KDEConnect daemon
|
||||
Name[es]=Demonio de KDE Connect
|
||||
Name[et]=KDEConnecti deemon
|
||||
Name[fi]=KDEConnect-taustapalvelu
|
||||
Name[fr]=Démon KDE Connect
|
||||
Name[gl]=Servizo de KDE Connect
|
||||
Name[he]=דמון KDEConnect
|
||||
Name[hu]=KDEConnect szolgáltatás
|
||||
Name[it]=Demone KDE Connect
|
||||
Name[ko]=KDE Connect 데몬
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
[Desktop Entry]
|
||||
Type=Service
|
||||
Name=Send file via KDE Connect service
|
||||
Name[ar]=أرسل ملفًّا عبر خدمة «كدي المتّصل»
|
||||
Name[ast]=Unviar ficheru pente'l serviciu KDE Connect
|
||||
Name[bg]=Изпращане на файл през услугата KDE Connect
|
||||
Name[bs]=Pošalji datoteku putem KDE Connect servisa
|
||||
Name[ca]=Envia un fitxer a través del servei KDE Connect
|
||||
|
@ -8,12 +10,14 @@ Name[ca@valencia]=Envia un fitxer a través del servei KDE Connect
|
|||
Name[cs]=Poslat soubor přes službu KDE Connect
|
||||
Name[da]=Send fil via KDE Connect-tjeneste
|
||||
Name[de]=Datei mit KDE-Connect -Dienst versenden
|
||||
Name[el]=Αποστολή αρχείου μέσω της υπηρεσίας KDE Connect
|
||||
Name[en_GB]=Send file via KDE Connect service
|
||||
Name[es]=Enviar archivo usando el servicio KDE Connect
|
||||
Name[et]=Faili saatmine KDE Connecti teenuse kaudu
|
||||
Name[fi]=Lähetä tiedosto KDE Connect -palvelulla
|
||||
Name[fr]=Envoyer un fichier via le service KDE Connect
|
||||
Name[gl]=Enviar un ficheiro mediante o servizo de KDE Connect
|
||||
Name[he]=שלח קובץ דרך שירות KDE Connect
|
||||
Name[hu]=Fájl küldése a KDE csatlakozás szolgáltatáson keresztül
|
||||
Name[it]=Invia un file tramite il servizio KDE Connect
|
||||
Name[ko]=KDE Connect 서비스로 파일 보내기
|
||||
|
@ -31,6 +35,8 @@ Name[x-test]=xxSend file via KDE Connect servicexx
|
|||
Name[zh_CN]=通过 KDE Connect 服务发送文件
|
||||
X-KDE-Library=kdeconnectfileitemaction
|
||||
X-KDE-Submenu=Connect
|
||||
X-KDE-Submenu[ar]=اتّصل,اتصل
|
||||
X-KDE-Submenu[ast]=Coneutar
|
||||
X-KDE-Submenu[bg]=Свързване
|
||||
X-KDE-Submenu[bs]=Uspostavi vezu
|
||||
X-KDE-Submenu[ca]=Connecta
|
||||
|
@ -38,12 +44,14 @@ X-KDE-Submenu[ca@valencia]=Connecta
|
|||
X-KDE-Submenu[cs]=Připojit
|
||||
X-KDE-Submenu[da]=Forbind
|
||||
X-KDE-Submenu[de]=Verbinden
|
||||
X-KDE-Submenu[el]=Σύνδεση
|
||||
X-KDE-Submenu[en_GB]=Connect
|
||||
X-KDE-Submenu[es]=Conectar
|
||||
X-KDE-Submenu[et]=Ühendus
|
||||
X-KDE-Submenu[fi]=Yhdistä
|
||||
X-KDE-Submenu[fr]=Connecter
|
||||
X-KDE-Submenu[gl]=Conectar
|
||||
X-KDE-Submenu[he]=חיבור
|
||||
X-KDE-Submenu[hu]=Csatlakozás
|
||||
X-KDE-Submenu[it]=Connetti
|
||||
X-KDE-Submenu[ko]=연결
|
||||
|
|
|
@ -45,6 +45,7 @@ DeviceDbusInterface::DeviceDbusInterface(const QString& id, QObject* parent)
|
|||
, m_id(id)
|
||||
{
|
||||
connect(this, &OrgKdeKdeconnectDeviceInterface::trustedChanged, this, &DeviceDbusInterface::trustedChangedProxy);
|
||||
connect(this, &OrgKdeKdeconnectDeviceInterface::nameChanged, this, &DeviceDbusInterface::nameChangedProxy);
|
||||
}
|
||||
|
||||
DeviceDbusInterface::~DeviceDbusInterface()
|
||||
|
|
|
@ -60,6 +60,7 @@ class KDECONNECTINTERFACES_EXPORT DeviceDbusInterface
|
|||
// TODO: Workaround because OrgKdeKdeconnectDeviceInterface is not generating
|
||||
// the signals for the properties
|
||||
Q_PROPERTY(bool isTrusted READ isTrusted NOTIFY trustedChangedProxy)
|
||||
Q_PROPERTY(QString name READ name NOTIFY nameChangedProxy)
|
||||
|
||||
public:
|
||||
explicit DeviceDbusInterface(const QString& deviceId, QObject* parent = nullptr);
|
||||
|
@ -69,6 +70,7 @@ public:
|
|||
Q_SCRIPTABLE void pluginCall(const QString &plugin, const QString &method);
|
||||
|
||||
Q_SIGNALS:
|
||||
void nameChangedProxy(const QString &name);
|
||||
void trustedChangedProxy(bool paired);
|
||||
|
||||
private:
|
||||
|
|
|
@ -83,6 +83,10 @@ KdeConnectKcm::KdeConnectKcm(QWidget *parent, const QVariantList&)
|
|||
|
||||
kcmUi->rename_label->setText(daemon->announcedName());
|
||||
kcmUi->rename_edit->setText(daemon->announcedName());
|
||||
connect(daemon, SIGNAL(announcedNameChanged(QString)),
|
||||
kcmUi->rename_edit, SLOT(setText(QString)));
|
||||
connect(daemon, SIGNAL(announcedNameChanged(QString)),
|
||||
kcmUi->rename_label, SLOT(setText(QString)));
|
||||
setRenameMode(false);
|
||||
|
||||
setButtons(KCModule::Help | KCModule::NoAdditionalButton);
|
||||
|
|
|
@ -11,6 +11,8 @@ X-KDE-ParentApp=kcontrol
|
|||
X-KDE-System-Settings-Parent-Category=hardware
|
||||
|
||||
Name=KDE Connect
|
||||
Name[ar]=كدي المتّصل
|
||||
Name[ast]=KDE Connect
|
||||
Name[bg]=KDE Connect
|
||||
Name[bs]=Konekcija KDE
|
||||
Name[ca]=KDE Connect
|
||||
|
@ -18,12 +20,14 @@ Name[ca@valencia]=KDE Connect
|
|||
Name[cs]=KDE Connect
|
||||
Name[da]=KDE Connect
|
||||
Name[de]=KDE-Connect
|
||||
Name[el]=KDE Connect
|
||||
Name[en_GB]=KDE Connect
|
||||
Name[es]=KDE Connect
|
||||
Name[et]=KDE Connect
|
||||
Name[fi]=KDE Connect
|
||||
Name[fr]=KDE Connect
|
||||
Name[gl]=KDE Connect
|
||||
Name[he]=KDE Connect
|
||||
Name[hu]=KDE csatlakozás
|
||||
Name[it]=KDE Connect
|
||||
Name[ko]=KDE Connect
|
||||
|
@ -42,17 +46,21 @@ Name[x-test]=xxKDE Connectxx
|
|||
Name[zh_CN]=KDE Connect
|
||||
|
||||
Comment=Connect and sync your devices
|
||||
Comment[ar]=اتّصل وزامن أجهزتك
|
||||
Comment[ast]=Coneuta y sincroniza los tos preseos
|
||||
Comment[ca]=Connecta i sincronitza els vostres dispositius
|
||||
Comment[ca@valencia]=Connecta i sincronitza els vostres dispositius
|
||||
Comment[cs]=Připojte a synchronizujte svá zařízení
|
||||
Comment[da]=Forbind og synkronisér dine enheder
|
||||
Comment[de]=Verbinden und Abgleichen Ihrer Geräte
|
||||
Comment[el]=Σύνδεση και συγχρονισμός των συσκευών σας
|
||||
Comment[en_GB]=Connect and sync your devices
|
||||
Comment[es]=Conectar y sincronizar sus dispositivos
|
||||
Comment[et]=Oma seadmete ühendamine ja sünkroonimine
|
||||
Comment[fi]=Yhdistä ja synkronoi laitteitasi
|
||||
Comment[fr]=Connectez et synchronisez vos périphériques
|
||||
Comment[gl]=Conecte e sincronice os seus dispositivos.
|
||||
Comment[he]=חבר וסנכרן את ההתקנים שלך
|
||||
Comment[hu]=Csatlakoztassa és szinkronizálja eszközeit
|
||||
Comment[it]=Connetti e sincronizza i tuoi dispositivi
|
||||
Comment[ko]=내 장치에 연결하고 동기화
|
||||
|
@ -70,6 +78,8 @@ Comment[x-test]=xxConnect and sync your devicesxx
|
|||
Comment[zh_CN]=连接并同步您的设备
|
||||
|
||||
X-KDE-Keywords=Network,Android,Devices
|
||||
X-KDE-Keywords[ar]=شبكة,أندرويد,اندرويد,جهاز,أجهزة
|
||||
X-KDE-Keywords[ast]=Rede,Android,Preseos
|
||||
X-KDE-Keywords[bg]=Мрежа,Андроид,Устройства
|
||||
X-KDE-Keywords[bs]=Mreža,Android,Uređaji
|
||||
X-KDE-Keywords[ca]=Xarxa,Android,Dispositius
|
||||
|
@ -77,12 +87,14 @@ X-KDE-Keywords[ca@valencia]=Xarxa,Android,Dispositius
|
|||
X-KDE-Keywords[cs]=Síť,Android,Zařízení
|
||||
X-KDE-Keywords[da]=Netværk,Android,Enheder
|
||||
X-KDE-Keywords[de]=Netzwerk,Android,Geräte
|
||||
X-KDE-Keywords[el]=Δίκτυο,Android,Συσκευές
|
||||
X-KDE-Keywords[en_GB]=Network,Android,Devices
|
||||
X-KDE-Keywords[es]=Red,Android,Dispositivos
|
||||
X-KDE-Keywords[et]=Võrk,Android,Seadmed
|
||||
X-KDE-Keywords[fi]=Verkko,Android,Laitteet
|
||||
X-KDE-Keywords[fr]=Réseau,Android,Périphériques
|
||||
X-KDE-Keywords[gl]=rede,Android,dispositivos
|
||||
X-KDE-Keywords[he]=Network,Android,Devices,רשתות,אנדרואיד,התקנים,מכשירים
|
||||
X-KDE-Keywords[hu]=Hálózat,Android,Eszközök
|
||||
X-KDE-Keywords[it]=Rete,Android,Dispositivi
|
||||
X-KDE-Keywords[ko]=Network,Android,Devices,네트워크,안드로이드,장치
|
||||
|
|
|
@ -4,16 +4,20 @@ Icon=kdeconnect
|
|||
Terminal=false
|
||||
Exec=kcmshell5 kcm_kdeconnect
|
||||
Name=KDE Connect Settings
|
||||
Name[ar]=إعدادات كدي المتّصل
|
||||
Name[ast]=Axustes KDE Connect
|
||||
Name[ca]=Arranjament del KDE Connect
|
||||
Name[ca@valencia]=Arranjament del KDE Connect
|
||||
Name[cs]=Nastavení KDE Connect
|
||||
Name[da]=Indstilling af KDE Connect
|
||||
Name[de]=KDE-Connect-Einstellungen
|
||||
Name[el]=Ρυθμίσεις KDE Connect
|
||||
Name[en_GB]=KDE Connect Settings
|
||||
Name[es]=Ajustes de KDE Connect
|
||||
Name[et]=KDE Connecti seadistused
|
||||
Name[fi]=KDE Connectin asetukset
|
||||
Name[gl]=Configuración de KDE Connect
|
||||
Name[he]=הגדרות KDE Connect
|
||||
Name[hu]=A KDE Connect beállításai
|
||||
Name[it]=Impostazioni di KDE Connect
|
||||
Name[ko]=KDE Connect 설정
|
||||
|
@ -29,17 +33,21 @@ Name[uk]=Параметри KDE Connect
|
|||
Name[x-test]=xxKDE Connect Settingsxx
|
||||
Name[zh_CN]=KDE Connect 设置
|
||||
GenericName=Connect and sync your devices
|
||||
GenericName[ar]=اتّصل وزامن أجهزتك
|
||||
GenericName[ast]=Coneuta y sincroniza los tos preseos
|
||||
GenericName[ca]=Connecta i sincronitza els vostres dispositius
|
||||
GenericName[ca@valencia]=Connecta i sincronitza els vostres dispositius
|
||||
GenericName[cs]=Připojte a synchronizujte svá zařízení
|
||||
GenericName[da]=Forbind og synkronisér dine enheder
|
||||
GenericName[de]=Verbinden und Abgleichen Ihrer Geräte
|
||||
GenericName[el]=Σύνδεση και συγχρονισμός των συσκευών σας
|
||||
GenericName[en_GB]=Connect and sync your devices
|
||||
GenericName[es]=Conectar y sincronizar sus dispositivos
|
||||
GenericName[et]=Oma seadmete ühendamine ja sünkroonimine
|
||||
GenericName[fi]=Yhdistä ja synkronoi laitteitasi
|
||||
GenericName[fr]=Connectez et synchronisez vos périphériques
|
||||
GenericName[gl]=Conecte e sincronice os seus dispositivos
|
||||
GenericName[he]=Connect and sync your devices
|
||||
GenericName[hu]=Csatlakoztassa és szinkronizálja eszközeit
|
||||
GenericName[it]=Connetti e sincronizza i tuoi dispositivi
|
||||
GenericName[ko]=내 장치에 연결하고 동기화
|
||||
|
|
|
@ -86,16 +86,13 @@ void KioKdeconnect::listAllDevices()
|
|||
//TODO: Change to all devices and show different icons for connected and disconnected?
|
||||
QStringList devices = m_dbusInterface->devices(true, true);
|
||||
|
||||
totalSize(devices.length());
|
||||
|
||||
int i = 0;
|
||||
Q_FOREACH(const QString& deviceId, devices) {
|
||||
|
||||
DeviceDbusInterface interface(deviceId);
|
||||
|
||||
if (!interface.hasPlugin("kdeconnect_sftp")) continue;
|
||||
|
||||
const QString target = QString("kdeconnect://").append(deviceId).append("/");
|
||||
const QString path = QString("kdeconnect://").append(deviceId).append("/");
|
||||
const QString name = interface.name();
|
||||
const QString icon = "kdeconnect";
|
||||
|
||||
|
@ -103,15 +100,20 @@ void KioKdeconnect::listAllDevices()
|
|||
entry.insert(KIO::UDSEntry::UDS_NAME, name);
|
||||
entry.insert(KIO::UDSEntry::UDS_ICON_NAME, icon);
|
||||
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
|
||||
entry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH);
|
||||
entry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
|
||||
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "");
|
||||
entry.insert(KIO::UDSEntry::UDS_URL, target);
|
||||
entry.insert(KIO::UDSEntry::UDS_URL, path);
|
||||
listEntry(entry);
|
||||
|
||||
processedSize(i++);
|
||||
|
||||
}
|
||||
|
||||
// We also need a non-null and writable UDSentry for "."
|
||||
KIO::UDSEntry entry;
|
||||
entry.insert(KIO::UDSEntry::UDS_NAME, QStringLiteral("."));
|
||||
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
|
||||
entry.insert(KIO::UDSEntry::UDS_SIZE, 0);
|
||||
entry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH);
|
||||
listEntry(entry);
|
||||
|
||||
infoMessage("");
|
||||
finished();
|
||||
}
|
||||
|
@ -145,20 +147,29 @@ void KioKdeconnect::listDevice()
|
|||
|
||||
for (QVariantMap::iterator it = urls.begin(); it != urls.end(); ++it) {
|
||||
|
||||
QString path = it.key();
|
||||
QString name = it.value().toString();
|
||||
const QString path = it.key();
|
||||
const QString name = it.value().toString();
|
||||
const QString icon = QLatin1Literal("folder");
|
||||
|
||||
KIO::UDSEntry entry;
|
||||
entry.insert(KIO::UDSEntry::UDS_NAME, "files");
|
||||
entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, name);
|
||||
entry.insert(KIO::UDSEntry::UDS_ICON_NAME, "folder");
|
||||
entry.insert(KIO::UDSEntry::UDS_ICON_NAME, icon);
|
||||
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
|
||||
entry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IRGRP | S_IROTH);
|
||||
entry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
|
||||
entry.insert(KIO::UDSEntry::UDS_MIME_TYPE, "");
|
||||
entry.insert(KIO::UDSEntry::UDS_URL, QUrl::fromLocalFile(path).toString());
|
||||
listEntry(entry);
|
||||
}
|
||||
|
||||
// We also need a non-null and writable UDSentry for "."
|
||||
KIO::UDSEntry entry;
|
||||
entry.insert(KIO::UDSEntry::UDS_NAME, QStringLiteral("."));
|
||||
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
|
||||
entry.insert(KIO::UDSEntry::UDS_SIZE, 0);
|
||||
entry.insert(KIO::UDSEntry::UDS_ACCESS, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH);
|
||||
listEntry(entry);
|
||||
|
||||
infoMessage("");
|
||||
finished();
|
||||
|
||||
|
|
|
@ -4,17 +4,21 @@
|
|||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-2.0+</project_license>
|
||||
<name>KDE Connect</name>
|
||||
<name xml:lang="ar">كدي المتّصل</name>
|
||||
<name xml:lang="ast">KDE Connect</name>
|
||||
<name xml:lang="ca">KDE Connect</name>
|
||||
<name xml:lang="ca-valencia">KDE Connect</name>
|
||||
<name xml:lang="cs">KDE Connect</name>
|
||||
<name xml:lang="da">KDE Connect</name>
|
||||
<name xml:lang="de">KDE-Connect</name>
|
||||
<name xml:lang="el">KDE Connect</name>
|
||||
<name xml:lang="en-GB">KDE Connect</name>
|
||||
<name xml:lang="es">KDE Connect</name>
|
||||
<name xml:lang="et">KDE Connect</name>
|
||||
<name xml:lang="fi">KDE Connect</name>
|
||||
<name xml:lang="fr">KDE Connect</name>
|
||||
<name xml:lang="gl">KDE Connect</name>
|
||||
<name xml:lang="he">KDE Connect</name>
|
||||
<name xml:lang="it">KDE Connect</name>
|
||||
<name xml:lang="ko">KDE Connect</name>
|
||||
<name xml:lang="nl">KDE Connect</name>
|
||||
|
@ -28,17 +32,21 @@
|
|||
<name xml:lang="x-test">xxKDE Connectxx</name>
|
||||
<name xml:lang="zh-CN">KDE Connect</name>
|
||||
<summary>Seamless connection of your devices</summary>
|
||||
<summary xml:lang="ar">اتّصال سلس بين أجهزتك</summary>
|
||||
<summary xml:lang="ast">Conexón de los tos preseos ensin esfuerciu</summary>
|
||||
<summary xml:lang="ca">Connexió transparent amb els vostres dispositius</summary>
|
||||
<summary xml:lang="ca-valencia">Connexió transparent amb els vostres dispositius</summary>
|
||||
<summary xml:lang="cs">Snadné propojení vašich zařízení</summary>
|
||||
<summary xml:lang="da">Supernem forbindelse mellem dine enheder</summary>
|
||||
<summary xml:lang="da">Umærkbar forbindelse mellem dine enheder</summary>
|
||||
<summary xml:lang="de">Nahtlose Verbindung zu Ihren Geräten</summary>
|
||||
<summary xml:lang="el">Απρόσκοπτη σύνδεση των συσκευών σας</summary>
|
||||
<summary xml:lang="en-GB">Seamless connection of your devices</summary>
|
||||
<summary xml:lang="es">Conexión sin interrupciones de sus dispositivos</summary>
|
||||
<summary xml:lang="et">Sujuv ühendus oma seadmetega</summary>
|
||||
<summary xml:lang="fi">Saumaton yhteys laitteisiisi</summary>
|
||||
<summary xml:lang="fr">Connecter vos périphériques avec facilité</summary>
|
||||
<summary xml:lang="gl">Conexión constante entre dispositivos</summary>
|
||||
<summary xml:lang="he">חיבור מהיר בין ההתקנים שלך</summary>
|
||||
<summary xml:lang="it">Connessione trasparente dei tuoi dispositivi</summary>
|
||||
<summary xml:lang="ko">장치와 항상 연결하기</summary>
|
||||
<summary xml:lang="nl">Naadloze verbinding met uw apparaten</summary>
|
||||
|
@ -53,17 +61,21 @@
|
|||
<summary xml:lang="zh-CN">无缝连接您的设备</summary>
|
||||
<description>
|
||||
<p>KDE Connect provides integration between your Android phone and your desktop.</p>
|
||||
<p xml:lang="ar">يوفّر «كدي المتصّل» التّكامل بين هاتف أندرويد وسطح المكتب.</p>
|
||||
<p xml:lang="ast">KDE Connect forne integración ente'l to preséu Android y el to escritoriu.</p>
|
||||
<p xml:lang="ca">El KDE Connect proporciona la integració entre el telèfon Android i el vostre escriptori.</p>
|
||||
<p xml:lang="ca-valencia">El KDE Connect proporciona la integració entre el telèfon Android i el vostre escriptori.</p>
|
||||
<p xml:lang="cs">KDE Connect poskytuje integraci mezi vaším telefonem s Androidem a vaší pracovní plochou.</p>
|
||||
<p xml:lang="da">KDE Connect giver integration mellem din Android-telefon og din desktop.</p>
|
||||
<p xml:lang="de">KDE Connect bietet Integrationsdienste zwischen Ihrem Android-Telefon und Ihrem Desktop-Computer.</p>
|
||||
<p xml:lang="el">Το KDE Connect παρέχει ενοποίηση μεταξύ του Android κινητού σας και του γραφικού περιβάλλοντος του υπολογιστή σας.</p>
|
||||
<p xml:lang="en-GB">KDE Connect provides integration between your Android phone and your desktop.</p>
|
||||
<p xml:lang="es">KDE Connect proporciona integración entre su teléfono Android y su escritorio.</p>
|
||||
<p xml:lang="et">KDE Connect võimaldab kokku siduda oma Androidi telefoni ja arvuti töölaua.</p>
|
||||
<p xml:lang="fi">KDE Connect tarjoaa integraation Android-puhelimesi ja työpöytäsi välillä.</p>
|
||||
<p xml:lang="fr">KDE Connect permet d'intégrer votre téléphone Android avec votre bureau.</p>
|
||||
<p xml:lang="gl">KDE Connect fornece integración entre os seus teléfonos con Android e o seu computador de escritorio.</p>
|
||||
<p xml:lang="he">KDE Connect מספק שילוב בין מכשירי אנדרואיד לשולחן העבודה</p>
|
||||
<p xml:lang="it">KDE Connect fornisce integrazione tra il tuo telefono Android e il tuo desktop.</p>
|
||||
<p xml:lang="ko">KDE Connect는 안드로이드 휴대폰과 데스크톱을 연결합니다.</p>
|
||||
<p xml:lang="nl">KDE Connect biedt integratie tussen uw Android telefoon en uw bureaublad.</p>
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
[Desktop Entry]
|
||||
Name=KDE Connect Monitor
|
||||
Name[ar]=مرقاب «كدي المتّصل»
|
||||
Name[ast]=Monitor de KDE Connect
|
||||
Name[ca]=Controlador del KDE Connect
|
||||
Name[ca@valencia]=Controlador del KDE Connect
|
||||
Name[cs]=Monitor KDE Connect
|
||||
Name[da]=KDE Connect-overvåger
|
||||
Name[de]=KDE-Connect-Monitor
|
||||
Name[el]=Εφαρμογή εποπτείας του KDE Connect
|
||||
Name[en_GB]=KDE Connect Monitor
|
||||
Name[es]=Monitor de KDE Connect
|
||||
Name[et]=KDE Connecti monitor
|
||||
Name[fi]=KDE Connect -valvonta
|
||||
Name[gl]=Monitor de KDE Connect
|
||||
Name[he]=מנטר KDE Connect
|
||||
Name[hu]=KDE Connect monitor
|
||||
Name[it]=Monitor di KDE Connect
|
||||
Name[ko]=KDE Connect 모니터
|
||||
|
@ -25,16 +29,20 @@ Name[uk]=Монітор KDE Connect
|
|||
Name[x-test]=xxKDE Connect Monitorxx
|
||||
Name[zh_CN]=KDE Connect 监视器
|
||||
Comment=Display information about your devices
|
||||
Comment[ar]=اعرض معلومات عن أجهزتك
|
||||
Comment[ast]=Amuesa información tocante a los tos preseos
|
||||
Comment[ca]=Mostra la informació dels vostres dispositius
|
||||
Comment[ca@valencia]=Mostra la informació dels vostres dispositius
|
||||
Comment[cs]=Zobrazit informace o vašich zařízeních
|
||||
Comment[da]=Vis information om dine enheder
|
||||
Comment[de]=Anzeige von Informationen über Ihre Geräte
|
||||
Comment[el]=Προβολή πληροφοριών σχετικά με τις συσκευές σας
|
||||
Comment[en_GB]=Display information about your devices
|
||||
Comment[es]=Mostrar información sobre sus dispositivos
|
||||
Comment[et]=Teabe kuvamine seadmete kohta
|
||||
Comment[fi]=Näyttää tietoa laitteistasi
|
||||
Comment[gl]=Mostrar información sobre os dispositivos
|
||||
Comment[he]=הצג מידע עך ההתקנים שלך
|
||||
Comment[hu]=Információk megjelenítése az eszközeiről
|
||||
Comment[it]=Visualizza informazioni sui tuoi dispositivi
|
||||
Comment[ko]=장치 정보 표시
|
||||
|
|
|
@ -21,4 +21,4 @@ target_link_libraries(kdeconnectdeclarativeplugin
|
|||
kdeconnectinterfaces
|
||||
)
|
||||
install(TARGETS kdeconnectdeclarativeplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/kdeconnect)
|
||||
install(FILES qmldir qml/PluginChecker.qml DESTINATION ${QML_INSTALL_DIR}/org/kde/kdeconnect)
|
||||
install(FILES qmldir qml/PluginChecker.qml qml/DBusProperty.qml DESTINATION ${QML_INSTALL_DIR}/org/kde/kdeconnect)
|
||||
|
|
|
@ -86,6 +86,11 @@ void KdeConnectDeclarativePlugin::registerTypes(const char* uri)
|
|||
qmlRegisterUncreatableType<LockDeviceDbusInterface>(uri, 1, 0, "LockDeviceDbusInterface", QStringLiteral("You're not supposed to instantiate interfacess"));
|
||||
qmlRegisterUncreatableType<FindMyPhoneDeviceDbusInterface>(uri, 1, 0, "FindMyPhoneDbusInterface", QStringLiteral("You're not supposed to instantiate interfacess"));
|
||||
qmlRegisterUncreatableType<DeviceDbusInterface>(uri, 1, 0, "DeviceDbusInterface", QStringLiteral("You're not supposed to instantiate interfacess"));
|
||||
qmlRegisterSingletonType<DaemonDbusInterface>(uri, 1, 0, "DaemonDbusInterface",
|
||||
[](QQmlEngine*, QJSEngine*) -> QObject* {
|
||||
return new DaemonDbusInterface;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void KdeConnectDeclarativePlugin::initializeEngine(QQmlEngine* engine, const char* uri)
|
||||
|
|
69
plasmoid/declarativeplugin/qml/DBusProperty.qml
Normal file
69
plasmoid/declarativeplugin/qml/DBusProperty.qml
Normal file
|
@ -0,0 +1,69 @@
|
|||
/**
|
||||
* Copyright 2016 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License or (at your option) version 3 or any later version
|
||||
* accepted by the membership of KDE e.V. (or its successor approved
|
||||
* by the membership of KDE e.V.), which shall act as a proxy
|
||||
* defined in Section 14 of version 3 of the license.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQml 2.2
|
||||
import org.kde.kdeconnect 1.0
|
||||
|
||||
QtObject {
|
||||
id: prop
|
||||
property QtObject object: null
|
||||
property string read
|
||||
property string change: read+"Changed"
|
||||
|
||||
Component.onCompleted: get();
|
||||
|
||||
onChangeChanged: {
|
||||
if (object) {
|
||||
var theSignal = object[change];
|
||||
if (theSignal) {
|
||||
theSignal.connect(valueReceived);
|
||||
} else {
|
||||
console.warn("couldn't find signal", change, "for", object)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function valueReceived(val) {
|
||||
if (!val) {
|
||||
get();
|
||||
} else {
|
||||
_value = val;
|
||||
}
|
||||
}
|
||||
|
||||
property var defaultValue
|
||||
property var _value: defaultValue
|
||||
readonly property var value: _value
|
||||
|
||||
readonly property var v: DBusAsyncResponse {
|
||||
id: response
|
||||
autoDelete: false
|
||||
onSuccess: {
|
||||
prop._value = result;
|
||||
}
|
||||
onError: {
|
||||
console.warn("failed call", object, read, write, change)
|
||||
}
|
||||
}
|
||||
|
||||
function get() {
|
||||
response.setPendingCall(object[read]());
|
||||
}
|
||||
}
|
|
@ -26,13 +26,12 @@ QtObject {
|
|||
|
||||
id: root
|
||||
|
||||
property string deviceId: ""
|
||||
property alias device: conn.target
|
||||
property string pluginName: ""
|
||||
readonly property variant device: DeviceDbusInterfaceFactory.create(deviceId)
|
||||
property bool available: false
|
||||
|
||||
property Connections connection: Connections {
|
||||
target: device
|
||||
readonly property Connections connection: Connections {
|
||||
id: conn
|
||||
onPluginsChanged: pluginsChanged()
|
||||
}
|
||||
|
||||
|
|
|
@ -2,3 +2,4 @@ module org.kde.kdeconnect
|
|||
plugin kdeconnectdeclarativeplugin
|
||||
|
||||
PluginChecker 1.0 PluginChecker.qml
|
||||
DBusProperty 1.0 DBusProperty.qml
|
||||
|
|
|
@ -27,8 +27,7 @@ QtObject {
|
|||
|
||||
id: root
|
||||
|
||||
property alias deviceId: checker.deviceId
|
||||
readonly property alias device: checker.device
|
||||
property alias device: checker.device
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||
|
@ -55,7 +54,7 @@ QtObject {
|
|||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
battery = DeviceBatteryDbusInterfaceFactory.create(deviceId)
|
||||
battery = DeviceBatteryDbusInterfaceFactory.create(device.id())
|
||||
|
||||
battery.stateChanged.connect(function(c) {charging = c})
|
||||
battery.chargeChanged.connect(function(c) {charge = c})
|
||||
|
|
|
@ -27,9 +27,7 @@ import org.kde.kdeconnect 1.0
|
|||
PlasmaComponents.ListItem
|
||||
{
|
||||
id: root
|
||||
property string deviceId: model.deviceId
|
||||
|
||||
|
||||
readonly property QtObject device: DeviceDbusInterfaceFactory.create(model.deviceId)
|
||||
|
||||
Column {
|
||||
width: parent.width
|
||||
|
@ -53,7 +51,7 @@ PlasmaComponents.ListItem
|
|||
{
|
||||
FindMyPhone {
|
||||
id: findmyphone
|
||||
deviceId: root.deviceId
|
||||
device: root.device
|
||||
}
|
||||
|
||||
id: ring
|
||||
|
@ -71,7 +69,7 @@ PlasmaComponents.ListItem
|
|||
{
|
||||
Sftp {
|
||||
id: sftp
|
||||
deviceId: root.deviceId
|
||||
device: root.device
|
||||
}
|
||||
|
||||
id: browse
|
||||
|
@ -93,7 +91,7 @@ PlasmaComponents.ListItem
|
|||
|
||||
Battery {
|
||||
id: battery
|
||||
deviceId: root.deviceId
|
||||
device: root.device
|
||||
}
|
||||
|
||||
sectionDelegate: true
|
||||
|
@ -129,7 +127,7 @@ PlasmaComponents.ListItem
|
|||
id: notificationsView
|
||||
model: NotificationsModel {
|
||||
id: notificationsModel
|
||||
deviceId: root.deviceId
|
||||
deviceId: root.device.id()
|
||||
}
|
||||
delegate: PlasmaComponents.ListItem {
|
||||
PlasmaComponents.Label {
|
||||
|
|
|
@ -27,8 +27,7 @@ QtObject {
|
|||
|
||||
id: root
|
||||
|
||||
property alias deviceId: checker.deviceId
|
||||
readonly property alias device: checker.device
|
||||
property alias device: checker.device
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||
|
@ -46,7 +45,7 @@ QtObject {
|
|||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
findMyPhone = FindMyPhoneDbusInterfaceFactory.create(deviceId)
|
||||
findMyPhone = FindMyPhoneDbusInterfaceFactory.create(device.id())
|
||||
} else {
|
||||
findMyPhone = null
|
||||
}
|
||||
|
|
|
@ -27,8 +27,7 @@ QtObject {
|
|||
|
||||
id: root
|
||||
|
||||
property alias deviceId: checker.deviceId
|
||||
readonly property alias device: checker.device
|
||||
property alias device: checker.device
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property PluginChecker pluginChecker: PluginChecker {
|
||||
|
@ -45,7 +44,7 @@ QtObject {
|
|||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
sftp = SftpDbusInterfaceFactory.create(deviceId)
|
||||
sftp = SftpDbusInterfaceFactory.create(device.id())
|
||||
} else {
|
||||
sftp = null
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
[Desktop Entry]
|
||||
Name=KDE Connect
|
||||
Name[ar]=كدي المتّصل
|
||||
Name[ast]=KDE Connect
|
||||
Name[bg]=KDE Connect
|
||||
Name[bs]=Konekcija KDE
|
||||
Name[ca]=KDE Connect
|
||||
|
@ -7,12 +9,14 @@ Name[ca@valencia]=KDE Connect
|
|||
Name[cs]=KDE Connect
|
||||
Name[da]=KDE Connect
|
||||
Name[de]=KDE-Connect
|
||||
Name[el]=KDE Connect
|
||||
Name[en_GB]=KDE Connect
|
||||
Name[es]=KDE Connect
|
||||
Name[et]=KDE Connect
|
||||
Name[fi]=KDE Connect
|
||||
Name[fr]=KDE Connect
|
||||
Name[gl]=KDE Connect
|
||||
Name[he]=KDE Connect
|
||||
Name[hu]=KDE csatlakozás
|
||||
Name[it]=KDE Connect
|
||||
Name[ko]=KDE Connect
|
||||
|
@ -30,6 +34,8 @@ Name[uk]=З’єднання KDE
|
|||
Name[x-test]=xxKDE Connectxx
|
||||
Name[zh_CN]=KDE Connect
|
||||
Comment=Show notifications from your devices using KDE Connect
|
||||
Comment[ar]=أظهر الإخطارات من أجهزتك باستخدام «كدي المتّصل»
|
||||
Comment[ast]=Amuesa avisos de los tos preseos usando KDE Connect
|
||||
Comment[bg]=Показване на уведомления от вашите устройства чрез KDE Connect
|
||||
Comment[bs]=Prikaži obavlještenja sa uređaja koji koriste KDE konekciju
|
||||
Comment[ca]=Mostra les notificacions dels vostres dispositius emprant el KDE Connect
|
||||
|
@ -37,12 +43,14 @@ Comment[ca@valencia]=Mostra les notificacions dels vostres dispositius emprant e
|
|||
Comment[cs]=Zobrazit upozornění z vašich zařízení pomocí KDE Connect
|
||||
Comment[da]=Vis bekendtgørelser fra dine enheder med KDE Connect
|
||||
Comment[de]=Zeigt Benachrichtigungen von Ihren Geräten mit KDE-Connect
|
||||
Comment[el]=Προβολή ειδοποιήσεων από τις συσκευές σας με το KDE Connect
|
||||
Comment[en_GB]=Show notifications from your devices using KDE Connect
|
||||
Comment[es]=Mostrar notificaciones de sus dispositivos usando KDE Connect
|
||||
Comment[et]=Seadmete märguannete näitamine KDE Connecti vahendusel
|
||||
Comment[fi]=Näytä laitteidesi ilmoitukset KDE Connectilla
|
||||
Comment[fr]=Afficher les notifications provenant de vos périphériques à l'aide de KDE Connect
|
||||
Comment[gl]=Mostrar notificacións de dispositivos usando KDE Connect.
|
||||
Comment[he]=הראה התראות מההתקן שלך באמצעות KDE Connect
|
||||
Comment[hu]=Az eszközökről származó értesítések megjelenítése a KDE csatlakozás használatával
|
||||
Comment[it]=Mostra le notifiche dei tuoi dispositivi tramite KDE Connect
|
||||
Comment[ko]=KDE Connect로 장치에 표시된 알림 보기
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Show your phone battery next to your computer battery",
|
||||
"Description[ar]": "أظهر بطّاريّة الهاتف بجانب بطّاريّة الحاسوب",
|
||||
"Description[ast]": "Amuesa la batería del teléfonu cabo la del ordenador",
|
||||
"Description[ca@valencia]": "Mostra la bateria del telèfon al costat de la bateria de l'ordinador",
|
||||
"Description[ca]": "Mostra la bateria del telèfon al costat de la bateria de l'ordinador",
|
||||
"Description[cs]": "Zobrazit baterii vedle baterie počítače",
|
||||
"Description[da]": "Vis dit telefonbatteri ved siden af dit computerbatteri",
|
||||
"Description[de]": "Zeigt den Akku Ihres Telefons neben dem Akku des Rechners",
|
||||
"Description[el]": "Εμφάνιση μπαταρίας συσκευής δίπλα στη μπαταρία του υπολογιστή",
|
||||
"Description[es]": "Mostrar la batería del teléfono junto a la batería del equipo",
|
||||
"Description[et]": "Telefoniaku näitamine otse arvutiaku kõrval",
|
||||
"Description[fi]": "Näytä puhelimesi akku tietokoneen akun rinnalla",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_battery",
|
||||
"License": "GPL",
|
||||
"Name": "Battery monitor",
|
||||
"Name[ar]": "مرقاب البطّاريّة",
|
||||
"Name[ast]": "Monitor de batería",
|
||||
"Name[ca@valencia]": "Monitor de la bateria",
|
||||
"Name[ca]": "Monitor de la bateria",
|
||||
"Name[cs]": "Monitor baterie",
|
||||
"Name[da]": "Batteriovervågning",
|
||||
"Name[de]": "Akkuüberwachung",
|
||||
"Name[el]": "Παρακολούθηση μπαταρίας",
|
||||
"Name[es]": "Monitor de batería",
|
||||
"Name[et]": "Aku jälgija",
|
||||
"Name[fi]": "Akkuvalvonta",
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Share the clipboard between devices",
|
||||
"Description[ar]": "شارك الحافظة بين الجهازين",
|
||||
"Description[ast]": "Comparte'l cartafueyu ente los preseos",
|
||||
"Description[ca@valencia]": "Comparteix el porta-retalls entre dispositius",
|
||||
"Description[ca]": "Comparteix el porta-retalls entre dispositius",
|
||||
"Description[cs]": "Sdílet obsah schránky mezi zařízeními",
|
||||
"Description[da]": "Del udklipsholderen mellem enheder",
|
||||
"Description[de]": "Die Zwischenablage mit Geräten teilen",
|
||||
"Description[el]": "Διαμοιρασμός του προχείρου μεταξύ συσκευών",
|
||||
"Description[es]": "Compartir portapapeles entre dispositivos",
|
||||
"Description[et]": "Lõikepuhvri jagamine seadmete vahel",
|
||||
"Description[fi]": "Jaa leikepöytä laitteiden välillä",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_clipboard",
|
||||
"License": "GPL",
|
||||
"Name": "Clipboard",
|
||||
"Name[ar]": "الحافظة",
|
||||
"Name[ast]": "Cartafueyu",
|
||||
"Name[ca@valencia]": "Porta-retalls",
|
||||
"Name[ca]": "Porta-retalls",
|
||||
"Name[cs]": "Schránka",
|
||||
"Name[da]": "Udklipsholder",
|
||||
"Name[de]": "Zwischenablage",
|
||||
"Name[el]": "Πρόχειρο",
|
||||
"Name[es]": "Portapapeles",
|
||||
"Name[et]": "Lõikepuhver",
|
||||
"Name[fi]": "Leikepöytä",
|
||||
|
|
|
@ -13,14 +13,18 @@
|
|||
}
|
||||
],
|
||||
"Description": "Find your lost phone by making it play an alarm sound",
|
||||
"Description[ar]": "جِد هاتفك الضّائع بتشغيل صوت المنبّه",
|
||||
"Description[ast]": "Alcuentra'l to preséu perdíu faciéndolu sonar ",
|
||||
"Description[ca@valencia]": "Troba el vostre telèfon perdut fent que reproduïsca un so d'alarma",
|
||||
"Description[ca]": "Troba el vostre telèfon perdut fent que reprodueixi un so d'alarma",
|
||||
"Description[cs]": "Najděte dsvůj telefon tím, že jej necháte přehrát zvuk upomínky",
|
||||
"Description[da]": "Find din forsvundne telefon ved at få den til at afspille en alarm",
|
||||
"Description[de]": "Finden Sie Ihr verlegtes Telefon, indem Sie mit ihm eine Warnton abspielen",
|
||||
"Description[el]": "Βρείτε το χαμένο σας τηλέφωνο με ηχητική ειδοποίηση",
|
||||
"Description[es]": "Encuentre su teléfono perdido haciéndole reproducir un sonido de alarma",
|
||||
"Description[et]": "Kaotsi läinud telefoni leidmine sellel häireheli esitamisega",
|
||||
"Description[fi]": "Löydä hukkaamasi puhelin laittamalla se soittamaan hälytysääntä",
|
||||
"Description[gl]": "Reproducir un son de alarma nun teléfono móbil perdido para atopalo.",
|
||||
"Description[it]": "Trova il tuo telefono smarrito facendogli suonare un allarme sonoro",
|
||||
"Description[nl]": "Zoek uw verloren telefoon door het een wekkersignaal te laten spelen",
|
||||
"Description[pl]": "Znajdź twój zgubiony telefon odgrywając na nim dźwięk",
|
||||
|
@ -36,13 +40,17 @@
|
|||
"Id": "kdeconnect_findmyphone",
|
||||
"License": "GPL",
|
||||
"Name": "Ring my phone",
|
||||
"Name[ar]": "رنّ هاتفي",
|
||||
"Name[ast]": "Alcontrar el mio teléfonu",
|
||||
"Name[ca@valencia]": "Fes sonar el meu telèfon",
|
||||
"Name[ca]": "Fes sonar el meu telèfon",
|
||||
"Name[cs]": "Prozvonit můj telefon",
|
||||
"Name[da]": "Ring min telefon op",
|
||||
"Name[de]": "Mein Telefon anklingeln",
|
||||
"Name[el]": "Κουδούνισμα του τηλεφώνου μου",
|
||||
"Name[es]": "Hacer sonar mi teléfono",
|
||||
"Name[et]": "Helista minu telefonile",
|
||||
"Name[gl]": "Facer soar o meu móbil",
|
||||
"Name[it]": "Fai squillare il mio telefono",
|
||||
"Name[nl]": "Bel mijn telefoon",
|
||||
"Name[pl]": "Dzwoń z mojego telefonu",
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
[Global]
|
||||
IconName=kdeconnect
|
||||
Name=KDE Connect
|
||||
Name[ar]=كدي المتّصل
|
||||
Name[ast]=KDE Connect
|
||||
Name[bg]=KDE Connect
|
||||
Name[bs]=Konekcija KDE
|
||||
Name[ca]=KDE Connect
|
||||
|
@ -8,12 +10,14 @@ Name[ca@valencia]=KDE Connect
|
|||
Name[cs]=KDE Connect
|
||||
Name[da]=KDE Connect
|
||||
Name[de]=KDE-Connect
|
||||
Name[el]=KDE Connect
|
||||
Name[en_GB]=KDE Connect
|
||||
Name[es]=KDE Connect
|
||||
Name[et]=KDE Connect
|
||||
Name[fi]=KDE Connect
|
||||
Name[fr]=KDE Connect
|
||||
Name[gl]=KDE Connect
|
||||
Name[he]=KDE Connect
|
||||
Name[hu]=KDE csatlakozás
|
||||
Name[it]=KDE Connect
|
||||
Name[ko]=KDE Connect
|
||||
|
@ -31,6 +35,8 @@ Name[uk]=З’єднання KDE
|
|||
Name[x-test]=xxKDE Connectxx
|
||||
Name[zh_CN]=KDE Connect
|
||||
Comment=Notifications from your devices
|
||||
Comment[ar]=الإخطارات من أجهزتك
|
||||
Comment[ast]=Avisos de los tos preseos
|
||||
Comment[bg]=Уведомления от устройствата ви
|
||||
Comment[bs]=Notifikacija sa Vašeg uređaja
|
||||
Comment[ca]=Notificacions dels vostres dispositius
|
||||
|
@ -38,12 +44,14 @@ Comment[ca@valencia]=Notificacions dels vostres dispositius
|
|||
Comment[cs]=Oznamování z vašich zařízení
|
||||
Comment[da]=Bekendtgørelser fra dine enheder
|
||||
Comment[de]=Benachrichtigungen von Ihren Geräten
|
||||
Comment[el]=Ειδοποιήσεις από τις συσκευές σας
|
||||
Comment[en_GB]=Notifications from your devices
|
||||
Comment[es]=Notificaciones de sus dispositivos
|
||||
Comment[et]=Seadmete märguanded
|
||||
Comment[fi]=Laitteesi ilmoitukset
|
||||
Comment[fr]=Notifications provenant de vos périphériques
|
||||
Comment[gl]=Notificacións de dispositivos.
|
||||
Comment[he]=התראות מההתקן שלך
|
||||
Comment[hu]=Az eszközökről származó értesítések
|
||||
Comment[it]=Notifiche dai tuoi dispositivi
|
||||
Comment[ko]=장치에 표시된 알림
|
||||
|
@ -63,6 +71,8 @@ Comment[zh_CN]=来自你设备的通知
|
|||
|
||||
[Event/pairingRequest]
|
||||
Name=Pairing Request
|
||||
Name[ar]=طلب اقتران
|
||||
Name[ast]=Solicitú d'empareyamientu
|
||||
Name[bg]=Заявка за сдвояване
|
||||
Name[bs]=Zahtjev za uparivanje
|
||||
Name[ca]=Sol·licitud d'aparellament
|
||||
|
@ -70,12 +80,14 @@ Name[ca@valencia]=Sol·licitud d'aparellament
|
|||
Name[cs]=Požadavek na párování
|
||||
Name[da]=Parringsanmodning
|
||||
Name[de]=Verbindungsanfrage
|
||||
Name[el]=Αίτημα σύζευξης
|
||||
Name[en_GB]=Pairing Request
|
||||
Name[es]=Petición de vinculación
|
||||
Name[et]=Paardumissoov
|
||||
Name[fi]=Paripyyntö
|
||||
Name[fr]=Demande d'appariement
|
||||
Name[gl]=Solicitude de emparellamento
|
||||
Name[he]=בקשת התאמה
|
||||
Name[hu]=Párosítási kérés
|
||||
Name[it]=Richiesta di associazione
|
||||
Name[ko]=연결 요청
|
||||
|
@ -92,17 +104,22 @@ Name[uk]=Запит щодо пов’язування
|
|||
Name[x-test]=xxPairing Requestxx
|
||||
Name[zh_CN]=配对请求
|
||||
Comment=Pairing request received from a device
|
||||
Comment[ar]=استُلم طلب اقتران من جهاز
|
||||
Comment[ast]=Solicitú d'empareyamientu recibida d'un preséu
|
||||
Comment[ca]=Les sol·licituds d'aparellament rebudes des d'un dispositiu
|
||||
Comment[ca@valencia]=Les sol·licituds d'aparellament rebudes des d'un dispositiu
|
||||
Comment[cs]=Požadavek na párování přijat ze zařízení
|
||||
Comment[da]=Parringsanmodning modtaget fra en enhed
|
||||
Comment[de]=Verbindungsanfrage von einem Gerät erhalten
|
||||
Comment[el]=Λήφθηκε αίτημα σύζευξης από μια συσκευή
|
||||
Comment[en_GB]=Pairing request received from a device
|
||||
Comment[es]=Petición de vinculación recibida desde un dispositivo
|
||||
Comment[et]=Seadmelt saadi paardumissoov
|
||||
Comment[fi]=Saatiin paripyyntö laitteelta
|
||||
Comment[gl]=Recibiuse unha solicitude de emparellamento dun dispositivo.
|
||||
Comment[he]=התקבלה בקשת התאמה מהתקן
|
||||
Comment[it]=Richiesta di associazione ricevuta da un dispositivo
|
||||
Comment[nl]=Verzoek om een paar te maken ontvangen van een apparaat
|
||||
Comment[nl]=Verzoek om een paar te maken ontvangen van apparaten
|
||||
Comment[pl]=Otrzymano żądanie parowania z urządzenia
|
||||
Comment[pt]=Pedido de emparelhamento recebido de um dispositivo
|
||||
Comment[pt_BR]=Solicitação de emparelhamento recebida de um dispositivo
|
||||
|
@ -114,18 +131,22 @@ Action=Popup
|
|||
|
||||
[Event/callReceived]
|
||||
Name=Incoming Call
|
||||
Name[ar]=مكالمة واردة
|
||||
Name[ast]=Llamada entrante
|
||||
Name[bg]=Входящо обаждане
|
||||
Name[ca]=Trucada entrant
|
||||
Name[ca@valencia]=Trucada entrant
|
||||
Name[cs]=Příchozí hovor
|
||||
Name[da]=Indkommende opkald
|
||||
Name[de]=Eingehender Anruf
|
||||
Name[el]=Εισερχόμενη κλήση
|
||||
Name[en_GB]=Incoming Call
|
||||
Name[es]=Llamada entrante
|
||||
Name[et]=Sisenev kõne
|
||||
Name[fi]=Saapuva puhelu
|
||||
Name[fr]=Appel entrant
|
||||
Name[gl]=Chamada entrante
|
||||
Name[he]=שיחה נכנסת
|
||||
Name[hu]=Bejövő hívás
|
||||
Name[it]=Chiamata in ingresso
|
||||
Name[ko]=수신 전화
|
||||
|
@ -142,6 +163,8 @@ Name[uk]=Вхідний дзвінок
|
|||
Name[x-test]=xxIncoming Callxx
|
||||
Name[zh_CN]=收到呼叫
|
||||
Comment=Someone is calling you
|
||||
Comment[ar]=ثمّة من يتّصل بك
|
||||
Comment[ast]=Daquién ta llamándote
|
||||
Comment[bg]=Някой ви се обажда
|
||||
Comment[bs]=Neko Vas zove
|
||||
Comment[ca]=Algú us està trucant
|
||||
|
@ -149,12 +172,14 @@ Comment[ca@valencia]=Algú vos està trucant
|
|||
Comment[cs]=Někdo vám volá
|
||||
Comment[da]=Nogen ringer til dig
|
||||
Comment[de]=Sie werden angerufen
|
||||
Comment[el]=Κάποιος σας καλεί
|
||||
Comment[en_GB]=Someone is calling you
|
||||
Comment[es]=Alguien le está llamando
|
||||
Comment[et]=Keegi helistab sulle
|
||||
Comment[fi]=Sinulle soitetaan
|
||||
Comment[fr]=Quelqu'un vous appelle
|
||||
Comment[gl]=Está a recibir unha chamada de alguén.
|
||||
Comment[he]=מישהו מתקשר אילך
|
||||
Comment[hu]=Valaki hívja önt
|
||||
Comment[it]=Chiamata in arrivo
|
||||
Comment[ko]=누군가가 전화를 걸었음
|
||||
|
@ -175,18 +200,22 @@ Action=Popup
|
|||
|
||||
[Event/missedCall]
|
||||
Name=Missed Call
|
||||
Name[ar]=مكالمة فائتة
|
||||
Name[ast]=Llamada perdida
|
||||
Name[bg]=Пропуснато обаждане
|
||||
Name[ca]=Trucada perduda
|
||||
Name[ca@valencia]=Trucada perduda
|
||||
Name[cs]=Zmeškaný hovor
|
||||
Name[da]=Ubesvaret opkald
|
||||
Name[de]=Verpasster Anruf
|
||||
Name[el]=Αναπάντητη κλήση
|
||||
Name[en_GB]=Missed Call
|
||||
Name[es]=Llamada perdida
|
||||
Name[et]=Vastamata kõne
|
||||
Name[fi]=Vastaamaton puhelu
|
||||
Name[fr]=Appel manqué
|
||||
Name[gl]=Chamada perdida
|
||||
Name[he]=שיחה שלא נענתה
|
||||
Name[hu]=Nem fogadott hívás
|
||||
Name[it]=Chiamate perse
|
||||
Name[ko]=부재 중 전화
|
||||
|
@ -203,6 +232,8 @@ Name[uk]=Пропущений дзвінок
|
|||
Name[x-test]=xxMissed Callxx
|
||||
Name[zh_CN]=未接来电
|
||||
Comment=You have a missed call
|
||||
Comment[ar]=لقد فاتتك مكالمة
|
||||
Comment[ast]=Tienes una llamada perdida
|
||||
Comment[bg]=Имате неприето обаждане
|
||||
Comment[bs]=Imate propušten poziv
|
||||
Comment[ca]=Teniu una trucada perduda
|
||||
|
@ -210,12 +241,14 @@ Comment[ca@valencia]=Teniu una trucada perduda
|
|||
Comment[cs]=Máte zmeškaný hovor
|
||||
Comment[da]=Du har et ubesvaret opkald
|
||||
Comment[de]=Sie haben einen Anruf verpasst
|
||||
Comment[el]=Έχετε μια αναπάντητη κλήση
|
||||
Comment[en_GB]=You have a missed call
|
||||
Comment[es]=Tiene una llamada perdida
|
||||
Comment[et]=Kõnele jäi vastamata
|
||||
Comment[fi]=Sinulla on vastaamaton puhelu
|
||||
Comment[fr]=Vous avez un appel manqué
|
||||
Comment[gl]=Ten unha chamada perdida.
|
||||
Comment[he]=יש לך שיחה שלא נענטה
|
||||
Comment[hu]=Nem fogadott hívása van
|
||||
Comment[it]=Hai una chiamata persa
|
||||
Comment[ko]=부재 중 전화가 있음
|
||||
|
@ -236,18 +269,22 @@ Action=Popup
|
|||
|
||||
[Event/smsReceived]
|
||||
Name=SMS Received
|
||||
Name[ar]=استُلمت رسالة
|
||||
Name[ast]=SMS recibíu
|
||||
Name[bg]=Получен SMS
|
||||
Name[ca]=S'ha rebut un SMS
|
||||
Name[ca@valencia]=S'ha rebut un SMS
|
||||
Name[cs]=SMS přijata
|
||||
Name[da]=SMS-modtaget
|
||||
Name[de]=SMS empfangen
|
||||
Name[el]=Λήφθηκε SMS
|
||||
Name[en_GB]=SMS Received
|
||||
Name[es]=SMS recibido
|
||||
Name[et]=SMS-i saamine
|
||||
Name[fi]=Saatiin tekstiviesti
|
||||
Name[fr]=SMS reçu
|
||||
Name[gl]=Recibiuse un SMS
|
||||
Name[he]=התקבלה הודעת SMS
|
||||
Name[hu]=SMS érkezett
|
||||
Name[it]=SMS ricevuto
|
||||
Name[ko]=SMS 받음
|
||||
|
@ -264,6 +301,8 @@ Name[uk]=Отримано SMS
|
|||
Name[x-test]=xxSMS Receivedxx
|
||||
Name[zh_CN]=收到短信
|
||||
Comment=Someone sent you an SMS
|
||||
Comment[ar]=ثمّة من أرسل رسالة إليك
|
||||
Comment[ast]=Daquién unvióte un SMS
|
||||
Comment[bg]=Някой ви изпрати текстово съобщение
|
||||
Comment[bs]=Neko Vam je poslao SMS poruku
|
||||
Comment[ca]=Algú us ha enviat un SMS
|
||||
|
@ -271,12 +310,14 @@ Comment[ca@valencia]=Algú vos ha enviat un SMS
|
|||
Comment[cs]=Někdo vám poslal SMS
|
||||
Comment[da]=Nogen sendte dig en SMS
|
||||
Comment[de]=Jemand hat Ihnen eine SMS gesendet
|
||||
Comment[el]=Κάποιος σας έστειλε SMS
|
||||
Comment[en_GB]=Someone sent you an SMS
|
||||
Comment[es]=Alguien le ha enviado un SMS
|
||||
Comment[et]=Keegi saatis sulle SMS-i
|
||||
Comment[fi]=Sinulle lähetettiin tekstiviesti
|
||||
Comment[fr]=Quelqu'un vous a envoyé un SMS
|
||||
Comment[gl]=Recibiu unha mensaxe SMS de alguén.
|
||||
Comment[he]=מישהו שלח לך SMS
|
||||
Comment[hu]=Valaki SMS-t küldött önnek
|
||||
Comment[it]=Hai ricevuto un SMS
|
||||
Comment[ko]=누군가가 문자 메시지를 보냄
|
||||
|
@ -297,12 +338,15 @@ Action=Popup
|
|||
|
||||
[Event/batteryLow]
|
||||
Name=Battery Low
|
||||
Name[ar]=البطّاريّة ضعيفة
|
||||
Name[ast]=Batería baxa
|
||||
Name[bg]=Изтощена батерия
|
||||
Name[ca]=Bateria baixa
|
||||
Name[ca@valencia]=Bateria baixa
|
||||
Name[cs]=Baterie je téměř vybitá
|
||||
Name[da]=Lavt batteri
|
||||
Name[de]=Akku-Ladestand niedrig
|
||||
Name[el]=Μπαταρία χαμηλή
|
||||
Name[en_GB]=Battery Low
|
||||
Name[es]=Batería baja
|
||||
Name[et]=Aku laetus on madal
|
||||
|
@ -325,6 +369,8 @@ Name[uk]=Низький рівень заряду
|
|||
Name[x-test]=xxBattery Lowxx
|
||||
Name[zh_CN]=电池电量低
|
||||
Comment=Your battery is in low state
|
||||
Comment[ar]=بطّاريّتك في الحالة الضعيفة
|
||||
Comment[ast]=La to batería ta nun estáu baxu
|
||||
Comment[bg]=Батерията ви е с нисък заряд
|
||||
Comment[bs]=Vaša baterija je gotovo prazna
|
||||
Comment[ca]=La bateria està baixa
|
||||
|
@ -332,12 +378,14 @@ Comment[ca@valencia]=La bateria està baixa
|
|||
Comment[cs]=Máte slabou baterii
|
||||
Comment[da]=Dit batteri er på lavt niveau
|
||||
Comment[de]=Der Ladestand Ihres Akkus ist niedrig
|
||||
Comment[el]=Η μπαταρία σας είναι σε χαμηλό επίπεδο
|
||||
Comment[en_GB]=Your battery is in low state
|
||||
Comment[es]=La batería está en nivel bajo
|
||||
Comment[et]=Aku täituvus on madal
|
||||
Comment[fi]=Akkusi virta on vähissä
|
||||
Comment[fr]=Votre batterie est faible
|
||||
Comment[gl]=A batería está esgotándose.
|
||||
Comment[he]=הבטריה שלך הולכת להגמר
|
||||
Comment[hu]=Az akkumulátora feszültsége alacsony
|
||||
Comment[it]=La tua batteria è al livello basso
|
||||
Comment[ko]=배터리가 부족함
|
||||
|
@ -358,18 +406,22 @@ Action=Popup
|
|||
|
||||
[Event/pingReceived]
|
||||
Name=Ping Received
|
||||
Name[ar]=استُلمت وكزة
|
||||
Name[ast]=Ping recibíu
|
||||
Name[bg]=Пингът е приет
|
||||
Name[ca]=S'ha rebut un ping
|
||||
Name[ca@valencia]=S'ha rebut un ping
|
||||
Name[cs]=Ping přijat
|
||||
Name[da]=Ping modtaget
|
||||
Name[de]=Ping empfangen
|
||||
Name[el]=Λήφθηκε ping
|
||||
Name[en_GB]=Ping Received
|
||||
Name[es]=Ping recibido
|
||||
Name[et]=Pingi saamine
|
||||
Name[fi]=Saatiin tiedustelupaketti
|
||||
Name[fr]=Ping reçu
|
||||
Name[gl]=Recibiuse un ping
|
||||
Name[he]=התקבל פינג
|
||||
Name[hu]=Ping érkezett
|
||||
Name[it]=Ping ricevuto
|
||||
Name[ko]=핑 받음
|
||||
|
@ -386,6 +438,8 @@ Name[uk]=Отримано сигнал підтримки зв’язку
|
|||
Name[x-test]=xxPing Receivedxx
|
||||
Name[zh_CN]=收到 Ping
|
||||
Comment=Ping received
|
||||
Comment[ar]=استُلمت وكزة
|
||||
Comment[ast]=Recibióse un ping
|
||||
Comment[bg]=Пингът е приет
|
||||
Comment[bs]=Primili ste ping
|
||||
Comment[ca]=S'ha rebut un ping
|
||||
|
@ -393,12 +447,14 @@ Comment[ca@valencia]=S'ha rebut un ping
|
|||
Comment[cs]=Ping přijat
|
||||
Comment[da]=Ping modtaget
|
||||
Comment[de]=Ping empfangen
|
||||
Comment[el]=Λήφθηκε ping
|
||||
Comment[en_GB]=Ping received
|
||||
Comment[es]=Ping recibido
|
||||
Comment[et]=Pingi saamine
|
||||
Comment[fi]=Saatiin tiedustelupaketti
|
||||
Comment[fr]=Ping reçu
|
||||
Comment[gl]=Recibiuse un “ping”.
|
||||
Comment[he]=התקבל פינג
|
||||
Comment[hu]=Ping érkezett
|
||||
Comment[it]=Hai ricevuto un ping
|
||||
Comment[ko]=핑 받음
|
||||
|
@ -419,18 +475,22 @@ Action=Popup
|
|||
|
||||
[Event/notification]
|
||||
Name=Generic Notification
|
||||
Name[ar]=إخطار عموميّ
|
||||
Name[ast]=Avisu xenéricu
|
||||
Name[bg]=Общо уведомление
|
||||
Name[ca]=Notificació genèrica
|
||||
Name[ca@valencia]=Notificació genèrica
|
||||
Name[cs]=Obecná hlášení
|
||||
Name[da]=Generisk bekendtgørelse
|
||||
Name[de]=Allgemeine Benachrichtigung
|
||||
Name[el]=Γενική ειδοποίηση
|
||||
Name[en_GB]=Generic Notification
|
||||
Name[es]=Notificación genérica
|
||||
Name[et]=Üldine märguanne
|
||||
Name[fi]=Yleinen ilmoitus
|
||||
Name[fr]=Notification
|
||||
Name[gl]=Notificación xenérica
|
||||
Name[he]=התראה כללית
|
||||
Name[hu]=Általános értesítés
|
||||
Name[it]=Notifica generica
|
||||
Name[ko]=일반 알림
|
||||
|
@ -447,6 +507,8 @@ Name[uk]=Загальне сповіщення
|
|||
Name[x-test]=xxGeneric Notificationxx
|
||||
Name[zh_CN]=一般通知
|
||||
Comment=Notification received
|
||||
Comment[ar]=استُلم إخطار
|
||||
Comment[ast]=Avisu recibíu
|
||||
Comment[bg]=Уведомлението е прието
|
||||
Comment[bs]=Primjeno obavještenje
|
||||
Comment[ca]=Notificació rebuda
|
||||
|
@ -454,12 +516,14 @@ Comment[ca@valencia]=Notificació rebuda
|
|||
Comment[cs]=Bylo přijato upozornění
|
||||
Comment[da]=Bekendtgørelse modtaget
|
||||
Comment[de]=Benachrichtigung eingegangen
|
||||
Comment[el]=Λήφθηκε ειδοποίηση
|
||||
Comment[en_GB]=Notification received
|
||||
Comment[es]=Notificación recibida
|
||||
Comment[et]=Saadi märguanne
|
||||
Comment[fi]=Saatiin ilmoitus
|
||||
Comment[fr]=Notification reçue
|
||||
Comment[gl]=Recibiuse unha notificación.
|
||||
Comment[he]=התראה התקבלה
|
||||
Comment[hu]=Értesítés érkezett
|
||||
Comment[it]=Hai ricevuto una notifica
|
||||
Comment[ko]=알림 받음
|
||||
|
@ -480,18 +544,22 @@ Action=Popup
|
|||
|
||||
[Event/transferReceived]
|
||||
Name=File Transfer
|
||||
Name[ar]=نقل الملفّات
|
||||
Name[ast]=Tresferencia de ficheros
|
||||
Name[bg]=Прехвърляне на файл
|
||||
Name[ca]=Transferència de fitxers
|
||||
Name[ca@valencia]=Transferència de fitxers
|
||||
Name[cs]=Přenos souboru
|
||||
Name[da]=Filoverførsel
|
||||
Name[de]=Dateiübertragung
|
||||
Name[el]=Μεταφορά αρχείου
|
||||
Name[en_GB]=File Transfer
|
||||
Name[es]=Transferencia de archivo
|
||||
Name[et]=Failiedastus
|
||||
Name[fi]=Tiedostonsiirto
|
||||
Name[fr]=Transfert de fichiers
|
||||
Name[gl]=Transferencia dun ficheiro
|
||||
Name[he]=העברת קובץ
|
||||
Name[hu]=Fájlátvitel
|
||||
Name[it]=Trasferimento file
|
||||
Name[ko]=파일 전송
|
||||
|
@ -508,18 +576,22 @@ Name[uk]=Перенесення файлів
|
|||
Name[x-test]=xxFile Transferxx
|
||||
Name[zh_CN]=文件传送
|
||||
Comment=Incoming file
|
||||
Comment[ar]=ملفّ قادم
|
||||
Comment[ast]=Ficheru entrante
|
||||
Comment[bg]=Входящ файл
|
||||
Comment[ca]=Fitxer entrant
|
||||
Comment[ca@valencia]=Fitxer entrant
|
||||
Comment[cs]=Příchozí soubor
|
||||
Comment[da]=Indkommende fil
|
||||
Comment[de]=Eingehende Datei
|
||||
Comment[el]=Εισερχόμενο αρχείο
|
||||
Comment[en_GB]=Incoming file
|
||||
Comment[es]=Archivo entrante
|
||||
Comment[et]=Sisenev fail
|
||||
Comment[fi]=Saapuva tiedosto
|
||||
Comment[fr]=Fichier entrant
|
||||
Comment[gl]=Ficheiro entrante
|
||||
Comment[he]=קובץ מגיע
|
||||
Comment[hu]=Bejövő fájl
|
||||
Comment[it]=File in ingresso
|
||||
Comment[ko]=파일 수신
|
||||
|
|
|
@ -3,6 +3,8 @@ Type=ServiceType
|
|||
X-KDE-ServiceType=KdeConnect/Plugin
|
||||
X-KDE-Derived=KPluginInfo
|
||||
Name=KDEConnect Plugin
|
||||
Name[ar]=ملحقة KDEConnect
|
||||
Name[ast]=Complementu KDEConnect
|
||||
Name[bg]=Приставка на KDEConnect
|
||||
Name[bs]=Priključak za KDE konekciju
|
||||
Name[ca]=Connector del KDE Connect
|
||||
|
@ -10,12 +12,14 @@ Name[ca@valencia]=Connector del KDE Connect
|
|||
Name[cs]=Modul KDEConnect
|
||||
Name[da]=KDEConnect-plugin
|
||||
Name[de]=KDEConnect-Modul
|
||||
Name[el]=Πρόσθετο του KDEConnect
|
||||
Name[en_GB]=KDEConnect Plugin
|
||||
Name[es]=Complemento de KDEConnect
|
||||
Name[et]=KDEConnecti plugin
|
||||
Name[fi]=KDE Connect -liitännäinen
|
||||
Name[fr]=Module externe KDEConnect
|
||||
Name[gl]=Complemento de KDE Connect
|
||||
Name[he]=תוספי KDEConnect
|
||||
Name[hu]=KDEConnect bővítmény
|
||||
Name[it]=Estensione KDEConnect
|
||||
Name[ko]=KDEConnect 플러그인
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Locks your systems",
|
||||
"Description[ar]": "أوصد الأنظمة",
|
||||
"Description[ast]": "Bloquia los tos sistemes",
|
||||
"Description[ca@valencia]": "Bloqueja els vostres sistemes",
|
||||
"Description[ca]": "Bloqueja els vostres sistemes",
|
||||
"Description[cs]": "Zamkne vaše systémy",
|
||||
"Description[da]": "Låser dine systemer",
|
||||
"Description[de]": "Sperrt Ihre Systeme",
|
||||
"Description[el]": "Κλειδώνει τα συστήματά σας",
|
||||
"Description[es]": "Bloquear sus sistemas",
|
||||
"Description[et]": "Oma süsteemide lukustamine",
|
||||
"Description[fi]": "Lukitsee järjestelmäsi",
|
||||
|
@ -37,6 +40,8 @@
|
|||
"Id": "kdeconnect_lockdevice",
|
||||
"License": "GPL",
|
||||
"Name": "LockDevice",
|
||||
"Name[ar]": "أوصد الجهاز",
|
||||
"Name[ast]": "Bloquiar preséu",
|
||||
"Name[ca@valencia]": "Bloqueja el dispositiu",
|
||||
"Name[ca]": "Bloqueja el dispositiu",
|
||||
"Name[cs]": "Uzamknout zařízení",
|
||||
|
|
|
@ -5,15 +5,19 @@
|
|||
{
|
||||
"Email": "ahmedibrahimkhali@gmail.com",
|
||||
"Name": "Ahmed I. Khalil",
|
||||
"Name[ar]": "أحمد إبراهيم خليل",
|
||||
"Name[x-test]": "xxAhmed I. Khalilxx"
|
||||
}
|
||||
],
|
||||
"Description": "Use your phone as a touchpad and keyboard",
|
||||
"Description[ar]": "استخدم الهاتف كفأرة ولوحة مفاتيح",
|
||||
"Description[ast]": "Usa'l to preséu como un panel táutil y tecláu",
|
||||
"Description[ca@valencia]": "Empra el telèfon com un ratolí tàctil i teclat",
|
||||
"Description[ca]": "Empra el telèfon com un ratolí tàctil i teclat",
|
||||
"Description[cs]": "Používejte svůj telefon jako touchpad a klávesnici",
|
||||
"Description[da]": "Brug din telefon som touchpad og tastatur",
|
||||
"Description[de]": "Verwendet Ihr Handy als Touchpad und Tastatur",
|
||||
"Description[el]": "Χρήση του τηλεφώνου σας ως οθόνη αφής και πληκτρολογίου",
|
||||
"Description[es]": "Usar teléfono como panel táctil y teclado",
|
||||
"Description[et]": "Telefoni kasutamine puutepadja ja klaviatuurina",
|
||||
"Description[fi]": "Käytä puhelintasi kosketuslevynä ja näppäimistönä",
|
||||
|
@ -38,11 +42,14 @@
|
|||
"Id": "kdeconnect_mousepad",
|
||||
"License": "GPL",
|
||||
"Name": "Virtual input",
|
||||
"Name[ar]": "دخل وهميّ",
|
||||
"Name[ast]": "Entrada virtual",
|
||||
"Name[ca@valencia]": "Entrada virtual",
|
||||
"Name[ca]": "Entrada virtual",
|
||||
"Name[cs]": "Virtuální vstup",
|
||||
"Name[da]": "Virtuelt input",
|
||||
"Name[de]": "Virtuelle Eingabe",
|
||||
"Name[el]": "Εικονικά στοιχεία εισόδου",
|
||||
"Name[es]": "Entrada virtual",
|
||||
"Name[et]": "Virtuaalsisestus",
|
||||
"Name[fi]": "Virtuaalinen syöttö",
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Remote control your music and videos",
|
||||
"Description[ar]": "تحكّم بالموسيقى والفيديو عن بعد",
|
||||
"Description[ast]": "Control remotu de la to música y videos",
|
||||
"Description[ca@valencia]": "Comandament a distància per a la vostra música i vídeos",
|
||||
"Description[ca]": "Comandament a distància per a la vostra música i vídeos",
|
||||
"Description[cs]": "Ovládejte vzdáleně vaši hudbu a videa",
|
||||
"Description[da]": "Fjernbetjen din musik og videoer",
|
||||
"Description[de]": "Fernbedienung für Musik und Videos",
|
||||
"Description[el]": "Απομακρυσμένος έλεγχος της μουσικής σας και των βίντεο",
|
||||
"Description[es]": "Controlar remotamente vídeos y música",
|
||||
"Description[et]": "Oma muusika ja videote kaugjuhtimine",
|
||||
"Description[fi]": "Kauko-ohjain musiikkiisi ja videoihisi",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_mpriscontrol",
|
||||
"License": "GPL",
|
||||
"Name": "Multimedia control receiver",
|
||||
"Name[ar]": "مستقبل تحكّمات الوسائط المتعدّدة",
|
||||
"Name[ast]": "Mandu de control multimedia",
|
||||
"Name[ca@valencia]": "Receptor del comandament multimèdia",
|
||||
"Name[ca]": "Receptor del comandament multimèdia",
|
||||
"Name[cs]": "Dálkový ovladač multimédií",
|
||||
"Name[da]": "Multimediekontrol-modtager",
|
||||
"Name[de]": "Steuerung für Multimedia-Empfänger",
|
||||
"Name[el]": "Δέκτης ελέγχου πολυμέσων",
|
||||
"Name[es]": "Receptor de control multimedia",
|
||||
"Name[et]": "Multimeedia juhtimine",
|
||||
"Name[fi]": "Multimediakauko-ohjain",
|
||||
|
|
|
@ -175,6 +175,26 @@ void MprisControlPlugin::propertiesChanged(const QString& propertyInterface, con
|
|||
np.set("isPlaying", playing);
|
||||
somethingToSend = true;
|
||||
}
|
||||
if (properties.contains("CanPause")) {
|
||||
np.set("canPause", properties["CanPause"].toBool());
|
||||
somethingToSend = true;
|
||||
}
|
||||
if (properties.contains("CanPlay")) {
|
||||
np.set("canPlay", properties["CanPlay"].toBool());
|
||||
somethingToSend = true;
|
||||
}
|
||||
if (properties.contains("CanGoNext")) {
|
||||
np.set("canGoNext", properties["CanGoNext"].toBool());
|
||||
somethingToSend = true;
|
||||
}
|
||||
if (properties.contains("CanGoPrevious")) {
|
||||
np.set("canGoPrevious", properties["CanGoPrevious"].toBool());
|
||||
somethingToSend = true;
|
||||
}
|
||||
if (properties.contains("CanSeek")) {
|
||||
np.set("canSeek", properties["CanSeek"].toBool());
|
||||
somethingToSend = true;
|
||||
}
|
||||
|
||||
if (somethingToSend) {
|
||||
OrgFreedesktopDBusPropertiesInterface* interface = (OrgFreedesktopDBusPropertiesInterface*)sender();
|
||||
|
@ -264,6 +284,12 @@ bool MprisControlPlugin::receivePackage (const NetworkPackage& np)
|
|||
bool playing = (mprisInterface.playbackStatus() == QLatin1String("Playing"));
|
||||
answer.set("isPlaying", playing);
|
||||
|
||||
answer.set("canPause", mprisInterface.canPause());
|
||||
answer.set("canPlay", mprisInterface.canPlay());
|
||||
answer.set("canGoNext", mprisInterface.canGoNext());
|
||||
answer.set("canGoPrevious", mprisInterface.canGoPrevious());
|
||||
answer.set("canSeek", mprisInterface.canSeek());
|
||||
|
||||
somethingToSend = true;
|
||||
}
|
||||
if (np.get<bool>("requestVolume")) {
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Control MPRIS services",
|
||||
"Description[ar]": "تحكّم بخدمات MPRIS",
|
||||
"Description[ast]": "Controla servicios MPRIS",
|
||||
"Description[ca@valencia]": "Serveis de control del MPRIS",
|
||||
"Description[ca]": "Serveis de control del MPRIS",
|
||||
"Description[cs]": "Ovládejte služby MPRIS",
|
||||
"Description[da]": "Kontrollér MPRIS-tjenester",
|
||||
"Description[de]": "Steuerung von MPRIS-Diensten",
|
||||
"Description[el]": "Έλεγχος υπηρεσιών MPRIS",
|
||||
"Description[es]": "Controlar los servicios MPRIS",
|
||||
"Description[et]": "MPRIS-teenuste juhtimine",
|
||||
"Description[fi]": "Ohjaa MPRIS-palveluita",
|
||||
|
@ -37,6 +40,7 @@
|
|||
"Id": "kdeconnect_mprisremote",
|
||||
"License": "GPL",
|
||||
"Name": "MprisRemote",
|
||||
"Name[ar]": "Mpris عن بعد",
|
||||
"Name[et]": "Kaug-Mpris",
|
||||
"Name[fi]": "MPRIS-kauko-ohjain",
|
||||
"Name[nn]": "MPRIS-fjernkontroll",
|
||||
|
|
|
@ -9,13 +9,17 @@
|
|||
}
|
||||
],
|
||||
"Description": "Show device's notifications on this computer and keep them in sync",
|
||||
"Description[ar]": "أظهر إخطارات الجهاز على هذا الحاسوب وأبقها متزامنة",
|
||||
"Description[ast]": "Amuesa los avisos del preséu nesti ordenador y caltiénlos sincronizaos",
|
||||
"Description[ca@valencia]": "Mostra les notificacions del dispositiu a l'ordinador i les manté sincronitzades",
|
||||
"Description[ca]": "Mostra les notificacions del dispositiu a l'ordinador i les manté sincronitzades",
|
||||
"Description[cs]": "Zobrazit upozornění telefonu v počítači a udržovat je synchronizovaná",
|
||||
"Description[da]": "Vis enhedens bekendtgørelser på denne computer og hold dem synkroniseret",
|
||||
"Description[de]": "Benachrichtigungen des Geräts auf diesem Rechner anzeigen und abgleichen",
|
||||
"Description[el]": "Εμφάνιση ειδοποιήσεων συσκευής στον υπολογιστή αυτόν και συγχρονισμός τους",
|
||||
"Description[es]": "Mostrar notificaciones del dispositivo en este equipo y mantenerlas en sincronía",
|
||||
"Description[et]": "Seadme märguannete näitamine arvutis ja nende sünkroonis hoidmine",
|
||||
"Description[gl]": "Mostrar as notificacións do dispositivo neste computador e mantelas sincronizadas.",
|
||||
"Description[it]": "Mostra le notifiche del telefono sul tuo computer e tienile sincronizzate",
|
||||
"Description[nl]": "Apparaatmeldingen op deze computer tonen en ze gesynchroniseerd houden",
|
||||
"Description[pl]": "Pokaż powiadomienia urządzenia na swoim komputerze i synchronizuj je",
|
||||
|
@ -30,13 +34,17 @@
|
|||
"Id": "kdeconnect_notifications",
|
||||
"License": "GPL",
|
||||
"Name": "Receive notifications",
|
||||
"Name[ar]": "استقبل الإخطارات",
|
||||
"Name[ast]": "Recibimientu d'avisos",
|
||||
"Name[ca@valencia]": "Recepció de les notificacions",
|
||||
"Name[ca]": "Recepció de les notificacions",
|
||||
"Name[cs]": "Přijímat oznámení",
|
||||
"Name[da]": "Modtag bekendtgørelser",
|
||||
"Name[de]": "Benachrichtigungen empfangen",
|
||||
"Name[el]": "Λήψη ειδοποιήσεων",
|
||||
"Name[es]": "Recibir notificaciones",
|
||||
"Name[et]": "Märguannete vastuvõtmine",
|
||||
"Name[gl]": "Recibir notificacións",
|
||||
"Name[it]": "Ricevi notifiche",
|
||||
"Name[nl]": "Meldingen ontvangen",
|
||||
"Name[pl]": "Otrzymuj powiadomienia",
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Pause music/videos during a phone call",
|
||||
"Description[ar]": "ألبث الموسيقى/الفيديو أثناء المكالمات الهاتفيّة",
|
||||
"Description[ast]": "Posa la música/videos nuna llamada telefónica",
|
||||
"Description[ca@valencia]": "Pausa la música/vídeos durant una trucada telefònica",
|
||||
"Description[ca]": "Pausa la música/vídeos durant una trucada telefònica",
|
||||
"Description[cs]": "Pozastavit hudbu/video během telefonátu",
|
||||
"Description[da]": "Sæt musik/video på pause under telefonsamtaler",
|
||||
"Description[de]": "Hält Musik oder Videos währen eines Anrufs an",
|
||||
"Description[el]": "Παύση μουσικής/βίντεο κατά τη διάρκεια κλήσης",
|
||||
"Description[es]": "Pausar música/video durante las llamadas telefónicas",
|
||||
"Description[et]": "Muusika või video peatamine telefonikõne ajal",
|
||||
"Description[fi]": "Keskeytä musiikki ja videot puhelun aikana",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_pausemusic",
|
||||
"License": "GPL",
|
||||
"Name": "Pause media during calls",
|
||||
"Name[ar]": "ألبث الوسائط أثناء المكالمات",
|
||||
"Name[ast]": "Pausa de multimedia nes llamaes",
|
||||
"Name[ca@valencia]": "Pausa els suports durant les trucades",
|
||||
"Name[ca]": "Pausa els suports durant les trucades",
|
||||
"Name[cs]": "Pozastavit média během telefonátu",
|
||||
"Name[da]": "Sæt medier på pause under opkald",
|
||||
"Name[de]": "Medium bei Anrufen anhalten",
|
||||
"Name[el]": "Παύση πολυμέσων στη διάρκεια κλήσεων",
|
||||
"Name[es]": "Pausar medios durante las llamadas",
|
||||
"Name[et]": "Meedia peatamine kõne ajal",
|
||||
"Name[fi]": "Keskeytä toisto puhelujen aikana",
|
||||
|
|
|
@ -6,6 +6,8 @@ X-KDE-Library=kdeconnect_pausemusic_config
|
|||
X-KDE-ParentComponents=kdeconnect_pausemusic
|
||||
|
||||
Name=Pause Music plugin settings
|
||||
Name[ar]=إعدادات ملحقة إلباث الموسيقى
|
||||
Name[ast]=Axustes del complementu de posar música
|
||||
Name[bg]=Настройки на приставката за поставяне на пауза
|
||||
Name[bs]=Zaustavi Muziku postavke dodatka
|
||||
Name[ca]=Ajustaments del connector Pausa la música
|
||||
|
@ -13,12 +15,14 @@ Name[ca@valencia]=Ajustaments del connector Pausa la música
|
|||
Name[cs]=Nastavení modulu Pozastavení hudby
|
||||
Name[da]=Indstilling af plugin til at sætte musik på pause
|
||||
Name[de]=Modul-Einstellungen für das Anhalten der Musikwiedergabe
|
||||
Name[el]=Ρυθμίσεις προσθέτου παύσης μουσικής
|
||||
Name[en_GB]=Pause Music plugin settings
|
||||
Name[es]=Ajustes del complemento PauseMusic
|
||||
Name[et]=Muusika peatamise plugina seadistused
|
||||
Name[fi]=Keskeytä musiikki -liitännäisen asetukset
|
||||
Name[fr]=Paramètres du module de mise en pause
|
||||
Name[gl]=Configuración do complemento para deter a música
|
||||
Name[he]=הגדרות התוספת השהיית המוזיקה
|
||||
Name[hu]=Zene szüneteltetése bővítmény beállításai
|
||||
Name[it]=Impostazioni estensione Sospendi musica
|
||||
Name[ko]=음악 일시 정지 플러그인 설정
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Send and receive pings",
|
||||
"Description[ar]": "أرسل الوخزات واستقبلها",
|
||||
"Description[ast]": "Unvia y recibe pings",
|
||||
"Description[ca@valencia]": "Envia i rep pings",
|
||||
"Description[ca]": "Envia i rep pings",
|
||||
"Description[cs]": "Posílat a přijímat ping",
|
||||
"Description[da]": "Send og modtag ping",
|
||||
"Description[de]": "Senden und Empfangen von Pings",
|
||||
"Description[el]": "Αποστολή και λήψη pings",
|
||||
"Description[es]": "Enviar y recibir pings",
|
||||
"Description[et]": "Pingide saatmine ja vastuvõtmine",
|
||||
"Description[fi]": "Lähetä ja vastaanota tiedustelupaketteja",
|
||||
|
@ -38,6 +41,7 @@
|
|||
"Id": "kdeconnect_ping",
|
||||
"License": "GPL",
|
||||
"Name": "Ping",
|
||||
"Name[ar]": "وخزة",
|
||||
"Name[fi]": "Tiedustelupaketti",
|
||||
"Name[ko]": "핑",
|
||||
"Name[pt]": "Contacto",
|
||||
|
|
|
@ -8,12 +8,15 @@
|
|||
"Name[x-test]": "xxAleix Polxx"
|
||||
}
|
||||
],
|
||||
"Description": "Executes commands from remote devices among a locally defined set",
|
||||
"Description": "Trigger commands predefined on the remote device",
|
||||
"Description[ar]": "نفّذ أوامر معرّفة مسبقًا في الجهاز البعيد",
|
||||
"Description[ast]": "Aiciona comandos predefiníos nel preséu remotu",
|
||||
"Description[ca@valencia]": "Activa ordes predefinides en el dispositiu remot",
|
||||
"Description[ca]": "Activa ordres predefinides en el dispositiu remot",
|
||||
"Description[cs]": "Spouštět příkazy předpřipravené na vzdáleném zařízení",
|
||||
"Description[da]": "Udløs kommandoer som er prædefinerede på den eksterne enhed",
|
||||
"Description[de]": "Vordefinierte Befehle auf dem entfernten Gerät ausführen",
|
||||
"Description[el]": "Ενεργοποίηση προκαθορισμένων εντολών στην απομακρυσμένη συσκευή",
|
||||
"Description[es]": "Desencadenar órdenes predefinidas en el dispositivo remoto",
|
||||
"Description[et]": "Kaugseadmes määratud käskude käivitamine",
|
||||
"Description[it]": "Innesca comandi predefiniti sul dispositivo remoto",
|
||||
|
@ -29,6 +32,8 @@
|
|||
"Id": "kdeconnect_remotecommands",
|
||||
"License": "GPL",
|
||||
"Name": "Host remote commands",
|
||||
"Name[ar]": "نفّذ أوامر بعيدة",
|
||||
"Name[ast]": "Execución de comandos remotos",
|
||||
"Name[ca@valencia]": "Executa ordes remotes",
|
||||
"Name[ca]": "Executa ordres remotes",
|
||||
"Name[cs]": "Spouštět příkazy vzdáleně",
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Control Remote systems",
|
||||
"Description[ar]": "تحكّم بالأنظمة البعيدة",
|
||||
"Description[ast]": "Controla sistemes remotos",
|
||||
"Description[ca@valencia]": "Sistemes de control remot",
|
||||
"Description[ca]": "Sistemes de control remot",
|
||||
"Description[cs]": "Ovládejte vzdálené systémy",
|
||||
"Description[da]": "Fjernbetjen systemer",
|
||||
"Description[de]": "Entfernte Systeme steuern",
|
||||
"Description[el]": "Έλεγχος ανταπόκρισης απομακρυσμένων συστημάτων",
|
||||
"Description[es]": "Controlar sistemas remotos",
|
||||
"Description[et]": "Kaugjuhtimissüsteemid",
|
||||
"Description[fi]": "Ohjaa järjestelmiä etänä",
|
||||
|
@ -37,6 +40,8 @@
|
|||
"Id": "kdeconnect_remotecontrol",
|
||||
"License": "GPL",
|
||||
"Name": "RemoteControl",
|
||||
"Name[ar]": "التّحكّم عن بعد",
|
||||
"Name[ast]": "Control remotu",
|
||||
"Name[ca@valencia]": "Control remot",
|
||||
"Name[ca]": "Control remot",
|
||||
"Name[cs]": "Dálkové ovládání",
|
||||
|
|
|
@ -14,11 +14,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Execute console commands remotely",
|
||||
"Description[ar]": "نفّذ أوامر طرفيّة عن بعد",
|
||||
"Description[ast]": "Executa los comandos de consola de mou remotu",
|
||||
"Description[ca@valencia]": "Executa ordes de la consola de forma remota",
|
||||
"Description[ca]": "Executa ordres de la consola de forma remota",
|
||||
"Description[cs]": "Spouštět konzolové příkazy vzdáleně",
|
||||
"Description[da]": "Kør konsolkommandoer udefra",
|
||||
"Description[de]": "Entfernte Konsolenbefehle ausführen",
|
||||
"Description[el]": "Απομακρυσμένη εκτέλεση εντολών του τερματικού",
|
||||
"Description[es]": "Ejecute órdenes de consola remotamente",
|
||||
"Description[et]": "Konsoolikäskude kaugkäivitamine",
|
||||
"Description[fi]": "Suorita konsolikomentoja etänä",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_runcommand",
|
||||
"License": "GPL",
|
||||
"Name": "Run commands",
|
||||
"Name[ar]": "شغّل أوامر",
|
||||
"Name[ast]": "Executar comandos",
|
||||
"Name[ca@valencia]": "Executa ordes",
|
||||
"Name[ca]": "Executa ordres",
|
||||
"Name[cs]": "Spustit příkazy",
|
||||
"Name[da]": "Kør kommandoer",
|
||||
"Name[de]": "Befehle ausführen",
|
||||
"Name[el]": "Εκτέλεση εντολών",
|
||||
"Name[es]": "Ejecutar órdenes",
|
||||
"Name[et]": "Käskude käivitamine",
|
||||
"Name[fi]": "Suorita komentoja",
|
||||
|
|
|
@ -6,16 +6,22 @@ X-KDE-Library=kdeconnect_runcommand_config
|
|||
X-KDE-ParentComponents=kdeconnect_runcommand
|
||||
|
||||
Name=Run Command plugin settings
|
||||
Name[ar]=إعدادات ملحقة تشغيل الأوامر
|
||||
Name[ast]=Axustes del complementu d'executar comandos
|
||||
Name[ca]=Ajustaments del connector Executa ordres
|
||||
Name[ca@valencia]=Ajustaments del connector Executa ordes
|
||||
Name[cs]=Nastavení modulu Spustit příkaz
|
||||
Name[da]=Indstilling af kør kommando-plugin
|
||||
Name[de]=Modul-Einstellungen für Befehlsausführung
|
||||
Name[el]=Ρυθμίσεις προσθέτου εκτέλεσης εντολής
|
||||
Name[en_GB]=Run Command plugin settings
|
||||
Name[es]=Ejecutar preferencias del complemento Orden
|
||||
Name[es]=Ajustes del complemento de ejecución de órdenes
|
||||
Name[et]=Käsu käivitamise plugina seadistused
|
||||
Name[fi]=Suorita komento -liitännäisen asetukset
|
||||
Name[gl]=Configuración do complemento de orde de executar
|
||||
Name[he]=הגדרת התוסף הרץ פקודה
|
||||
Name[it]=Impostazioni estensione Esegui comando
|
||||
Name[ko]=명령 실행 플러그인 설정
|
||||
Name[nl]=Plug-in-instellingen van commando Uitvoeren
|
||||
Name[pl]=Ustawienia wtyczki wykonywania polecenia
|
||||
Name[pt]=Configuração do 'plugin' de execução de comandos
|
||||
|
@ -26,5 +32,6 @@ Name[sv]=Inställningar av insticksprogram för kör kommando
|
|||
Name[tr]=Komut Çalıştır eklenti ayarları
|
||||
Name[uk]=Параметри додатка запуску команд
|
||||
Name[x-test]=xxRun Command plugin settingsxx
|
||||
Name[zh_CN]=执行命令插件设置
|
||||
|
||||
Categories=Qt;KDE;X-KDE-settings-kdeconnect;
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Inhibit the screensaver when the device is connected",
|
||||
"Description[ar]": "امنع حافظة الشّاشة إن كان الجهاز متّصلًا",
|
||||
"Description[ast]": "Inhibe'l curiapantalles cuando ta coneutáu'l preséu",
|
||||
"Description[ca@valencia]": "Inhibeix l'estalvi de pantalla quan es connecta el dispositiu",
|
||||
"Description[ca]": "Inhibeix l'estalvi de pantalla quan es connecta el dispositiu",
|
||||
"Description[cs]": "Potlačit spořič pokud je zařízení připojeno",
|
||||
"Description[da]": "Forhindr pauseskærm når enheden er forbundet",
|
||||
"Description[de]": "Bildschirmschoner unterbinden wenn ein Gerät angeschlossen ist",
|
||||
"Description[el]": "Απαγόρευση προστασίας οθόνης όταν η συσκευή είναι σε σύνδεση",
|
||||
"Description[es]": "Inhibir el salvapantallas cuando el dispositivo está conectado",
|
||||
"Description[et]": "Ekraanisäästja keelamine, kui seade on ühendatud",
|
||||
"Description[fi]": "Estä näytönsäästäjän käynnistyminen, kun laite on yhteydessä",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_screensaver_inhibit",
|
||||
"License": "GPL",
|
||||
"Name": "Inhibit screensaver",
|
||||
"Name[ar]": "امنع حافظة الشّاشة",
|
||||
"Name[ast]": "Inhibir curiapantalles",
|
||||
"Name[ca@valencia]": "Inhibeix l'estalvi de pantalla",
|
||||
"Name[ca]": "Inhibeix l'estalvi de pantalla",
|
||||
"Name[cs]": "Potlačit spořič obrazovky",
|
||||
"Name[da]": "Forhindr pauseskærm",
|
||||
"Name[de]": "Bildschirmschoner unterbinden",
|
||||
"Name[el]": "Απαγόρευση προστασίας οθόνης",
|
||||
"Name[es]": "Inhibir salvapantallas",
|
||||
"Name[et]": "Ekraanisäästja keelamine",
|
||||
"Name[fi]": "Estä näytönsäästäjän käynnistyminen",
|
||||
|
|
|
@ -5,17 +5,17 @@
|
|||
{
|
||||
"Email": "holger.k@elberer.de",
|
||||
"Name": "Holger Kaelberer",
|
||||
"Name[da]": "Holger Freyther",
|
||||
"Name[it]": "Holger Freyther",
|
||||
"Name[x-test]": "xxHolger Kaelbererxx"
|
||||
}
|
||||
],
|
||||
"Description": "Broadcast this computer's notifications, so they can be shown on other devices.",
|
||||
"Description[ar]": "بُثّ إخطارات هذا الحاسوب، لتظهر على الأجهزة الأخرى.",
|
||||
"Description[ast]": "Tresmite los avisos d'esti ordenador, pa qu'asina puean amosase n'otros preseos.",
|
||||
"Description[ca@valencia]": "Transmet les notificacions d'este ordinador, perquè puguen mostrar-se en altres dispositius.",
|
||||
"Description[ca]": "Transmet les notificacions d'aquest ordinador, perquè puguin mostrar-se en altres dispositius.",
|
||||
"Description[cs]": "Posílat upozornění tohoto počítače, takže mohou být zobrazena na jiných zařízeních.",
|
||||
"Description[da]": "Udsend denne computers bekendtgørelser, så de kan vises på andre enheder.",
|
||||
"Description[de]": "Die Benachrichtigungen dieses Rechners aussenden, sodass sie auf anderen Geräten angezeigt werden können.",
|
||||
"Description[el]": "Μεταδώστε την ειδοποίηση αυτού του υπολογιστή, ώστε να εμφανιστεί σε άλλες συσκευές.",
|
||||
"Description[es]": "Difundir las notificaciones de este equipo, para que puedan mostrarse en otros dispositivos.",
|
||||
"Description[et]": "Arvuti märguannete levitamine, et neid oleks näha ka teistes seadmetes",
|
||||
"Description[it]": "Trasmetti le notifiche di questo computer, affinché possano essere mostrate su altri dispositivi.",
|
||||
|
@ -31,13 +31,17 @@
|
|||
"Id": "kdeconnect_sendnotifications",
|
||||
"License": "GPL",
|
||||
"Name": "Send notifications",
|
||||
"Name[ar]": "أرسل إخطارات",
|
||||
"Name[ast]": "Unviu d'avisos",
|
||||
"Name[ca@valencia]": "Envia les notificacions",
|
||||
"Name[ca]": "Envia les notificacions",
|
||||
"Name[cs]": "Poslat oznámení",
|
||||
"Name[da]": "Send bekendtgørelser",
|
||||
"Name[de]": "Benachrichtigungen senden",
|
||||
"Name[el]": "Αποστολή ειδοποιήσεων",
|
||||
"Name[es]": "Enviar notificaciones",
|
||||
"Name[et]": "Märguannete saatmine",
|
||||
"Name[gl]": "Enviar notificacións",
|
||||
"Name[it]": "Invia notifiche",
|
||||
"Name[nl]": "Stuur meldingen",
|
||||
"Name[pl]": "Wysyłaj powiadomienia",
|
||||
|
|
|
@ -6,17 +6,22 @@ X-KDE-Library=kdeconnect_sendnotifications_config
|
|||
X-KDE-ParentComponents=kdeconnect_sendnotifications
|
||||
|
||||
Name=Notification synchronization plugin settings
|
||||
Name[ar]=إعدادات ملحقة مزامنة الإخطارات
|
||||
Name[ast]=Axustes del complementu de sincronización d'avisos
|
||||
Name[ca]=Ajustament del connector Sincronitza les notificacions
|
||||
Name[ca@valencia]=Ajustament del connector Sincronitza les notificacions
|
||||
Name[cs]=Nastavení modulu synchronizace upozornění
|
||||
Name[da]=Indstilling af plugin til synkronisering af bekendtgørelser
|
||||
Name[de]=Einstellungen für Benachrichtigungsabgleich-Modul
|
||||
Name[el]=Ρυθμίσεις πρόσθετου συγχρονισμού ειδοποιήσεων
|
||||
Name[en_GB]=Notification synchronisation plugin settings
|
||||
Name[es]=Preferencias del complemento de sincronización de notificaciones
|
||||
Name[et]=Märguande sünkroonimise plugina seaditused
|
||||
Name[fi]=Ilmoitusten synkronointiliitännäisen asetukset
|
||||
Name[gl]=Configuración do complemento de sincronización de notificacións
|
||||
Name[he]=הגדרת התוסף סנכרון התראות
|
||||
Name[it]=Impostazioni dell'estensione di sincronizzazione delle notifiche
|
||||
Name[nl]=Instellingen voor meldingen van synchronisatie plug-in
|
||||
Name[nl]=Instellingen van plug-in voor synchronisatie van meldingen
|
||||
Name[pl]=Ustawienia wtyczki synchronizującej powiadomienia
|
||||
Name[pt]=Configuração do 'plugin' de sincronização das notificações
|
||||
Name[pt_BR]=Configuração do plugin de sincronização das notificações
|
||||
|
|
|
@ -20,9 +20,11 @@
|
|||
|
||||
#include <QtDBus/QDBusConnection>
|
||||
#include <QtDBus/QDBusInterface>
|
||||
#include <QtDBus/QDBusArgument>
|
||||
#include <QtDebug>
|
||||
#include <QLoggingCategory>
|
||||
#include <QStandardPaths>
|
||||
#include <QImage>
|
||||
#include <KConfig>
|
||||
#include <KConfigGroup>
|
||||
|
||||
|
@ -104,6 +106,79 @@ void NotificationsListener::loadApplications()
|
|||
//qCDebug(KDECONNECT_PLUGIN_SENDNOTIFICATION) << "Loaded" << applications.size() << " applications";
|
||||
}
|
||||
|
||||
bool NotificationsListener::parseImageDataArgument(const QVariant& argument,
|
||||
int& width, int& height,
|
||||
int& rowStride, int& bitsPerSample,
|
||||
int& channels, bool& hasAlpha,
|
||||
QByteArray& imageData) const
|
||||
{
|
||||
if (!argument.canConvert<QDBusArgument>())
|
||||
return false;
|
||||
const QDBusArgument dbusArg = argument.value<QDBusArgument>();
|
||||
dbusArg.beginStructure();
|
||||
dbusArg >> width >> height >> rowStride >> hasAlpha >> bitsPerSample
|
||||
>> channels >> imageData;
|
||||
dbusArg.endStructure();
|
||||
return true;
|
||||
}
|
||||
|
||||
QSharedPointer<QIODevice> NotificationsListener::iconForImageData(const QVariant& argument) const
|
||||
{
|
||||
int width, height, rowStride, bitsPerSample, channels;
|
||||
bool hasAlpha;
|
||||
QByteArray imageData;
|
||||
|
||||
if (!parseImageDataArgument(argument, width, height, rowStride, bitsPerSample,
|
||||
channels, hasAlpha, imageData))
|
||||
return QSharedPointer<QIODevice>();
|
||||
|
||||
if (bitsPerSample != 8) {
|
||||
qCWarning(KDECONNECT_PLUGIN_SENDNOTIFICATION) << "Unsupported image format:"
|
||||
<< "width=" << width
|
||||
<< "height=" << height
|
||||
<< "rowStride=" << rowStride
|
||||
<< "bitsPerSample=" << bitsPerSample
|
||||
<< "channels=" << channels
|
||||
<< "hasAlpha=" << hasAlpha;
|
||||
return QSharedPointer<QIODevice>();
|
||||
}
|
||||
|
||||
QImage image(reinterpret_cast<uchar*>(imageData.data()), width, height, rowStride,
|
||||
hasAlpha ? QImage::Format_ARGB32 : QImage::Format_RGB32);
|
||||
if (hasAlpha)
|
||||
image = image.rgbSwapped(); // RGBA --> ARGB
|
||||
|
||||
QSharedPointer<QBuffer> buffer = QSharedPointer<QBuffer>(new QBuffer);
|
||||
if (!buffer || !buffer->open(QIODevice::WriteOnly) ||
|
||||
!image.save(buffer.data(), "PNG")) {
|
||||
qCWarning(KDECONNECT_PLUGIN_SENDNOTIFICATION) << "Could not initialize image buffer";
|
||||
return QSharedPointer<QIODevice>();
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
QSharedPointer<QIODevice> NotificationsListener::iconForIconName(const QString &iconName) const
|
||||
{
|
||||
int size = KIconLoader::SizeEnormous; // use big size to allow for good
|
||||
// quality on high-DPI mobile devices
|
||||
QString iconPath = KIconLoader::global()->iconPath(iconName, -size, true);
|
||||
if (!iconPath.isEmpty()) {
|
||||
if (!iconPath.endsWith(QLatin1String(".png")) &&
|
||||
KIconLoader::global()->theme()->name() != QLatin1String("hicolor")) {
|
||||
// try falling back to hicolor theme:
|
||||
KIconTheme hicolor(QStringLiteral("hicolor"));
|
||||
if (hicolor.isValid()) {
|
||||
iconPath = hicolor.iconPath(iconName + ".png", size, KIconLoader::MatchBest);
|
||||
//qCDebug(KDECONNECT_PLUGIN_SENDNOTIFICATION) << "Found non-png icon in default theme trying fallback to hicolor:" << iconPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (iconPath.endsWith(QLatin1String(".png")))
|
||||
return QSharedPointer<QIODevice>(new QFile(iconPath));
|
||||
return QSharedPointer<QIODevice>();
|
||||
}
|
||||
uint NotificationsListener::Notify(const QString &appName, uint replacesId,
|
||||
const QString &appIcon,
|
||||
const QString &summary, const QString &body,
|
||||
|
@ -171,26 +246,26 @@ uint NotificationsListener::Notify(const QString &appName, uint replacesId,
|
|||
// timeout == 0, for other notifications
|
||||
// clearability is pointless
|
||||
|
||||
if (!appIcon.isEmpty() && mPlugin->config()->get("generalSynchronizeIcons", true)) {
|
||||
int size = KIconLoader::SizeEnormous; // use big size to allow for good
|
||||
// quality on High-DPI mobile devices
|
||||
QString iconPath = KIconLoader::global()->iconPath(appIcon, -size, true);
|
||||
if (!iconPath.isEmpty()) {
|
||||
if (!iconPath.endsWith(QLatin1String(".png")) &&
|
||||
KIconLoader::global()->theme()->name() != QLatin1String("hicolor")) {
|
||||
// try falling back to hicolor theme:
|
||||
KIconTheme hicolor(QStringLiteral("hicolor"));
|
||||
if (hicolor.isValid()) {
|
||||
iconPath = hicolor.iconPath(appIcon + ".png", size, KIconLoader::MatchBest);
|
||||
//qCDebug(KDECONNECT_PLUGIN_SENDNOTIFICATION) << "Found non-png icon in default theme trying fallback to hicolor:" << iconPath;
|
||||
}
|
||||
}
|
||||
if (iconPath.endsWith(QLatin1String(".png"))) {
|
||||
//qCDebug(KDECONNECT_PLUGIN_SENDNOTIFICATION) << "Appending icon " << iconPath;
|
||||
QSharedPointer<QIODevice> iconFile(new QFile(iconPath));
|
||||
np.setPayload(iconFile, iconFile->size());
|
||||
}
|
||||
}
|
||||
// sync any icon data?
|
||||
if (mPlugin->config()->get("generalSynchronizeIcons", true)) {
|
||||
QSharedPointer<QIODevice> iconSource;
|
||||
// try different image sources according to priorities in notifications-
|
||||
// spec version 1.2:
|
||||
if (hints.contains("image-data"))
|
||||
iconSource = iconForImageData(hints["image-data"]);
|
||||
else if (hints.contains("image_data")) // 1.1 backward compatibility
|
||||
iconSource = iconForImageData(hints["image_data"]);
|
||||
else if (hints.contains("image-path"))
|
||||
iconSource = iconForIconName(hints["image-path"].toString());
|
||||
else if (hints.contains("image_path")) // 1.1 backward compatibility
|
||||
iconSource = iconForIconName(hints["image_path"].toString());
|
||||
else if (!appIcon.isEmpty())
|
||||
iconSource = iconForIconName(appIcon);
|
||||
else if (hints.contains("icon_data")) // < 1.1 backward compatibility
|
||||
iconSource = iconForImageData(hints["icon_data"]);
|
||||
|
||||
if (iconSource)
|
||||
np.setPayload(iconSource, iconSource->size());
|
||||
}
|
||||
|
||||
mPlugin->sendPackage(np);
|
||||
|
|
|
@ -19,7 +19,10 @@
|
|||
*/
|
||||
|
||||
#include <QtDBus/QDBusAbstractAdaptor>
|
||||
#include <QtDBus/QDBusArgument>
|
||||
#include <core/device.h>
|
||||
#include <QBuffer>
|
||||
#include <QFile>
|
||||
|
||||
class KdeConnectPlugin;
|
||||
class Notification;
|
||||
|
@ -38,6 +41,15 @@ protected:
|
|||
KdeConnectPlugin* mPlugin;
|
||||
QHash<QString, NotifyingApplication> applications;
|
||||
|
||||
// virtual helper function to make testing possible (QDBusArgument can not
|
||||
// be injected without making a DBUS-call):
|
||||
virtual bool parseImageDataArgument(const QVariant& argument, int& width,
|
||||
int& height, int& rowStride, int& bitsPerSample,
|
||||
int& channels, bool& hasAlpha,
|
||||
QByteArray& imageData) const;
|
||||
QSharedPointer<QIODevice> iconForImageData(const QVariant& argument) const;
|
||||
QSharedPointer<QIODevice> iconForIconName(const QString& iconName) const;
|
||||
|
||||
public Q_SLOTS:
|
||||
Q_SCRIPTABLE uint Notify(const QString&, uint, const QString&,
|
||||
const QString&, const QString&,
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Browse the remote device filesystem using SFTP",
|
||||
"Description[ar]": "تصفّح نظام ملفّات الجهاز البعيد باستخدام SFTP",
|
||||
"Description[ast]": "Restola'l sistema de ficheros del preséu remotu usando SFTP",
|
||||
"Description[ca@valencia]": "Navega pel sistema de fitxers del dispositiu remot emprant SFTP",
|
||||
"Description[ca]": "Navega pel sistema de fitxers del dispositiu remot emprant SFTP",
|
||||
"Description[cs]": "Prohlížejte souborový systém zařízení pomocí SFTP",
|
||||
"Description[da]": "Gennemse filsystemet på eksterne enheder med SFTP",
|
||||
"Description[de]": "Browsen im Dateisystem des entfernten Geräts mit SFTP",
|
||||
"Description[el]": "Περιήγηση του απομακρυσμένου συστήματος αρχείων με χρήση SFTP",
|
||||
"Description[es]": "Navegar por el sistema de archivos del dispositivo remoto usando SFTP",
|
||||
"Description[et]": "Oma seadme failisüsteemi sirvimine SFTP vahendusel",
|
||||
"Description[fi]": "Selaa etälaitteiden tiedostojärjestelmiä SFTP:llä",
|
||||
|
@ -29,7 +32,7 @@
|
|||
"Description[pt_BR]": "Navegue pelo sistema de arquivos do dispositivo usando SFTP",
|
||||
"Description[ru]": "Просмотр файловой системы удалённого устройства с помощью SFTP",
|
||||
"Description[sk]": "Prehliadať súborový systém vzdialeného zariadenia pomocou SFTP",
|
||||
"Description[sv]": "Bläddra i fjärrenhetens filsystem med SFTP",
|
||||
"Description[sv]": "Bläddra i den andra apparatens filsystem med SFTP",
|
||||
"Description[tr]": "Uzak aygıt dosya sistemine SFTP kullanarak göz atın",
|
||||
"Description[uk]": "Перегляд файлових систем на сторонніх пристроях за допомогою SFTP",
|
||||
"Description[x-test]": "xxBrowse the remote device filesystem using SFTPxx",
|
||||
|
@ -39,11 +42,14 @@
|
|||
"Id": "kdeconnect_sftp",
|
||||
"License": "GPL",
|
||||
"Name": "Remote filesystem browser",
|
||||
"Name[ar]": "متصفّح نظام الملفّات البعيد",
|
||||
"Name[ast]": "Restolador de sistema de ficheros remotu",
|
||||
"Name[ca@valencia]": "Navegador del sistema de fitxers remot",
|
||||
"Name[ca]": "Navegador del sistema de fitxers remot",
|
||||
"Name[cs]": "Vzdálený prohlížeč souborového systému",
|
||||
"Name[da]": "Filbrowser til eksternt filsystem",
|
||||
"Name[de]": "Datei-Browser für entferne Systeme",
|
||||
"Name[el]": "Περιηγητής απομακρυσμένου συστήματος αρχείων",
|
||||
"Name[es]": "Navegador de sistema de archivos remoto",
|
||||
"Name[et]": "Kaug-failisüsteemi sirvija",
|
||||
"Name[fi]": "Etätiedostojärjestelmäselain",
|
||||
|
|
|
@ -9,11 +9,14 @@
|
|||
}
|
||||
],
|
||||
"Description": "Receive and send files, URLs or plain text easily",
|
||||
"Description[ar]": "استقبل الملفّات أو العناوين أو النّصوص الصّرفة وأرسلها بسهولة",
|
||||
"Description[ast]": "Recibi y unvia ficheros, URLs o testu planu cenciellamente",
|
||||
"Description[ca@valencia]": "Rep i envia fitxers, URL o text pla amb facilitat",
|
||||
"Description[ca]": "Rep i envia fitxers, URL o text pla amb facilitat",
|
||||
"Description[cs]": "Snadno přijímejte a posílejte soubory, URL nebo čistý text",
|
||||
"Description[da]": "Modtag og send nemt filer, URL'er eller klartekst",
|
||||
"Description[de]": "Empfang und Senden von Dateien, URLs oder einfachem Text",
|
||||
"Description[el]": "Εύκολη λήψη και αποστολή αρχείων, URL ή απλού κειμένου",
|
||||
"Description[es]": "Recibir y enviar archivos, URL o texto sin formato fácilmente",
|
||||
"Description[et]": "Failide, URL-ide või lihtteksti hõlpus vastuvõtmine ja saatmine",
|
||||
"Description[fi]": "Vastaanota ja lähetä tiedostoja, verkko-osoitteita tai tekstiä helposti",
|
||||
|
@ -38,11 +41,14 @@
|
|||
"Id": "kdeconnect_share",
|
||||
"License": "GPL",
|
||||
"Name": "Share and receive",
|
||||
"Name[ar]": "شارك واستقبل",
|
||||
"Name[ast]": "Compartir y recibir",
|
||||
"Name[ca@valencia]": "Comparteix i rep",
|
||||
"Name[ca]": "Comparteix i rep",
|
||||
"Name[cs]": "Sdílet a přijímat",
|
||||
"Name[da]": "Del og modtag",
|
||||
"Name[de]": "Senden und Empfangen",
|
||||
"Name[el]": "Διαμοιρασμός και λήψη",
|
||||
"Name[es]": "Compartir y recibir",
|
||||
"Name[et]": "Jagamine ja vastuvõtmine",
|
||||
"Name[fi]": "Jaa ja vastaanota",
|
||||
|
|
|
@ -6,6 +6,8 @@ X-KDE-Library=kdeconnect_share_config
|
|||
X-KDE-ParentComponents=kdeconnect_share
|
||||
|
||||
Name=Share plugin settings
|
||||
Name[ar]=إعدادات ملحقة المشاركة
|
||||
Name[ast]=Axustes del complementu de compartir
|
||||
Name[bg]=Настройки на приставката за споделяне
|
||||
Name[bs]=Podijeli postavke dodatka
|
||||
Name[ca]=Ajustaments del connector Compartició
|
||||
|
@ -13,12 +15,14 @@ Name[ca@valencia]=Ajustaments del connector Compartició
|
|||
Name[cs]=Nastavení modulu sdílení
|
||||
Name[da]=Indstilling af deling-plugin
|
||||
Name[de]=Modul-Einstellungen für Veröffentlichung
|
||||
Name[el]=Ρυθμίσεις προσθέτου κοινής χρήσης
|
||||
Name[en_GB]=Share plugin settings
|
||||
Name[es]=Ajustes del complemento para compartir
|
||||
Name[et]=Jagamisplugina seadistused
|
||||
Name[fi]=Jakoliitännäisen asetukset
|
||||
Name[fr]=Paramètres du module de partage
|
||||
Name[gl]=Configuración do complemento de compartir
|
||||
Name[he]=שתף את הגדרות התוספים
|
||||
Name[hu]=Megosztás bővítmény beállításai
|
||||
Name[it]=Impostazioni estensione Condivisione
|
||||
Name[ko]=공유 플러그인 설정
|
||||
|
|
|
@ -24,11 +24,14 @@
|
|||
"Id": "kdeconnect_telephony",
|
||||
"License": "GPL",
|
||||
"Name": "Telephony integration",
|
||||
"Name[ar]": "تكامل الهاتف",
|
||||
"Name[ast]": "Integración telefónica",
|
||||
"Name[ca@valencia]": "Integració amb la telefonia",
|
||||
"Name[ca]": "Integració amb la telefonia",
|
||||
"Name[cs]": "Integrace telefonu",
|
||||
"Name[da]": "Telefoniintegration",
|
||||
"Name[de]": "Telefon-Integration",
|
||||
"Name[el]": "Ενσωμάτωση τηλεφωνίας",
|
||||
"Name[es]": "Integración con el teléfono",
|
||||
"Name[et]": "Telefoniga lõimimine",
|
||||
"Name[fi]": "Puhelinintegrointi",
|
||||
|
|
|
@ -22,8 +22,10 @@
|
|||
#include <QApplication>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QTest>
|
||||
#include <QTemporaryFile>
|
||||
#include <QBuffer>
|
||||
#include <QStandardPaths>
|
||||
#include <QImage>
|
||||
#include <QColor>
|
||||
|
||||
#include <kiconloader.h>
|
||||
|
||||
|
@ -85,17 +87,23 @@ public:
|
|||
return sentPackages;
|
||||
}
|
||||
|
||||
const NetworkPackage* getLastPackage() const
|
||||
NetworkPackage* getLastPackage()
|
||||
{
|
||||
return lastPackage;
|
||||
}
|
||||
|
||||
void deleteLastPackage()
|
||||
{
|
||||
delete lastPackage;
|
||||
lastPackage = nullptr;
|
||||
}
|
||||
|
||||
public Q_SLOTS:
|
||||
bool sendPackage(NetworkPackage& np) override
|
||||
{
|
||||
++sentPackages;
|
||||
// copy package manually to allow for inspection (can't use copy-constructor)
|
||||
delete lastPackage;
|
||||
deleteLastPackage();
|
||||
lastPackage = new NetworkPackage(np.type());
|
||||
Q_ASSERT(lastPackage);
|
||||
for (QVariantMap::ConstIterator iter = np.body().constBegin();
|
||||
|
@ -128,6 +136,22 @@ public:
|
|||
applications = value;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool parseImageDataArgument(const QVariant& argument, int& width,
|
||||
int& height, int& rowStride, int& bitsPerSample,
|
||||
int& channels, bool& hasAlpha,
|
||||
QByteArray& imageData) const override
|
||||
{
|
||||
width = argument.toMap().value("width").toInt();
|
||||
height = argument.toMap().value("height").toInt();
|
||||
rowStride = argument.toMap().value("rowStride").toInt();
|
||||
bitsPerSample = argument.toMap().value("bitsPerSample").toInt();
|
||||
channels = argument.toMap().value("channels").toInt();
|
||||
hasAlpha = argument.toMap().value("hasAlpha").toBool();
|
||||
imageData = argument.toMap().value("imageData").toByteArray();
|
||||
return true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class TestNotificationListener : public QObject
|
||||
|
@ -327,24 +351,37 @@ void TestNotificationListener::testNotify()
|
|||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
|
||||
// icon synchronization:
|
||||
QStringList iconPaths;
|
||||
// appIcon
|
||||
int count = 0;
|
||||
Q_FOREACH (const auto& iconName, KIconLoader::global()->queryIcons(-KIconLoader::SizeEnormous, KIconLoader::Application)) {
|
||||
if (!iconName.endsWith(".png"))
|
||||
continue;
|
||||
if (count++ > 3) // max 3 iterations
|
||||
break;
|
||||
iconPaths.append(iconName); // memorize some paths for later
|
||||
|
||||
// existing icons are sync-ed if requested
|
||||
plugin->config()->set("generalSynchronizeIcons", true);
|
||||
QFileInfo fi(iconName);
|
||||
//qDebug() << "XXX" << iconName << fi.baseName() << fi.size();
|
||||
retId = listener->Notify(appName, replacesId, fi.baseName(), summary, body, {}, {{}}, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), fi.size());
|
||||
// works also with abolute paths
|
||||
retId = listener->Notify(appName, replacesId, iconName, summary, body, {}, {{}}, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), fi.size());
|
||||
// extensions other than png are not accepted:
|
||||
retId = listener->Notify(appName, replacesId, iconName + ".svg", summary, body, {}, {{}}, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(!d->getLastPackage()->hasPayload());
|
||||
|
||||
// otherwise no payload:
|
||||
// if sync not requested no payload:
|
||||
plugin->config()->set("generalSynchronizeIcons", false);
|
||||
retId = listener->Notify(appName, replacesId, fi.baseName(), summary, body, {}, {{}}, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
|
@ -352,6 +389,111 @@ void TestNotificationListener::testNotify()
|
|||
QVERIFY(!d->getLastPackage()->hasPayload());
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), 0);
|
||||
}
|
||||
plugin->config()->set("generalSynchronizeIcons", true);
|
||||
|
||||
// image-path in hints
|
||||
if (iconPaths.size() > 0) {
|
||||
retId = listener->Notify(appName, replacesId, iconPaths.size() > 1 ? iconPaths[1] : icon, summary, body, {}, {{"image-path", iconPaths[0]}}, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
QFileInfo hintsFi(iconPaths[0]);
|
||||
// image-path has priority over appIcon parameter:
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), hintsFi.size());
|
||||
}
|
||||
|
||||
// image_path in hints
|
||||
if (iconPaths.size() > 0) {
|
||||
retId = listener->Notify(appName, replacesId, iconPaths.size() > 1 ? iconPaths[1] : icon, summary, body, {}, {{"image_path", iconPaths[0]}}, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
QFileInfo hintsFi(iconPaths[0]);
|
||||
// image_path has priority over appIcon parameter:
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), hintsFi.size());
|
||||
}
|
||||
|
||||
// image-data in hints
|
||||
// set up:
|
||||
QBuffer *buffer;
|
||||
QImage image;
|
||||
int width = 2, height = 2, rowStride = 4*width, bitsPerSample = 8,
|
||||
channels = 4;
|
||||
bool hasAlpha = 1;
|
||||
char rawData[] = { 0x01, 0x02, 0x03, 0x04, // raw rgba data
|
||||
0x11, 0x12, 0x13, 0x14,
|
||||
0x21, 0x22, 0x23, 0x24,
|
||||
0x31, 0x32, 0x33, 0x34 };
|
||||
QByteArray byteData(rawData, rowStride*height);
|
||||
QVariantMap imageData = {{"width", width}, {"height", height}, {"rowStride", rowStride},
|
||||
{"bitsPerSample", bitsPerSample}, {"channels", channels},
|
||||
{"hasAlpha", hasAlpha}, {"imageData", rawData}};
|
||||
QVariantMap hints;
|
||||
#define COMPARE_PIXEL(x, y) \
|
||||
QCOMPARE(qRed(image.pixel(x,y)), (int)rawData[x*4 + y*rowStride + 0]); \
|
||||
QCOMPARE(qGreen(image.pixel(x,y)), (int)rawData[x*4 + y*rowStride + 1]); \
|
||||
QCOMPARE(qBlue(image.pixel(x,y)), (int)rawData[x*4 + y*rowStride + 2]); \
|
||||
QCOMPARE(qAlpha(image.pixel(x,y)), (int)rawData[x*4 + y*rowStride + 3]);
|
||||
|
||||
hints.insert("image-data", imageData);
|
||||
if (iconPaths.size() > 0)
|
||||
hints.insert("image-path", iconPaths[0]);
|
||||
retId = listener->Notify(appName, replacesId, icon, summary, body, {}, hints, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
buffer = dynamic_cast<QBuffer*>(d->getLastPackage()->payload().data());
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), buffer->size());
|
||||
// image-data is attached as png data
|
||||
QVERIFY(image.loadFromData(reinterpret_cast<const uchar*>(buffer->data().constData()), buffer->size(), "PNG"));
|
||||
// image-data has priority over image-path:
|
||||
QCOMPARE(image.byteCount(), rowStride*height);
|
||||
// rgba -> argb conversion was done correctly:
|
||||
COMPARE_PIXEL(0,0);
|
||||
COMPARE_PIXEL(1,0);
|
||||
COMPARE_PIXEL(0,1);
|
||||
COMPARE_PIXEL(1,1);
|
||||
|
||||
// same for image_data in hints
|
||||
hints.clear();
|
||||
hints.insert("image-data", imageData);
|
||||
if (iconPaths.size() > 0)
|
||||
hints.insert("image_path", iconPaths[0]);
|
||||
retId = listener->Notify(appName, replacesId, icon, summary, body, {}, hints, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
buffer = dynamic_cast<QBuffer*>(d->getLastPackage()->payload().data());
|
||||
QCOMPARE(d->getLastPackage()->payloadSize(), buffer->size());
|
||||
// image-data is attached as png data
|
||||
QVERIFY(image.loadFromData(reinterpret_cast<const uchar*>(buffer->data().constData()), buffer->size(), "PNG"));
|
||||
// image_data has priority over image_path/image-path:
|
||||
QCOMPARE(image.byteCount(), rowStride*height);
|
||||
// rgba -> argb conversion was done correctly:
|
||||
COMPARE_PIXEL(0,0);
|
||||
COMPARE_PIXEL(1,0);
|
||||
COMPARE_PIXEL(0,1);
|
||||
COMPARE_PIXEL(1,1);
|
||||
|
||||
// same for icon_data, which has lowest priority
|
||||
hints.clear();
|
||||
hints.insert("icon_data", imageData);
|
||||
retId = listener->Notify(appName, replacesId, "", summary, body, {}, hints, 0);
|
||||
QCOMPARE(retId, replacesId);
|
||||
QCOMPARE(++proxiedNotifications, d->getSentPackages());
|
||||
QVERIFY(d->getLastPackage());
|
||||
QVERIFY(d->getLastPackage()->hasPayload());
|
||||
buffer = dynamic_cast<QBuffer*>(d->getLastPackage()->payload().data());
|
||||
// image-data is attached as png data
|
||||
QVERIFY(image.loadFromData(reinterpret_cast<const uchar*>(buffer->data().constData()), buffer->size(), "PNG"));
|
||||
QCOMPARE(image.byteCount(), rowStride*height);
|
||||
// rgba -> argb conversion was done correctly:
|
||||
COMPARE_PIXEL(0,0);
|
||||
COMPARE_PIXEL(1,0);
|
||||
COMPARE_PIXEL(0,1);
|
||||
COMPARE_PIXEL(1,1);
|
||||
|
||||
#undef COMPARE_PIXEL
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue