diff --git a/.gitignore b/.gitignore index 506dca6d3..b2337110d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ build -android-shine.kdev4 +*.kdev4 Makefile lib src/Makefile diff --git a/cli/kdeconnect-cli.cpp b/cli/kdeconnect-cli.cpp index be6a65e71..454143edf 100644 --- a/cli/kdeconnect-cli.cpp +++ b/cli/kdeconnect-cli.cpp @@ -24,31 +24,49 @@ #include #include #include +#include +#include #include #include #include int main(int argc, char** argv) { - K4AboutData about("kctool", 0, ki18n(("kdeconnect-cli")), "1.0", ki18n("KDE Connect CLI tool"), - K4AboutData::License_GPL, ki18n("(C) 2013 Aleix Pol Gonzalez")); + KAboutData about("kdeconnect-cli", "kdeconnect-cli", ki18n(("kdeconnect-cli")), "1.0", ki18n("KDE Connect CLI tool"), + KAboutData::License_GPL, ki18n("(C) 2013 Aleix Pol Gonzalez")); + about.addAuthor( ki18n("Aleix Pol Gonzalez"), KLocalizedString(), "aleixpol@kde.org" ); KCmdLineArgs::init(argc, argv, &about); KCmdLineOptions options; options.add("l") .add("list-devices", ki18n("List all devices")); - options.add("share ", ki18n("Share a file")); + options.add("share ", ki18n("Share a file to a said device")); + options.add("pair", ki18n("Request pairing to a said device")); + options.add("unpair", ki18n("Stop pairing to a said device")); + options.add("ping", ki18n("Sends a ping to said device")); + options.add("list-notifications", ki18n("Display the notifications on a said device")); options.add("device ", ki18n("Device ID")); KCmdLineArgs::addCmdLineOptions( options ); KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); KApplication app; if(args->isSet("l")) { DevicesModel devices; - devices.setDisplayFilter(DevicesModel::StatusUnknown); for(int i=0, rows=devices.rowCount(); iisSet("share")) { url = args->makeURL(args->getOption("share").toLatin1()); - } - args->clear(); - - if(!url.isEmpty() && !device.isEmpty()) { - QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kdeconnect", "/modules/kdeconnect/devices/"+device+"/share", "org.kde.kdeconnect.device.share", "shareUrl"); - msg.setArguments(QVariantList() << url.toString()); - + args->clear(); + if(!url.isEmpty() && !device.isEmpty()) { + QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kdeconnect", "/modules/kdeconnect/devices/"+device+"/share", "org.kde.kdeconnect.device.share", "shareUrl"); + msg.setArguments(QVariantList() << url.toString()); + QDBusConnection::sessionBus().call(msg); + } else + KCmdLineArgs::usageError(i18n("Couldn't share %1", url.toString())); + } else if(args->isSet("pair")) { + DeviceDbusInterface dev(device); + if(dev.isPaired()) + std::cout << "Already paired" << std::endl; + else { + QDBusPendingReply req = dev.requestPair(); + req.waitForFinished(); + } + } else if(args->isSet("unpair")) { + DeviceDbusInterface dev(device); + if(!dev.isPaired()) + std::cout << "Already not paired" << std::endl; + else { + QDBusPendingReply req = dev.unpair(); + req.waitForFinished(); + } + } else if(args->isSet("ping")) { + QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kdeconnect", "/modules/kdeconnect/devices/"+device+"/ping", "org.kde.kdeconnect.device.ping", "sendPing"); QDBusConnection::sessionBus().call(msg); - } else + } else if(args->isSet("list-notifications")) { + NotificationsModel notifications; + notifications.setDeviceId(device); + for(int i=0, rows=notifications.rowCount(); i +# Copyright 2011 Marc-Andre Moreau +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#============================================================================= + +find_path(XTEST_INCLUDE_DIR NAMES X11/extensions/XTest.h + PATH_SUFFIXES X11/extensions + DOC "The XTest include directory" +) + +find_library(XTEST_LIBRARY NAMES Xtst + DOC "The XTest library" +) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(XTest DEFAULT_MSG XTEST_LIBRARY XTEST_INCLUDE_DIR) + +if(XTEST_FOUND) + set( XTEST_LIBRARIES ${XTEST_LIBRARY} ) + set( XTEST_INCLUDE_DIRS ${XTEST_INCLUDE_DIR} ) +endif() + +mark_as_advanced(XTEST_INCLUDE_DIR XTEST_LIBRARY) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index b2d0d89be..d8ed92c62 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -2,6 +2,11 @@ project(KDEConnectCore) add_definitions(-DTRANSLATION_DOMAIN=\"kdeconnect-core\") +set(KDECONNECT_VERSION_MAJOR 1) +set(KDECONNECT_VERSION_MINOR 0) +set(KDECONNECT_VERSION_PATCH 1) +set(KDECONNECT_VERSION "${KDECONNECT_VERSION_MAJOR}.${KDECONNECT_VERSION_MINOR}.${KDECONNECT_VERSION_PATCH}") + include_directories( ${QJSON_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} @@ -24,21 +29,23 @@ set(kded_kdeconnect_SRCS filetransferjob.cpp daemon.cpp device.cpp - kdebugnamespace.cpp ) add_library(kdeconnectcore SHARED ${kded_kdeconnect_SRCS}) target_link_libraries(kdeconnectcore PUBLIC KF5::KDELibs4Support - PRIVATE KF5::KIOWidgets KF5::KCMUtils Qt5::Network - ${QJSON_LIBRARIES} - ${QCA2_LIBRARIES} ) + +set_target_properties(kdeconnectcore PROPERTIES + VERSION ${KDECONNECT_VERSION} + SOVERSION ${KDECONNECT_VERSION_MAJOR} +) + target_include_directories(kdeconnectcore PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) generate_export_header(kdeconnectcore EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/kdeconnectcore_export.h BASE_NAME KDEConnectCore) diff --git a/core/backends/lan/landevicelink.cpp b/core/backends/lan/landevicelink.cpp index 03c9f1ff8..be8a37b1f 100644 --- a/core/backends/lan/landevicelink.cpp +++ b/core/backends/lan/landevicelink.cpp @@ -80,7 +80,7 @@ void LanDeviceLink::dataReceived() const QByteArray package = mSocketLineReader->readLine(); - //kDebug(kdeconnect_kded()) << "LanDeviceLink dataReceived" << package; + //kDebug(debugArea()) << "LanDeviceLink dataReceived" << package; NetworkPackage unserialized(QString::null); NetworkPackage::unserialize(package, &unserialized); @@ -90,7 +90,7 @@ void LanDeviceLink::dataReceived() unserialized.decrypt(mPrivateKey, &decrypted); if (decrypted.hasPayloadTransferInfo()) { - kDebug(kdeconnect_kded()) << "HasPayloadTransferInfo"; + kDebug(debugArea()) << "HasPayloadTransferInfo"; DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), decrypted.payloadTransferInfo()); job->start(); decrypted.setPayload(job->getPayload(), decrypted.payloadSize()); diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp index 2369dc448..c59cba242 100644 --- a/core/backends/lan/lanlinkprovider.cpp +++ b/core/backends/lan/lanlinkprovider.cpp @@ -68,7 +68,7 @@ LanLinkProvider::LanLinkProvider() void LanLinkProvider::onStart() { - bool buildSucceed = mUdpServer->bind(QHostAddress::Broadcast, port, QUdpSocket::ShareAddress); + bool buildSucceed = mUdpServer->bind(QHostAddress::Any, port, QUdpSocket::ShareAddress); Q_ASSERT(buildSucceed); mTcpPort = port; @@ -151,7 +151,7 @@ void LanLinkProvider::connectError() disconnect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectError())); disconnect(socket, SIGNAL(connected()), this, SLOT(connected())); - kDebug(kdeconnect_kded()) << "Fallback (1), try reverse connection"; + kDebug(debugArea()) << "Fallback (1), try reverse connection"; NetworkPackage np(""); NetworkPackage::createIdentityPackage(&np); np.set("tcpPort", mTcpPort); @@ -173,7 +173,7 @@ void LanLinkProvider::connected() NetworkPackage* receivedPackage = receivedIdentityPackages[socket].np; const QString& deviceId = receivedPackage->get("deviceId"); - //kDebug(kdeconnect_kded()) << "Connected" << socket->isWritable(); + //kDebug(debugArea()) << "Connected" << socket->isWritable(); LanDeviceLink* deviceLink = new LanDeviceLink(deviceId, this, socket); @@ -185,7 +185,7 @@ void LanLinkProvider::connected() //TODO: Use reverse connection too to preffer connecting a unstable device (a phone) to a stable device (a computer) if (success) { - //kDebug(kdeconnect_kded()) << "Handshaking done (i'm the existing device)"; + //kDebug(debugArea()) << "Handshaking done (i'm the existing device)"; connect(deviceLink, SIGNAL(destroyed(QObject*)), this, SLOT(deviceLinkDestroyed(QObject*))); @@ -206,7 +206,7 @@ void LanLinkProvider::connected() } else { //I think this will never happen - kDebug(kdeconnect_kded()) << "Fallback (2), try reverse connection"; + kDebug(debugArea()) << "Fallback (2), try reverse connection"; mUdpSocket.writeDatagram(np2.serialize(), receivedIdentityPackages[socket].sender, port); delete deviceLink; } @@ -220,7 +220,7 @@ void LanLinkProvider::connected() //I'm the new device and this is the answer to my UDP introduction (no data received yet) void LanLinkProvider::newConnection() { - //kDebug(kdeconnect_kded()) << "LanLinkProvider newConnection"; + //kDebug(debugArea()) << "LanLinkProvider newConnection"; while(mTcpServer->hasPendingConnections()) { QTcpSocket* socket = mTcpServer->nextPendingConnection(); @@ -234,7 +234,7 @@ void LanLinkProvider::newConnection() NetworkPackage::createIdentityPackage(&np); int written = socket->write(np.serialize()); - kDebug(kdeconnect_kded()) << "LanLinkProvider sent package." << written << " bytes written, waiting for reply"; + kDebug(debugArea()) << "LanLinkProvider sent package." << written << " bytes written, waiting for reply"; */ } @@ -246,20 +246,20 @@ void LanLinkProvider::dataReceived() const QByteArray data = socket->readLine(); - //kDebug(kdeconnect_kded()) << "LanLinkProvider received reply:" << data; + //kDebug(debugArea()) << "LanLinkProvider received reply:" << data; NetworkPackage np(""); bool success = NetworkPackage::unserialize(data, &np); if (!success || np.type() != PACKAGE_TYPE_IDENTITY) { - kDebug(kdeconnect_kded()) << "LanLinkProvider/newConnection: Not an identification package (wuh?)"; + kDebug(debugArea()) << "LanLinkProvider/newConnection: Not an identification package (wuh?)"; return; } const QString& deviceId = np.get("deviceId"); LanDeviceLink* deviceLink = new LanDeviceLink(deviceId, this, socket); - //kDebug(kdeconnect_kded()) << "Handshaking done (i'm the new device)"; + //kDebug(debugArea()) << "Handshaking done (i'm the new device)"; connect(deviceLink, SIGNAL(destroyed(QObject*)), this, SLOT(deviceLinkDestroyed(QObject*))); @@ -282,7 +282,7 @@ void LanLinkProvider::dataReceived() void LanLinkProvider::deviceLinkDestroyed(QObject* destroyedDeviceLink) { - //kDebug(kdeconnect_kded()) << "deviceLinkDestroyed"; + //kDebug(debugArea()) << "deviceLinkDestroyed"; const QString id = destroyedDeviceLink->property("deviceId").toString(); QMap< QString, DeviceLink* >::iterator oldLinkIterator = mLinks.find(id); if (oldLinkIterator != mLinks.end() && oldLinkIterator.value() == destroyedDeviceLink) { diff --git a/core/backends/lan/uploadjob.cpp b/core/backends/lan/uploadjob.cpp index a5b12154e..752bf69e6 100644 --- a/core/backends/lan/uploadjob.cpp +++ b/core/backends/lan/uploadjob.cpp @@ -39,7 +39,7 @@ void UploadJob::start() while(!mServer->listen(QHostAddress::Any, mPort)) { mPort++; if (mPort > 1764) { //No ports available? - kDebug(kdeconnect_kded()) << "Error opening a port in range 1739-1764 for file transfer"; + kDebug(debugArea()) << "Error opening a port in range 1739-1764 for file transfer"; mPort = 0; return; } diff --git a/core/daemon.cpp b/core/daemon.cpp index 9b4673359..34b0139bf 100644 --- a/core/daemon.cpp +++ b/core/daemon.cpp @@ -66,13 +66,13 @@ Daemon::Daemon(QObject *parent) uuid = uuid.mid(1, uuid.length() - 2).replace("-", "_"); config->group("myself").writeEntry("id", uuid); config->sync(); - kDebug(kdeconnect_kded()) << "My id:" << uuid; + kDebug(debugArea()) << "My id:" << uuid; } - //kDebug(kdeconnect_kded()) << "QCA supported capabilities:" << QCA::supportedFeatures().join(","); + //kDebug(debugArea()) << "QCA supported capabilities:" << QCA::supportedFeatures().join(","); if(!QCA::isSupported("rsa")) { //TODO: Maybe display this in a more visible way? - kWarning(kdeconnect_kded()) << "Error: KDE Connect could not find support for RSA in your QCA installation, if your distribution provides" + kWarning(debugArea()) << "Error: KDE Connect could not find support for RSA in your QCA installation, if your distribution provides" << "separate packages for QCA-ossl and QCA-gnupg plugins, make sure you have them installed and try again"; return; } @@ -86,13 +86,13 @@ Daemon::Daemon(QObject *parent) if (!privKey.open(QIODevice::ReadWrite | QIODevice::Truncate)) { - kWarning(kdeconnect_kded()) << "Error: KDE Connect could not create private keys file: " << privateKeyPath; + kWarning(debugArea()) << "Error: KDE Connect could not create private keys file: " << privateKeyPath; return; } if (!privKey.setPermissions(strict)) { - kWarning(kdeconnect_kded()) << "Error: KDE Connect could not set permissions for private file: " << privateKeyPath; + kWarning(debugArea()) << "Error: KDE Connect could not set permissions for private file: " << privateKeyPath; } //http://delta.affinix.com/docs/qca/rsatest_8cpp-example.html @@ -110,11 +110,11 @@ Daemon::Daemon(QObject *parent) if (QFile::permissions(config->group("myself").readEntry("privateKeyPath")) != strict) { - kWarning(kdeconnect_kded()) << "Error: KDE Connect detects wrong permissions for private file " << config->group("myself").readEntry("privateKeyPath"); + kWarning(debugArea()) << "Error: KDE Connect detects wrong permissions for private file " << config->group("myself").readEntry("privateKeyPath"); } //Debugging - kDebug(kdeconnect_kded()) << "Starting KdeConnect daemon"; + kDebug(debugArea()) << "Starting KdeConnect daemon"; //Load backends (hardcoded by now, should be plugins in a future) d->mLinkProviders.insert(new LanLinkProvider()); @@ -182,14 +182,14 @@ void Daemon::onNewDeviceLink(const NetworkPackage& identityPackage, DeviceLink* const QString& id = identityPackage.get("deviceId"); - //kDebug(kdeconnect_kded()) << "Device discovered" << id << "via" << dl->provider()->name(); + //kDebug(debugArea()) << "Device discovered" << id << "via" << dl->provider()->name(); if (d->mDevices.contains(id)) { - //kDebug(kdeconnect_kded()) << "It is a known device"; + //kDebug(debugArea()) << "It is a known device"; Device* device = d->mDevices[id]; device->addLink(identityPackage, dl); } else { - //kDebug(kdeconnect_kded()) << "It is a new device"; + //kDebug(debugArea()) << "It is a new device"; Device* device = new Device(this, identityPackage, dl); connect(device, SIGNAL(reachableStatusChanged()), this, SLOT(onDeviceReachableStatusChanged())); @@ -210,12 +210,12 @@ void Daemon::onDeviceReachableStatusChanged() Q_EMIT deviceVisibilityChanged(id, device->isReachable()); - //kDebug(kdeconnect_kded()) << "Device" << device->name() << "reachable status changed:" << device->isReachable(); + //kDebug(debugArea()) << "Device" << device->name() << "reachable status changed:" << device->isReachable(); if (!device->isReachable()) { if (!device->isPaired()) { - kDebug(kdeconnect_kded()) << "Destroying device" << device->name(); + kDebug(debugArea()) << "Destroying device" << device->name(); Q_EMIT deviceRemoved(id); d->mDevices.remove(id); device->deleteLater(); diff --git a/core/device.cpp b/core/device.cpp index 049705bd3..0e341d100 100644 --- a/core/device.cpp +++ b/core/device.cpp @@ -235,7 +235,7 @@ static bool lessThan(DeviceLink* p1, DeviceLink* p2) void Device::addLink(const NetworkPackage& identityPackage, DeviceLink* link) { - //kDebug(kdeconnect_kded()) << "Adding link to" << id() << "via" << link->provider(); + //kDebug(debugArea()) << "Adding link to" << id() << "via" << link->provider(); m_protocolVersion = identityPackage.get("protocolVersion"); if (m_protocolVersion != NetworkPackage::ProtocolVersion) { @@ -282,7 +282,7 @@ void Device::removeLink(DeviceLink* link) { m_deviceLinks.removeOne(link); - //kDebug(kdeconnect_kded()) << "RemoveLink" << m_deviceLinks.size() << "links remaining"; + //kDebug(debugArea()) << "RemoveLink" << m_deviceLinks.size() << "links remaining"; if (m_deviceLinks.isEmpty()) { reloadPlugins(); @@ -315,12 +315,12 @@ void Device::privateReceivedPackage(const NetworkPackage& np) { if (np.type() == PACKAGE_TYPE_PAIR) { - //kDebug(kdeconnect_kded()) << "Pair package"; + //kDebug(debugArea()) << "Pair package"; bool wantsPair = np.get("pair"); if (wantsPair == isPaired()) { - kDebug(kdeconnect_kded()) << "Already" << (wantsPair? "paired":"unpaired"); + kDebug(debugArea()) << "Already" << (wantsPair? "paired":"unpaired"); if (m_pairStatus == Device::Requested) { m_pairStatus = Device::NotPaired; m_pairingTimeut.stop(); @@ -335,7 +335,7 @@ void Device::privateReceivedPackage(const NetworkPackage& np) const QString& key = np.get("publicKey"); m_publicKey = QCA::RSAPublicKey::fromPEM(key); if (m_publicKey.isNull()) { - kDebug(kdeconnect_kded()) << "ERROR decoding key"; + kDebug(debugArea()) << "ERROR decoding key"; if (m_pairStatus == Device::Requested) { m_pairStatus = Device::NotPaired; m_pairingTimeut.stop(); @@ -346,12 +346,12 @@ void Device::privateReceivedPackage(const NetworkPackage& np) if (m_pairStatus == Device::Requested) { //We started pairing - kDebug(kdeconnect_kded()) << "Pair answer"; + kDebug(debugArea()) << "Pair answer"; setAsPaired(); } else { - kDebug(kdeconnect_kded()) << "Pair request"; + kDebug(debugArea()) << "Pair request"; KNotification* notification = new KNotification("pingReceived"); //KNotification::Persistent notification->setPixmap(KIcon("dialog-information").pixmap(48, 48)); @@ -369,7 +369,7 @@ void Device::privateReceivedPackage(const NetworkPackage& np) } else { - kDebug(kdeconnect_kded()) << "Unpair request"; + kDebug(debugArea()) << "Unpair request"; PairStatus prevPairStatus = m_pairStatus; m_pairStatus = Device::NotPaired; @@ -392,7 +392,7 @@ void Device::privateReceivedPackage(const NetworkPackage& np) plugin->receivePackage(np); } } else { - kDebug(kdeconnect_kded()) << "device" << name() << "not paired, ignoring package" << np.type(); + kDebug(debugArea()) << "device" << name() << "not paired, ignoring package" << np.type(); unpair(); } @@ -410,7 +410,7 @@ bool Device::sendOwnPublicKey() void Device::rejectPairing() { - kDebug(kdeconnect_kded()) << "Rejected pairing"; + kDebug(debugArea()) << "Rejected pairing"; m_pairStatus = Device::NotPaired; @@ -426,7 +426,7 @@ void Device::acceptPairing() { if (m_pairStatus != Device::RequestedByPeer) return; - kDebug(kdeconnect_kded()) << "Accepted pairing"; + kDebug(debugArea()) << "Accepted pairing"; bool success = sendOwnPublicKey(); @@ -472,13 +472,6 @@ QStringList Device::availableLinks() const return sl; } -void Device::sendPing() -{ - NetworkPackage np(PACKAGE_TYPE_PING); - bool success = sendPackage(np); - kDebug(kdeconnect_kded()) << "sendPing:" << success; -} - Device::DeviceType Device::str2type(QString deviceType) { if (deviceType == "desktop") return Desktop; if (deviceType == "laptop") return Laptop; diff --git a/core/device.h b/core/device.h index ec757b8de..d15430078 100644 --- a/core/device.h +++ b/core/device.h @@ -105,7 +105,6 @@ public Q_SLOTS: Q_SCRIPTABLE void requestPair(); Q_SCRIPTABLE void unpair(); Q_SCRIPTABLE void reloadPlugins(); //From kconf - Q_SCRIPTABLE void sendPing(); void acceptPairing(); void rejectPairing(); diff --git a/core/filetransferjob.cpp b/core/filetransferjob.cpp index 14d175179..5df738c3d 100644 --- a/core/filetransferjob.cpp +++ b/core/filetransferjob.cpp @@ -41,18 +41,18 @@ FileTransferJob::FileTransferJob(const QSharedPointer& origin, int si mDeviceName = i18nc("Device name that will appear on the jobs", "KDE-Connect"); setCapabilities(Killable); - kDebug(kdeconnect_kded()) << "FileTransferJob Downloading payload to" << destination; + kDebug(debugArea()) << "FileTransferJob Downloading payload to" << destination; } void FileTransferJob::openFinished(KJob* job) { - kDebug(kdeconnect_kded()) << job->errorString(); + kDebug(debugArea()) << job->errorString(); } void FileTransferJob::start() { QMetaObject::invokeMethod(this, "doStart", Qt::QueuedConnection); - //kDebug(kdeconnect_kded()) << "FileTransferJob start"; + //kDebug(debugArea()) << "FileTransferJob start"; } void FileTransferJob::doStart() @@ -136,10 +136,10 @@ void FileTransferJob::open(KIO::Job* job) { Q_UNUSED(job); - //kDebug(kdeconnect_kded()) << "FileTransferJob open"; + //kDebug(debugArea()) << "FileTransferJob open"; if (!mOrigin) { - kDebug(kdeconnect_kded()) << "FileTransferJob: Origin is null"; + kDebug(debugArea()) << "FileTransferJob: Origin is null"; return; } @@ -161,7 +161,7 @@ void FileTransferJob::readyRead() mWritten += data.size(); setProcessedAmount(Bytes, mWritten); - //kDebug(kdeconnect_kded()) << "readyRead" << mSize << mWritten << bytes; + //kDebug(debugArea()) << "readyRead" << mSize << mWritten << bytes; if (mSize > -1) { //If a least 1 second has passed since last update @@ -192,11 +192,11 @@ void FileTransferJob::sourceFinished() //TODO: MD5 check the file if (mSize > -1 && mWritten != mSize) { - kDebug(kdeconnect_kded()) << "Received incomplete file (" << mWritten << " of " << mSize << " bytes)"; + kDebug(debugArea()) << "Received incomplete file (" << mWritten << " of " << mSize << " bytes)"; setError(1); setErrorText(i18n("Received incomplete file")); } else { - kDebug(kdeconnect_kded()) << "Finished transfer" << mDestinationJob->url(); + kDebug(debugArea()) << "Finished transfer" << mDestinationJob->url(); } mDestinationJob->close(); mDestinationJob->deleteLater(); diff --git a/core/kdebugnamespace.cpp b/core/kdebugnamespace.cpp deleted file mode 100644 index a2c8e8799..000000000 --- a/core/kdebugnamespace.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright 2013 Albert Vaca - * - * 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 . - */ - -#include "kdebugnamespace.h" - -int kdeconnect_kded() { - static int s_area = KDebug::registerArea("kdeconnect_kded", true); - return s_area; -} - - diff --git a/core/kdebugnamespace.h b/core/kdebugnamespace.h index 037852d13..4662097fb 100644 --- a/core/kdebugnamespace.h +++ b/core/kdebugnamespace.h @@ -24,7 +24,11 @@ #include #include -KDE_EXPORT int kdeconnect_kded(); +inline int debugArea() +{ + static int theArea = KDebug::registerArea("kdeconnect"); + return theArea; +}; #endif diff --git a/core/networkpackage.cpp b/core/networkpackage.cpp index 16ade4a9c..330850ce9 100644 --- a/core/networkpackage.cpp +++ b/core/networkpackage.cpp @@ -82,10 +82,10 @@ QByteArray NetworkPackage::serialize() const QJson::Serializer serializer; QByteArray json = serializer.serialize(variant,&ok); if (!ok) { - kDebug(kdeconnect_kded()) << "Serialization error:" << serializer.errorMessage(); + kDebug(debugArea()) << "Serialization error:" << serializer.errorMessage(); } else { if (!isEncrypted()) { - //kDebug(kdeconnect_kded()) << "Serialized package:" << json; + //kDebug(kDebugArea) << "Serialized package:" << json; } json.append('\n'); } @@ -100,7 +100,7 @@ bool NetworkPackage::unserialize(const QByteArray& a, NetworkPackage* np) bool ok; QVariantMap variant = parser.parse(a, &ok).toMap(); if (!ok) { - kDebug(kdeconnect_kded()) << "Unserialization error:" << a; + kDebug(debugArea()) << "Unserialization error:" << a; return false; } @@ -108,7 +108,7 @@ bool NetworkPackage::unserialize(const QByteArray& a, NetworkPackage* np) QJson::QObjectHelper::qvariant2qobject(variant, np); if (!np->isEncrypted()) { - //kDebug(kdeconnect_kded()) << "Unserialized: " << a; + //kDebug(kDebugArea) << "Unserialized: " << a; } np->mPayloadSize = variant["payloadSize"].toInt(); //Will return 0 if was not present, which is ok diff --git a/core/pluginloader.cpp b/core/pluginloader.cpp index 1c10c0705..b5f971432 100644 --- a/core/pluginloader.cpp +++ b/core/pluginloader.cpp @@ -50,7 +50,7 @@ KPluginInfo PluginLoader::getPluginInfo(const QString& name) const { KService::Ptr service = plugins[name]; if (!service) { - kDebug(kdeconnect_kded()) << "Plugin unknown" << name; + kDebug(debugArea()) << "Plugin unknown" << name; return KPluginInfo(); } @@ -63,13 +63,13 @@ PluginData PluginLoader::instantiatePluginForDevice(const QString& name, Device* KService::Ptr service = plugins[name]; if (!service) { - kDebug(kdeconnect_kded()) << "Plugin unknown" << name; + kDebug(debugArea()) << "Plugin unknown" << name; return ret; } KPluginFactory *factory = KPluginLoader(service->library()).factory(); if (!factory) { - kDebug(kdeconnect_kded()) << "KPluginFactory could not load the plugin:" << service->library(); + kDebug(debugArea()) << "KPluginFactory could not load the plugin:" << service->library(); return ret; } @@ -81,11 +81,11 @@ PluginData PluginLoader::instantiatePluginForDevice(const QString& name, Device* //FIXME any reason to use QObject in template param instead KdeConnectPlugin? ret.plugin = factory->create(device, QVariantList() << deviceVariant << ret.outgoingInterfaces); if (!ret.plugin) { - kDebug(kdeconnect_kded()) << "Error loading plugin"; + kDebug(debugArea()) << "Error loading plugin"; return ret; } - kDebug(kdeconnect_kded()) << "Loaded plugin:" << service->name(); + kDebug(debugArea()) << "Loaded plugin:" << service->name(); return ret; } diff --git a/fileitemactionplugin/kdeconnectsendfile.desktop b/fileitemactionplugin/kdeconnectsendfile.desktop index 79edbc246..9f20b51a7 100644 --- a/fileitemactionplugin/kdeconnectsendfile.desktop +++ b/fileitemactionplugin/kdeconnectsendfile.desktop @@ -2,6 +2,8 @@ Type=Service Name=Send file via KDE Connect service Name[ca]=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[es]=Enviar archivo usando el servicio KDE Connect Name[hu]=Fájl küldése a KDE csatlakozás szolgáltatáson keresztül Name[nl]=Bestand via de service KDE Connect versturen @@ -15,6 +17,8 @@ Name[x-test]=xxSend file via KDE Connect servicexx X-KDE-Library=kdeconnectfiletiemaction X-KDE-Submenu=Connect X-KDE-Submenu[ca]=Connecta +X-KDE-Submenu[cs]=Připojit +X-KDE-Submenu[da]=Forbind X-KDE-Submenu[es]=Conectar X-KDE-Submenu[hu]=Csatlakozás X-KDE-Submenu[nl]=Verbinden diff --git a/fileitemactionplugin/sendfileitemaction.cpp b/fileitemactionplugin/sendfileitemaction.cpp index 2c3ddf3f1..89c04f81c 100644 --- a/fileitemactionplugin/sendfileitemaction.cpp +++ b/fileitemactionplugin/sendfileitemaction.cpp @@ -59,6 +59,7 @@ QList SendFileItemAction::actions(const KFileItemListProperties& fileI action->setProperty("id", idx.data(DevicesModel::IdModelRole)); action->setProperty("urls", QVariant::fromValue(fileItemInfos.urlList())); action->setProperty("parentWidget", QVariant::fromValue(parentWidget)); + connect(action, SIGNAL(triggered(bool)), this, SLOT(sendFile())); actions += action; } } diff --git a/interfaces/CMakeLists.txt b/interfaces/CMakeLists.txt index bfe03a0c1..db20a4b0b 100644 --- a/interfaces/CMakeLists.txt +++ b/interfaces/CMakeLists.txt @@ -15,7 +15,6 @@ set(libkdeconnect_SRC devicesmodel.cpp notificationsmodel.cpp modeltest.cpp - kdebugnamespace.cpp ) set(libkdeconnect_public_HEADERS diff --git a/interfaces/devicesmodel.cpp b/interfaces/devicesmodel.cpp index 8242107cb..bef9db4f3 100644 --- a/interfaces/devicesmodel.cpp +++ b/interfaces/devicesmodel.cpp @@ -26,9 +26,10 @@ #include #include -#include "kdebugnamespace.h" +#include + +#include "dbusinterfaces.h" // #include "modeltest.h" -#include "interfaces/dbusinterfaces.h" DevicesModel::DevicesModel(QObject *parent) : QAbstractListModel(parent) @@ -85,19 +86,14 @@ void DevicesModel::deviceStatusChanged(const QString& id) refreshDeviceList(); } -DevicesModel::StatusFlags DevicesModel::displayFilter() const +int DevicesModel::displayFilter() const { return m_displayFilter; } void DevicesModel::setDisplayFilter(int flags) { - setDisplayFilter((StatusFlags)flags); -} - -void DevicesModel::setDisplayFilter(DevicesModel::StatusFlags flags) -{ - m_displayFilter = flags; + m_displayFilter = (StatusFlag)flags; refreshDeviceList(); } @@ -110,16 +106,19 @@ void DevicesModel::refreshDeviceList() } if (!m_dbusInterface->isValid()) { + kDebug(debugArea()) << "dbus interface not valid"; return; } - bool onlyPaired = (m_displayFilter & StatusPaired); bool onlyReachable = (m_displayFilter & StatusReachable); QDBusPendingReply pendingDeviceIds = m_dbusInterface->devices(onlyReachable, onlyPaired); pendingDeviceIds.waitForFinished(); - if (pendingDeviceIds.isError()) return; + if (pendingDeviceIds.isError()) { + kDebug(debugArea()) << pendingDeviceIds.error(); + return; + } const QStringList& deviceIds = pendingDeviceIds.value(); Q_FOREACH(const QString& id, deviceIds) { diff --git a/interfaces/devicesmodel.h b/interfaces/devicesmodel.h index 15bcb6734..75ee0c12b 100644 --- a/interfaces/devicesmodel.h +++ b/interfaces/devicesmodel.h @@ -46,18 +46,20 @@ public: IdModelRole = Qt::UserRole, IconNameRole }; - enum StatusFlags { + enum StatusFlag { StatusUnknown = 0x00, StatusPaired = 0x01, StatusReachable = 0x02 }; + Q_DECLARE_FLAGS(StatusFlags, StatusFlag) + Q_FLAGS(StatusFlags) + Q_ENUMS(StatusFlag) DevicesModel(QObject *parent = 0); virtual ~DevicesModel(); - void setDisplayFilter(StatusFlags flags); void setDisplayFilter(int flags); - StatusFlags displayFilter() const; + int displayFilter() const; virtual QVariant data(const QModelIndex& index, int role) const; virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; @@ -79,7 +81,8 @@ private: DaemonDbusInterface* m_dbusInterface; QList m_deviceList; StatusFlags m_displayFilter; - }; +//Q_DECLARE_OPERATORS_FOR_FLAGS(DevicesModel::StatusFlags) + #endif // DEVICESMODEL_H diff --git a/interfaces/kdebugnamespace.cpp b/interfaces/kdebugnamespace.cpp deleted file mode 100644 index 749e63253..000000000 --- a/interfaces/kdebugnamespace.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright 2013 Albert Vaca - * - * 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 . - */ - -#include "kdebugnamespace.h" - -int libkdeconnect() { - static int s_area = KDebug::registerArea("kdeconnect_libkdeconnect", true); - return s_area; -} - diff --git a/interfaces/kdebugnamespace.h b/interfaces/kdebugnamespace.h deleted file mode 100644 index 322c8adca..000000000 --- a/interfaces/kdebugnamespace.h +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright 2013 Albert Vaca - * - * 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 . - */ - -#ifndef KDEBUG_LIBKDECONNECT_H -#define KDEBUG_LIBKDECONNECT_H - -#include - -int libkdeconnect(); - -#endif - diff --git a/interfaces/notificationsmodel.cpp b/interfaces/notificationsmodel.cpp index ea84fd615..7ff163821 100644 --- a/interfaces/notificationsmodel.cpp +++ b/interfaces/notificationsmodel.cpp @@ -26,8 +26,10 @@ #include #include -#include "modeltest.h" -#include "kdebugnamespace.h" +#include + +//#include "modeltest.h" + NotificationsModel::NotificationsModel(QObject* parent) : QAbstractListModel(parent) @@ -110,12 +112,14 @@ void NotificationsModel::refreshNotificationList() } if (!m_dbusInterface->isValid()) { + kDebug(debugArea()) << "dbus interface not valid"; return; } QDBusPendingReply pendingNotificationIds = m_dbusInterface->activeNotifications(); pendingNotificationIds.waitForFinished(); if (pendingNotificationIds.isError()) { + kDebug(debugArea()) << pendingNotificationIds.error(); return; } const QStringList& notificationIds = pendingNotificationIds.value(); @@ -205,7 +209,6 @@ bool NotificationsModel::isAnyDimissable() const return false; } - void NotificationsModel::dismissAll() { Q_FOREACH (NotificationDbusInterface* notification, m_notificationList) { diff --git a/kcm/CMakeLists.txt b/kcm/CMakeLists.txt index 0151b0d78..7f6d069e4 100644 --- a/kcm/CMakeLists.txt +++ b/kcm/CMakeLists.txt @@ -7,7 +7,6 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} set(kcm_SRCS kcm.cpp devicessortproxymodel.cpp - kdebugnamespace.cpp ) qt5_wrap_ui(kcm_SRCS kcm.ui) diff --git a/kcm/devicessortproxymodel.cpp b/kcm/devicessortproxymodel.cpp index e17ec8b87..929371df4 100644 --- a/kcm/devicessortproxymodel.cpp +++ b/kcm/devicessortproxymodel.cpp @@ -20,10 +20,9 @@ #include "devicessortproxymodel.h" -#include "interfaces/dbusinterfaces.h" -#include "interfaces/devicesmodel.h" - -#include "kdebugnamespace.h" +#include +#include +#include DevicesSortProxyModel::DevicesSortProxyModel(DevicesModel* devicesModel) : QSortFilterProxyModel(devicesModel) diff --git a/kcm/kcm.cpp b/kcm/kcm.cpp index fd5fbeaa7..fe4539056 100644 --- a/kcm/kcm.cpp +++ b/kcm/kcm.cpp @@ -36,11 +36,12 @@ #include #include +#include + #include "ui_kcm.h" #include "interfaces/dbusinterfaces.h" #include "interfaces/devicesmodel.h" #include "devicessortproxymodel.h" -#include "kdebugnamespace.h" K_PLUGIN_FACTORY(KdeConnectKcmFactory, registerPlugin();) K_EXPORT_PLUGIN(KdeConnectKcmFactory("kdeconnect-kcm", "kdeconnect-kcm")) @@ -252,7 +253,8 @@ void KdeConnectKcm::save() void KdeConnectKcm::sendPing() { if (!currentDevice) return; - currentDevice->sendPing(); + QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kdeconnect", "/modules/kdeconnect/devices/"+currentDevice->id()+"/ping", "org.kde.kdeconnect.device.ping", "sendPing"); + QDBusConnection::sessionBus().call(msg); } #include "kcm.moc" diff --git a/kcm/kdebugnamespace.cpp b/kcm/kdebugnamespace.cpp deleted file mode 100644 index c38db0fbe..000000000 --- a/kcm/kdebugnamespace.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright 2013 Albert Vaca - * - * 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 . - */ - -#include "kdebugnamespace.h" - -int kdeconnect_kcm() { - static int s_area = KDebug::registerArea("kdeconnect_kcm", true); - return s_area; -} diff --git a/kcm/kdebugnamespace.h b/kcm/kdebugnamespace.h deleted file mode 100644 index 47a7d4374..000000000 --- a/kcm/kdebugnamespace.h +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright 2013 Albert Vaca - * - * 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 . - */ - -#ifndef KDEBUG_KDECONNECT_KCM_H -#define KDEBUG_KDECONNECT_KCM_H - -#include - -int kdeconnect_kcm(); - -#endif - diff --git a/kded/kdeconnectd.cpp b/kded/kdeconnectd.cpp index 46f9e5b81..2b4589d47 100644 --- a/kded/kdeconnectd.cpp +++ b/kded/kdeconnectd.cpp @@ -68,6 +68,8 @@ int main(int argc, char* argv[]) KLocalizedString(), "http://albertvaka.wordpress.com"); + aboutData.setOrganizationDomain("kde.org"); + KCmdLineArgs::init(argc, argv, &aboutData); KUniqueApplication app(true); // WARNING GUI required for QClipboard access diff --git a/kded/kded.cpp b/kded/kded.cpp index a08e91b46..a7c5c7540 100644 --- a/kded/kded.cpp +++ b/kded/kded.cpp @@ -27,8 +27,6 @@ #include "core/kdebugnamespace.h" -int theArea = KDebug::registerArea("kdeconnect-kded"); - K_PLUGIN_FACTORY(KdeConnectFactory, registerPlugin();) K_EXPORT_PLUGIN(KdeConnectFactory("kdeconnect", "kdeconnect-kded")) @@ -37,13 +35,13 @@ Kded::Kded(QObject *parent, const QList&) , m_daemon(0) { QMetaObject::invokeMethod(this, "start", Qt::QueuedConnection); - kDebug(theArea) << "kded_kdeconnect started"; + kDebug(debugArea()) << "kded_kdeconnect started"; } Kded::~Kded() { stop(); - kDebug(theArea) << "kded_kdeconnect stopped"; + kDebug(debugArea()) << "kded_kdeconnect stopped"; } void Kded::start() @@ -53,7 +51,7 @@ void Kded::start() } const QString daemon = KStandardDirs::locate("exe", "kdeconnectd"); - kDebug(theArea) << "Starting daemon " << daemon; + kDebug(debugArea()) << "Starting daemon " << daemon; m_daemon = new KProcess(this); connect(m_daemon, SIGNAL(started()), SLOT(daemonStarted())); connect(m_daemon, SIGNAL(error(QProcess::ProcessError)), this, SLOT(onError(QProcess::ProcessError))); @@ -85,24 +83,24 @@ void Kded::restart() void Kded::onError(QProcess::ProcessError errorCode) { - kError(theArea) << "Process error code=" << errorCode; + kError(debugArea()) << "Process error code=" << errorCode; } void Kded::daemonStarted() { - kDebug(theArea) << "Daemon successfuly started"; + kDebug(debugArea()) << "Daemon successfuly started"; Q_EMIT started(); } void Kded::onFinished(int exitCode, QProcess::ExitStatus status) { if (status == QProcess::CrashExit) { - kError(theArea) << "Process crashed with code=" << exitCode; - kError(theArea) << m_daemon->readAllStandardError(); - kWarning(theArea) << "Restarting in 5 sec..."; + kError(debugArea()) << "Process crashed with code=" << exitCode; + kError(debugArea()) << m_daemon->readAllStandardError(); + kWarning(debugArea()) << "Restarting in 5 sec..."; QTimer::singleShot(5000, this, SLOT(start())); } else { - kWarning(theArea) << "Process finished with code=" << exitCode; + kWarning(debugArea()) << "Process finished with code=" << exitCode; } Q_EMIT stopped(); @@ -116,7 +114,7 @@ void Kded::checkIfDaemonTerminated() } m_daemon->kill(); - kWarning(theArea) << "Daemon killed"; + kWarning(debugArea()) << "Daemon killed"; } #include "kded.moc" diff --git a/kio/CMakeLists.txt b/kio/CMakeLists.txt index 96a95a2bc..d025307af 100644 --- a/kio/CMakeLists.txt +++ b/kio/CMakeLists.txt @@ -2,7 +2,7 @@ include_directories(${CMAKE_SOURCE_DIR}) set(kio_kdeconnect_PART_SRCS kiokdeconnect.cpp - kdebugnamespace.cpp) +) add_library(kio_kdeconnect MODULE ${kio_kdeconnect_PART_SRCS}) diff --git a/kio/kdebugnamespace.cpp b/kio/kdebugnamespace.cpp deleted file mode 100644 index a8c13ae98..000000000 --- a/kio/kdebugnamespace.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright 2013 Albert Vaca - * - * 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 . - */ - -#include "kdebugnamespace.h" - -int kdeconnect_kio() { - static int s_area = KDebug::registerArea("kdeconnect_kio", true); - return s_area; -} diff --git a/kio/kiokdeconnect.cpp b/kio/kiokdeconnect.cpp index 64ba6ffc7..e2442a7cb 100644 --- a/kio/kiokdeconnect.cpp +++ b/kio/kiokdeconnect.cpp @@ -33,7 +33,7 @@ #include #include -#include "kdebugnamespace.h" +#include extern "C" int KDE_EXPORT kdemain(int argc, char **argv) { @@ -75,7 +75,7 @@ bool handleDBusError(QDBusReply& reply, KIO::SlaveBase* slave) { if (!reply.isValid()) { - kDebug(kdeconnect_kio()) << "Error in DBus request:" << reply.error(); + kDebug(debugArea()) << "Error in DBus request:" << reply.error(); slave->error(toKioError(reply.error().type()),reply.error().message()); return true; } @@ -130,7 +130,7 @@ void KioKdeconnect::listDevice() { infoMessage(i18n("Accessing device...")); - kDebug(kdeconnect_kio()) << "ListDevice" << m_currentDevice; + kDebug(debugArea()) << "ListDevice" << m_currentDevice; SftpDbusInterface interface(m_currentDevice); @@ -185,7 +185,7 @@ void KioKdeconnect::listDevice() void KioKdeconnect::listDir(const QUrl &url) { - kDebug(kdeconnect_kio()) << "Listing..." << url; + kDebug(debugArea()) << "Listing..." << url; /// Url is not used here becuase all we could care about the url is the host, and that's already /// handled in @p setHost @@ -207,7 +207,7 @@ void KioKdeconnect::listDir(const QUrl &url) void KioKdeconnect::stat(const QUrl &url) { - kDebug(kdeconnect_kio()) << "Stat: " << url; + kDebug(debugArea()) << "Stat: " << url; KIO::UDSEntry entry; entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); @@ -218,7 +218,7 @@ void KioKdeconnect::stat(const QUrl &url) void KioKdeconnect::get(const QUrl &url) { - kDebug(kdeconnect_kio()) << "Get: " << url; + kDebug(debugArea()) << "Get: " << url; mimeType(""); finished(); } @@ -228,7 +228,7 @@ void KioKdeconnect::setHost(const QString &hostName, quint16 port, const QString //This is called before everything else to set the file we want to show - kDebug(kdeconnect_kio()) << "Setting host: " << hostName; + kDebug(debugArea()) << "Setting host: " << hostName; // In this kio only the hostname is used Q_UNUSED(port) diff --git a/plasmoid/package/contents/ui/Battery.qml b/plasmoid/package/contents/ui/Battery.qml index fa78c28f7..4538437b9 100644 --- a/plasmoid/package/contents/ui/Battery.qml +++ b/plasmoid/package/contents/ui/Battery.qml @@ -53,8 +53,8 @@ QtObject { if (available) { battery = DeviceBatteryDbusInterfaceFactory.create(deviceId) - battery.stateChanged.connect(function(charging) {root.charging = charging}) - battery.chargeChanged.connect(function(charge) {root.charge = charge}) + battery.stateChanged.connect(function(c) {charging = c}) + battery.chargeChanged.connect(function(c) {charge = c}) startupCheck1.setPendingCall(battery.isCharging()) startupCheck2.setPendingCall(battery.charge()) diff --git a/plasmoid/package/contents/ui/FullRepresentation.qml b/plasmoid/package/contents/ui/FullRepresentation.qml index 497f6ec48..e865c0ddc 100644 --- a/plasmoid/package/contents/ui/FullRepresentation.qml +++ b/plasmoid/package/contents/ui/FullRepresentation.qml @@ -62,9 +62,10 @@ Item { ListView { id: devicesView anchors.fill: parent - model: KdeConnect.DevicesModel { + model: DevicesModel { id: connectDeviceModel - displayFilter: 0x11 + displayFilter: StatusFlags.StatusPaired | StatusFlags.StatusReachable + } delegate: DeviceDelegate { } onCountChanged: shouldPlasmoidBeShown() @@ -72,14 +73,4 @@ Item { } } -/* - ListView { - anchors.fill: parent - id: devicesView - model: KdeConnect.DevicesModel { - displayFilter: 0x11 - } - delegate: DeviceDelegate {} - } -*/ } diff --git a/plasmoid/package/metadata.desktop b/plasmoid/package/metadata.desktop index 893383912..473a2ef1f 100644 --- a/plasmoid/package/metadata.desktop +++ b/plasmoid/package/metadata.desktop @@ -1,27 +1,27 @@ [Desktop Entry] Name=KDE Connect -Name[bg]=KdeConnect -Name[bs]=Kde konekcija -Name[ca]=KdeConnect -Name[cs]=KdeConnect -Name[da]=KdeConnect -Name[de]=KdeConnect -Name[es]=KdeConnect -Name[fr]=KdeConnect -Name[hu]=KdeConnect -Name[it]=KdeConnect -Name[ko]=KdeConnect -Name[nl]=KdeConnect -Name[pl]=KdeConnect -Name[pt]=KDEConnect -Name[pt_BR]=KdeConnect -Name[ro]=KdeConnect -Name[ru]=KdeConnect -Name[sk]=KdeConnect +Name[bg]=KDE Connect +Name[bs]=Konekcija KDE +Name[ca]=KDE Connect +Name[cs]=KDE Connect +Name[da]=KDE Connect +Name[de]=KDE-Connect +Name[es]=KDE Connect +Name[fr]=KDE Connect +Name[hu]=KDE csatlakozás +Name[it]=KDE Connect +Name[ko]=KDE Connect +Name[nl]=KDE Connect +Name[pl]=KDE Connect +Name[pt]=KDE Connect +Name[pt_BR]=KDE Connect +Name[ro]=KDE Connect +Name[ru]=KDE Connect +Name[sk]=KDE Connect Name[sv]=KDE anslut -Name[tr]=KdeConnect -Name[uk]=KdeConnect -Name[x-test]=xxKdeConnectxx +Name[tr]=KDE Bağlan +Name[uk]=З’єднання KDE +Name[x-test]=xxKDE Connectxx Comment=Show notifications from your devices using KDE Connect Comment[bg]=Показване на уведомления от вашите устройства чрез KDE Connect Comment[bs]=Prikaži obavlještenja sa uređaja koji koriste KDE konekciju diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index bac4a9b2c..5e84ac542 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -8,6 +8,7 @@ add_subdirectory(mpriscontrol) add_subdirectory(clipboard) add_subdirectory(telephony) add_subdirectory(battery) +add_subdirectory(mousepad) add_subdirectory(share) add_subdirectory(notifications) add_subdirectory(sftp) diff --git a/plugins/battery/batterydbusinterface.cpp b/plugins/battery/batterydbusinterface.cpp index 5960da8d7..b3b22dd64 100644 --- a/plugins/battery/batterydbusinterface.cpp +++ b/plugins/battery/batterydbusinterface.cpp @@ -20,16 +20,17 @@ #include "batterydbusinterface.h" +#include #include -BatteryDbusInterface::BatteryDbusInterface(QObject *parent) - : QDBusAbstractAdaptor(parent) +BatteryDbusInterface::BatteryDbusInterface(const Device *device) + : QDBusAbstractAdaptor(const_cast(device)) { } BatteryDbusInterface::~BatteryDbusInterface() { - kDebug(kdeconnect_kded()) << "Destroying BatteryDbusInterface"; + kDebug(debugArea()) << "Destroying BatteryDbusInterface"; } void BatteryDbusInterface::updateValues(bool isCharging, int currentCharge) diff --git a/plugins/battery/batterydbusinterface.h b/plugins/battery/batterydbusinterface.h index 2fef9f637..b444ae219 100644 --- a/plugins/battery/batterydbusinterface.h +++ b/plugins/battery/batterydbusinterface.h @@ -23,6 +23,8 @@ #include +class Device; + class BatteryDbusInterface : public QDBusAbstractAdaptor { @@ -30,7 +32,7 @@ class BatteryDbusInterface Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.device.battery") public: - explicit BatteryDbusInterface(QObject *parent); + explicit BatteryDbusInterface(const Device *device); virtual ~BatteryDbusInterface(); Q_SCRIPTABLE int charge() const { return mCharge; } diff --git a/plugins/battery/batteryplugin.cpp b/plugins/battery/batteryplugin.cpp index c27f99723..35148cc91 100644 --- a/plugins/battery/batteryplugin.cpp +++ b/plugins/battery/batteryplugin.cpp @@ -32,7 +32,7 @@ K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_battery", "kdeconnect-plugi BatteryPlugin::BatteryPlugin(QObject *parent, const QVariantList &args) : KdeConnectPlugin(parent, args) - , batteryDbusInterface(new BatteryDbusInterface(parent)) + , batteryDbusInterface(new BatteryDbusInterface(device())) { //TODO: Add battery reporting, could be based on: diff --git a/plugins/clipboard/kdeconnect_clipboard.desktop b/plugins/clipboard/kdeconnect_clipboard.desktop index 8f976d41b..4f3330618 100644 --- a/plugins/clipboard/kdeconnect_clipboard.desktop +++ b/plugins/clipboard/kdeconnect_clipboard.desktop @@ -59,3 +59,5 @@ Comment[uk]=Спільне використання буфера обміну д Comment[x-test]=xxShare the clipboard between devicesxx X-KdeConnect-SupportedPackageType=kdeconnect.clipboard +X-KdeConnect-OutgoingPackageType=kdeconnect.clipboard + diff --git a/plugins/kdeconnect_plugin.desktop b/plugins/kdeconnect_plugin.desktop index 017917b87..ec21bb543 100644 --- a/plugins/kdeconnect_plugin.desktop +++ b/plugins/kdeconnect_plugin.desktop @@ -5,7 +5,7 @@ X-KDE-Derived=KPluginInfo Name=KDEConnect Plugin Name[bg]=Приставка на KDEConnect Name[bs]=Priključak za KDE konekciju -Name[ca]=Connector de KDEConnect +Name[ca]=Connector del KDEConnect Name[cs]=Modul KDEConnect Name[da]=KDEConnect-plugin Name[de]=KDEConnect-Modul diff --git a/plugins/mousepad/CMakeLists.txt b/plugins/mousepad/CMakeLists.txt new file mode 100644 index 000000000..848b76ed6 --- /dev/null +++ b/plugins/mousepad/CMakeLists.txt @@ -0,0 +1,15 @@ +set(kdeconnect_mousepad_SRCS + mousepadplugin.cpp +) + +find_package(XTest REQUIRED) +find_package(X11 REQUIRED) + +kde4_add_plugin(kdeconnect_mousepad ${kdeconnect_mousepad_SRCS}) + +include_directories(${XTEST_INCLUDE_DIRS} ${X11_INCLUDE_DIR}) + +target_link_libraries(kdeconnect_mousepad kdeconnectcore ${QT_QTGUI_LIBRARY} ${X11_LIBRARIES} ${XTEST_LIBRARIES}) + +install(TARGETS kdeconnect_mousepad DESTINATION ${PLUGIN_INSTALL_DIR} ) +install(FILES kdeconnect_mousepad.desktop DESTINATION ${SERVICES_INSTALL_DIR} ) diff --git a/plugins/mousepad/README b/plugins/mousepad/README new file mode 100644 index 000000000..14a0e569f --- /dev/null +++ b/plugins/mousepad/README @@ -0,0 +1,5 @@ + +When the user moves his on the phone, dx and dy (The difference between the last movement and the current movement of the X and Y Axis respectively) +is sent inside a NetworkPackage QCursor is used to move mouse cursor according to its relative position. + +When the user tap or double taps his phone, a mouse key button is simulated using XTestFakeButtonEvent diff --git a/plugins/mousepad/kdeconnect_mousepad.desktop b/plugins/mousepad/kdeconnect_mousepad.desktop new file mode 100644 index 000000000..d91647873 --- /dev/null +++ b/plugins/mousepad/kdeconnect_mousepad.desktop @@ -0,0 +1,18 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +ServiceTypes=KdeConnect/Plugin +X-KDE-Library=kdeconnect_mousepad +X-KDE-PluginInfo-Author=Ahmed I. Khalil +X-KDE-PluginInfo-Email=ahmedibrahimkhali@gmail.com +X-KDE-PluginInfo-Name=kdeconnect_mousepad +X-KDE-PluginInfo-Version=0.1 +X-KDE-PluginInfo-License=GPL +X-KDE-PluginInfo-EnabledByDefault=true +Icon=input-mouse +Name=Touchpad +Comment=Use your phone as a touchpad + +X-KdeConnect-SupportedPackageType=kdeconnect.mousepad +X-KdeConnect-OutgoingPackageType=kdeconnect.mousepad + diff --git a/plugins/mousepad/mousepadplugin.cpp b/plugins/mousepad/mousepadplugin.cpp new file mode 100644 index 000000000..64aae5cc9 --- /dev/null +++ b/plugins/mousepad/mousepadplugin.cpp @@ -0,0 +1,92 @@ +/** + * Copyright 2014 Ahmed I. Khalil + * + * 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 . + */ + +#include "mousepadplugin.h" + +#include +#include + +K_PLUGIN_FACTORY( KdeConnectPluginFactory, registerPlugin< MousepadPlugin >(); ) +K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_mousepad", "kdeconnect-plugins") ) + +// Source: http://bharathisubramanian.wordpress.com/2010/04/01/x11-fake-mouse-events-generation-using-xtest/ + +MousepadPlugin::MousepadPlugin(QObject* parent, const QVariantList& args) + : KdeConnectPlugin(parent, args), m_display(0) +{ + +} + +MousepadPlugin::~MousepadPlugin() +{ + if (m_display) { + XCloseDisplay(m_display); + m_display = 0; + } +} + +bool MousepadPlugin::receivePackage(const NetworkPackage& np) +{ + float dx = np.get("dx", 0); + float dy = np.get("dy", 0); + + bool isSingleClick = np.get("singleclick", false); + bool isDoubleClick = np.get("doubleclick", false); + bool isMiddleClick = np.get("middleclick", false); + bool isRightClick = np.get("rightclick", false); + bool isScroll = np.get("scroll", false); + + if (isSingleClick || isDoubleClick || isMiddleClick || isRightClick || isScroll) { + if(!m_display) { + m_display = XOpenDisplay(NULL); + } + + if(m_display) { + if (isSingleClick) { + XTestFakeButtonEvent(m_display, LeftMouseButton, true, CurrentTime); + XTestFakeButtonEvent(m_display, LeftMouseButton, false, CurrentTime); + } else if (isDoubleClick) { + XTestFakeButtonEvent(m_display, LeftMouseButton, true, CurrentTime); + XTestFakeButtonEvent(m_display, LeftMouseButton, false, CurrentTime); + XTestFakeButtonEvent(m_display, LeftMouseButton, true, CurrentTime); + XTestFakeButtonEvent(m_display, LeftMouseButton, false, CurrentTime); + } else if (isMiddleClick) { + XTestFakeButtonEvent(m_display, MiddleMouseButton, true, CurrentTime); + XTestFakeButtonEvent(m_display, MiddleMouseButton, false, CurrentTime); + } else if (isRightClick) { + XTestFakeButtonEvent(m_display, RightMouseButton, true, CurrentTime); + XTestFakeButtonEvent(m_display, RightMouseButton, false, CurrentTime); + } else if( isScroll ) { + if (dy < 0) { + XTestFakeButtonEvent(m_display, MouseWheelDown, true, CurrentTime); + XTestFakeButtonEvent(m_display, MouseWheelDown, false, CurrentTime); + } else if (dy > 0) { + XTestFakeButtonEvent(m_display, MouseWheelUp, true, CurrentTime); + XTestFakeButtonEvent(m_display, MouseWheelUp, false, CurrentTime); + } + } + XFlush(m_display); + } + } else { + QPoint point = QCursor::pos(); + QCursor::setPos(point.x() + (int)dx, point.y() + (int)dy); + } + return true; +} diff --git a/kio/kdebugnamespace.h b/plugins/mousepad/mousepadplugin.h similarity index 53% rename from kio/kdebugnamespace.h rename to plugins/mousepad/mousepadplugin.h index 9e536c0dd..64f5d8800 100644 --- a/kio/kdebugnamespace.h +++ b/plugins/mousepad/mousepadplugin.h @@ -1,5 +1,5 @@ /** - * Copyright 2013 Albert Vaca + * Copyright 2014 Ahmed I. Khalil * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -18,12 +18,39 @@ * along with this program. If not, see . */ -#ifndef KDEBUG_KDECONNECT_KCM_H -#define KDEBUG_KDECONNECT_KCM_H +#ifndef MOUSEPADPLUGIN_H +#define MOUSEPADPLUGIN_H -#include +#include +#include -int kdeconnect_kio(); +#include + +#define PACKAGE_TYPE_MOUSEPAD QLatin1String("kdeconnect.mousepad") + +class MousepadPlugin + : public KdeConnectPlugin +{ + Q_OBJECT + + enum MouseButtons { + LeftMouseButton = 1, + MiddleMouseButton = 2, + RightMouseButton = 3, + MouseWheelUp = 4, + MouseWheelDown = 5 + }; + +public: + explicit MousepadPlugin(QObject *parent, const QVariantList &args); + virtual ~MousepadPlugin(); + +public Q_SLOTS: + virtual bool receivePackage(const NetworkPackage& np); + virtual void connected() { } + +private: + Display *m_display; +}; #endif - diff --git a/plugins/mpriscontrol/mpriscontrolplugin.cpp b/plugins/mpriscontrol/mpriscontrolplugin.cpp index 8ad04bf1d..7bd225195 100644 --- a/plugins/mpriscontrol/mpriscontrolplugin.cpp +++ b/plugins/mpriscontrol/mpriscontrolplugin.cpp @@ -62,7 +62,7 @@ void MprisControlPlugin::serviceOwnerChanged(const QString &name, if (name.startsWith("org.mpris.MediaPlayer2")) { - kDebug(kdeconnect_kded()) << "Mpris (un)registered in bus" << name << oldOwner << newOwner; + kDebug(debugArea()) << "Mpris (un)registered in bus" << name << oldOwner << newOwner; if (oldOwner.isEmpty()) { addPlayer(name); @@ -78,7 +78,7 @@ void MprisControlPlugin::addPlayer(const QString& service) //FIXME: This call hangs and returns an empty string if KDED is still starting! const QString identity = mprisInterface.property("Identity").toString(); playerList[identity] = service; - kDebug(kdeconnect_kded()) << "Mpris addPlayer" << service << "->" << identity; + kDebug(debugArea()) << "Mpris addPlayer" << service << "->" << identity; sendPlayerList(); OrgFreedesktopDBusPropertiesInterface* freedesktopInterface = new OrgFreedesktopDBusPropertiesInterface(service, "/org/mpris/MediaPlayer2", QDBusConnection::sessionBus(), this); @@ -89,7 +89,7 @@ void MprisControlPlugin::addPlayer(const QString& service) void MprisControlPlugin::propertiesChanged(const QString& propertyInterface, const QVariantMap& properties) { Q_UNUSED(propertyInterface); - + NetworkPackage np(PACKAGE_TYPE_MPRIS); bool somethingToSend = false; if (properties.contains("Volume")) { @@ -132,7 +132,7 @@ void MprisControlPlugin::propertiesChanged(const QString& propertyInterface, con void MprisControlPlugin::removePlayer(const QString& ifaceName) { const QString identity = playerList.key(ifaceName); - kDebug(kdeconnect_kded()) << "Mpris removePlayer" << ifaceName << "->" << identity; + kDebug(debugArea()) << "Mpris removePlayer" << ifaceName << "->" << identity; playerList.remove(identity); sendPlayerList(); } @@ -157,18 +157,18 @@ bool MprisControlPlugin::receivePackage (const NetworkPackage& np) OrgMprisMediaPlayer2PlayerInterface mprisInterface(playerList[player], "/org/mpris/MediaPlayer2", QDBusConnection::sessionBus()); if (np.has("action")) { const QString& action = np.get("action"); - kDebug(kdeconnect_kded()) << "Calling action" << action << "in" << playerList[player]; + kDebug(debugArea()) << "Calling action" << action << "in" << playerList[player]; //TODO: Check for valid actions mprisInterface.call(action); } if (np.has("setVolume")) { double volume = np.get("setVolume")/100.f; - kDebug(kdeconnect_kded()) << "Setting volume" << volume << "to" << playerList[player]; + kDebug(debugArea()) << "Setting volume" << volume << "to" << playerList[player]; mprisInterface.setVolume(volume); } if (np.has("Seek")) { int offset = np.get("Seek"); - kDebug(kdeconnect_kded()) << "Seeking" << offset << "to" << playerList[player]; + kDebug(debugArea()) << "Seeking" << offset << "to" << playerList[player]; mprisInterface.Seek(offset); } @@ -185,20 +185,15 @@ bool MprisControlPlugin::receivePackage (const NetworkPackage& np) answer.set("nowPlaying",nowPlaying); - - bool playing = (mprisInterface.playbackStatus() == QLatin1String("Playing")); answer.set("isPlaying", playing); somethingToSend = true; - - } if (np.get("requestVolume")) { int volume = (int)(mprisInterface.volume() * 100); answer.set("volume",volume); somethingToSend = true; - } if (somethingToSend) { answer.set("player", player); @@ -206,7 +201,6 @@ bool MprisControlPlugin::receivePackage (const NetworkPackage& np) } return true; - } void MprisControlPlugin::sendPlayerList() diff --git a/plugins/notifications/notificationsdbusinterface.cpp b/plugins/notifications/notificationsdbusinterface.cpp index b0a3dce22..ba579259b 100644 --- a/plugins/notifications/notificationsdbusinterface.cpp +++ b/plugins/notifications/notificationsdbusinterface.cpp @@ -26,18 +26,22 @@ #include #include +#include +#include #include #include + #include "notificationsplugin.h" NotificationsDbusInterface::NotificationsDbusInterface(KdeConnectPlugin* plugin) - : QDBusAbstractAdaptor(plugin) + : QDBusAbstractAdaptor(const_cast(plugin->device())) , mDevice(plugin->device()) , mPlugin(plugin) , mLastId(0) , imagesDir(QDir::temp().absoluteFilePath("kdeconnect")) { imagesDir.mkpath(imagesDir.absolutePath()); + } NotificationsDbusInterface::~NotificationsDbusInterface() @@ -107,10 +111,10 @@ void NotificationsDbusInterface::addNotification(Notification* noti) void NotificationsDbusInterface::removeNotification(const QString& internalId) { - kDebug(kdeconnect_kded()) << "removeNotification" << internalId; + kDebug(debugArea()) << "removeNotification" << internalId; if (!mInternalIdToPublicId.contains(internalId)) { - kDebug(kdeconnect_kded()) << "Not found"; + kDebug(debugArea()) << "Not found"; return; } @@ -118,7 +122,7 @@ void NotificationsDbusInterface::removeNotification(const QString& internalId) Notification* noti = mNotifications.take(publicId); if (!noti) { - kDebug(kdeconnect_kded()) << "Not found"; + kDebug(debugArea()) << "Not found"; return; } diff --git a/plugins/notifications/notificationsdbusinterface.h b/plugins/notifications/notificationsdbusinterface.h index acd67368c..5c1244ef1 100644 --- a/plugins/notifications/notificationsdbusinterface.h +++ b/plugins/notifications/notificationsdbusinterface.h @@ -27,9 +27,11 @@ #include #include -#include #include "notification.h" +class KdeConnectPlugin; +class Device; + class NotificationsDbusInterface : public QDBusAbstractAdaptor { diff --git a/plugins/ping/kdeconnect_ping.desktop b/plugins/ping/kdeconnect_ping.desktop index 23bfe8ebf..aa6c7a545 100644 --- a/plugins/ping/kdeconnect_ping.desktop +++ b/plugins/ping/kdeconnect_ping.desktop @@ -59,4 +59,4 @@ Comment[uk]=Надсилання і отримання сигналів підт Comment[x-test]=xxSend and receive pingsxx X-KdeConnect-SupportedPackageType=kdeconnect.ping -# X-KdeConnect-OutgoingPackageType=kdeconnect.ping +X-KdeConnect-OutgoingPackageType=kdeconnect.ping diff --git a/plugins/ping/pingplugin.cpp b/plugins/ping/pingplugin.cpp index 04972e1de..7a2f496d8 100644 --- a/plugins/ping/pingplugin.cpp +++ b/plugins/ping/pingplugin.cpp @@ -26,6 +26,7 @@ #include #include +#include K_PLUGIN_FACTORY( KdeConnectPluginFactory, registerPlugin< PingPlugin >(); ) K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_ping", "kdeconnect-plugins") ) @@ -33,12 +34,12 @@ K_EXPORT_PLUGIN( KdeConnectPluginFactory("kdeconnect_ping", "kdeconnect-plugins" PingPlugin::PingPlugin(QObject* parent, const QVariantList& args) : KdeConnectPlugin(parent, args) { - //kDebug(kdeconnect_kded()) << "Ping plugin constructor for device" << device()->name(); + //kDebug(debugArea()) << "Ping plugin constructor for device" << device()->name(); } PingPlugin::~PingPlugin() { - //kDebug(kdeconnect_kded()) << "Ping plugin destructor for device" << device()->name(); + //kDebug(debugArea()) << "Ping plugin destructor for device" << device()->name(); } bool PingPlugin::receivePackage(const NetworkPackage& np) @@ -54,4 +55,22 @@ bool PingPlugin::receivePackage(const NetworkPackage& np) } +void PingPlugin::sendPing() +{ + NetworkPackage np(PACKAGE_TYPE_PING); + bool success = sendPackage(np); + kDebug(debugArea()) << "sendPing:" << success; +} + +void PingPlugin::connected() +{ + QDBusConnection::sessionBus().registerObject(dbusPath(), this, QDBusConnection::ExportAllContents); +} + +QString PingPlugin::dbusPath() const +{ + return "/modules/kdeconnect/devices/" + device()->id() + "/ping"; +} + #include "pingplugin.moc" + diff --git a/plugins/ping/pingplugin.h b/plugins/ping/pingplugin.h index f31e66045..31563074c 100644 --- a/plugins/ping/pingplugin.h +++ b/plugins/ping/pingplugin.h @@ -29,15 +29,20 @@ class KDE_EXPORT PingPlugin : public KdeConnectPlugin { Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.device.ping") public: explicit PingPlugin(QObject *parent, const QVariantList &args); virtual ~PingPlugin(); + Q_SCRIPTABLE void sendPing(); + public Q_SLOTS: virtual bool receivePackage(const NetworkPackage& np); - virtual void connected() { }; + virtual void connected(); +private: + QString dbusPath() const; }; #endif diff --git a/plugins/sftp/mounter.cpp b/plugins/sftp/mounter.cpp index de28e1200..5947c24f4 100644 --- a/plugins/sftp/mounter.cpp +++ b/plugins/sftp/mounter.cpp @@ -59,13 +59,13 @@ Mounter::Mounter(SftpPlugin* sftp, int idleTimeout) m_idleTimer.setSingleShot(false); QTimer::singleShot(0, this, SLOT(start())); - kDebug(kdeconnect_kded()) << "Created"; + kDebug(debugArea()) << "Created"; } Mounter::~Mounter() { unmount(); - kDebug(kdeconnect_kded()) << "Destroyed"; + kDebug(debugArea()) << "Destroyed"; } bool Mounter::wait() @@ -75,7 +75,7 @@ bool Mounter::wait() return true; } - kDebug(kdeconnect_kded()) << "Starting loop to wait for mount"; + kDebug(debugArea()) << "Starting loop to wait for mount"; MountLoop loop; connect(this, SIGNAL(mounted()), &loop, SLOT(successed())); @@ -87,7 +87,7 @@ void Mounter::onPakcageReceived(const NetworkPackage& np) { if (np.get("stop", false)) { - kDebug(kdeconnect_kded()) << "SFTP server stopped"; + kDebug(debugArea()) << "SFTP server stopped"; unmount(); return; } @@ -142,13 +142,13 @@ void Mounter::onPakcageReceived(const NetworkPackage& np) cleanMountPoint(); - kDebug(kdeconnect_kded()) << "Staring process: " << m_proc->program().join(" "); + kDebug(debugArea()) << "Staring process: " << m_proc->program().join(" "); m_proc->start(); } void Mounter::onStarted() { - kDebug(kdeconnect_kded()) << "Porcess started"; + kDebug(debugArea()) << "Porcess started"; m_started = true; Q_EMIT mounted(); @@ -167,7 +167,7 @@ void Mounter::onError(QProcess::ProcessError error) { if (error == QProcess::FailedToStart) { - kDebug(kdeconnect_kded()) << "Porcess failed to start"; + kDebug(debugArea()) << "Porcess failed to start"; m_started = false; Q_EMIT failed(i18n("Failed to start sshfs")); } @@ -177,7 +177,7 @@ void Mounter::onFinished(int exitCode, QProcess::ExitStatus exitStatus) { if (exitStatus == QProcess::NormalExit) { - kDebug(kdeconnect_kded()) << "Process finished (exit code: " << exitCode << ")"; + kDebug(debugArea()) << "Process finished (exit code: " << exitCode << ")"; if (m_proc->property(idleTimeout_c).toBool()) { @@ -190,7 +190,7 @@ void Mounter::onFinished(int exitCode, QProcess::ExitStatus exitStatus) } else { - kDebug(kdeconnect_kded()) << "Porcess failed (exit code: " << exitCode << ")"; + kDebug(debugArea()) << "Porcess failed (exit code: " << exitCode << ")"; Q_EMIT failed(i18n("Error when accessing to filesystem")); } @@ -201,7 +201,7 @@ void Mounter::onFinished(int exitCode, QProcess::ExitStatus exitStatus) void Mounter::onMountTimeout() { - kDebug(kdeconnect_kded()) << "Timeout: device not responding"; + kDebug(debugArea()) << "Timeout: device not responding"; Q_EMIT failed(i18n("Failed to mount filesystem: device not responding")); } @@ -211,7 +211,7 @@ void Mounter::onIdleTimeout() if (m_lastActivity.secsTo(QDateTime::currentDateTime()) >= m_idleTimer.interval() / 1000) { - kDebug(kdeconnect_kded()) << "Timeout: there is no activity on moutned filesystem"; + kDebug(debugArea()) << "Timeout: there is no activity on moutned filesystem"; m_proc->setProperty(idleTimeout_c, true); unmount(); } diff --git a/plugins/sftp/sftpplugin.cpp b/plugins/sftp/sftpplugin.cpp index 82dbacd06..9e0a4d39c 100644 --- a/plugins/sftp/sftpplugin.cpp +++ b/plugins/sftp/sftpplugin.cpp @@ -56,7 +56,7 @@ SftpPlugin::SftpPlugin(QObject *parent, const QVariantList &args) , m_d(new Pimpl) { addToDolphin(); - kDebug(kdeconnect_kded()) << "Created device:" << device()->name(); + kDebug(debugArea()) << "Created device:" << device()->name(); } SftpPlugin::~SftpPlugin() @@ -64,7 +64,7 @@ SftpPlugin::~SftpPlugin() QDBusConnection::sessionBus().unregisterObject(dbusPath(), QDBusConnection::UnregisterTree); removeFromDolphin(); unmount(); - kDebug(kdeconnect_kded()) << "Destroyed device:" << device()->name(); + kDebug(debugArea()) << "Destroyed device:" << device()->name(); } void SftpPlugin::addToDolphin() @@ -72,7 +72,7 @@ void SftpPlugin::addToDolphin() removeFromDolphin(); KUrl kioUrl("kdeconnect://"+device()->id()+"/"); m_d->placesModel.addPlace(device()->name(), kioUrl, "kdeconnect"); - kDebug(kdeconnect_kded()) << "add to dolphin"; + kDebug(debugArea()) << "add to dolphin"; } void SftpPlugin::removeFromDolphin() @@ -88,12 +88,12 @@ void SftpPlugin::removeFromDolphin() void SftpPlugin::connected() { bool state = QDBusConnection::sessionBus().registerObject(dbusPath(), this, QDBusConnection::ExportScriptableContents); - kDebug(kdeconnect_kded()) << "Exposing DBUS interface: " << state; + kDebug(debugArea()) << "Exposing DBUS interface: " << state; } void SftpPlugin::mount() { - kDebug(kdeconnect_kded()) << "Mount device:" << device()->name(); + kDebug(debugArea()) << "Mount device:" << device()->name(); if (m_d->mounter) { return; } @@ -160,7 +160,7 @@ QString SftpPlugin::mountPoint() void SftpPlugin::onMounted() { - kDebug(kdeconnect_kded()) << device()->name() << QString("Remote filesystem mounted at %1").arg(mountPoint()); + kDebug(debugArea()) << device()->name() << QString("Remote filesystem mounted at %1").arg(mountPoint()); Q_EMIT mounted(); } @@ -168,9 +168,9 @@ void SftpPlugin::onMounted() void SftpPlugin::onUnmounted(bool idleTimeout) { if (idleTimeout) { - kDebug(kdeconnect_kded()) << device()->name() << "Remote filesystem unmounted by idle timeout"; + kDebug(debugArea()) << device()->name() << "Remote filesystem unmounted by idle timeout"; } else { - kDebug(kdeconnect_kded()) << device()->name() << "Remote filesystem unmounted"; + kDebug(debugArea()) << device()->name() << "Remote filesystem unmounted"; } unmount(); diff --git a/plugins/share/shareplugin.cpp b/plugins/share/shareplugin.cpp index a95cd0ac1..ae4888aef 100644 --- a/plugins/share/shareplugin.cpp +++ b/plugins/share/shareplugin.cpp @@ -55,7 +55,7 @@ KUrl SharePlugin::destinationDir() const QString url = dir.toLocalFile(); if (url.contains("%1")) url = url.arg(device()->name()); - kDebug(kdeconnect_kded()) << url; + kDebug(debugArea()) << url; QDir().mkpath(url); return url; @@ -67,7 +67,7 @@ bool SharePlugin::receivePackage(const NetworkPackage& np) //TODO: Use this code to write a test if (np.type() == PACKAGE_TYPE_PING) { - kDebug(kdeconnect_kded()) << "sending file" << (QDesktopServices::storageLocation(QDesktopServices::HomeLocation) + "/.bashrc"); + kDebug(debugArea()) << "sending file" << (QDesktopServices::storageLocation(QDesktopServices::HomeLocation) + "/.bashrc"); NetworkPackage out(PACKAGE_TYPE_SHARE); out.set("filename", mDestinationDir + "itworks.txt"); @@ -83,10 +83,10 @@ bool SharePlugin::receivePackage(const NetworkPackage& np) } */ - kDebug(kdeconnect_kded()) << "File transfer"; + kDebug(debugArea()) << "File transfer"; if (np.hasPayload()) { - //kDebug(kdeconnect_kded()) << "receiving file"; + //kDebug(debugArea()) << "receiving file"; QString filename = np.get("filename", QString::number(QDateTime::currentMSecsSinceEpoch())); KUrl destination = destinationDir(); destination.addPath(filename); @@ -115,7 +115,7 @@ bool SharePlugin::receivePackage(const NetworkPackage& np) QUrl url(np.get("url")); QDesktopServices::openUrl(url); } else { - kDebug(kdeconnect_kded()) << "Error: Nothing attached!"; + kDebug(debugArea()) << "Error: Nothing attached!"; } return true; @@ -124,7 +124,7 @@ bool SharePlugin::receivePackage(const NetworkPackage& np) void SharePlugin::finished(KJob* job) { - kDebug(kdeconnect_kded()) << "File transfer finished"; + kDebug(debugArea()) << "File transfer finished"; bool error = (job->error() != 0); diff --git a/plugins/telephony/telephonyplugin.cpp b/plugins/telephony/telephonyplugin.cpp index 2399d877b..c2bda721b 100644 --- a/plugins/telephony/telephonyplugin.cpp +++ b/plugins/telephony/telephonyplugin.cpp @@ -66,7 +66,7 @@ KNotification* TelephonyPlugin::createNotification(const NetworkPackage& np) content = i18n("Unknown telephony event: %2", event); } - kDebug(kdeconnect_kded()) << "Creating notification with type:" << type; + kDebug(debugArea()) << "Creating notification with type:" << type; KNotification* notification = new KNotification(type, KNotification::CloseOnTimeout, this); //, KNotification::Persistent notification->setPixmap(KIcon(icon).pixmap(48, 48));