kdeconnect-kde/plugins/clipboard/clipboardplugin.cpp
Albert Vaca Cintora 144a60b58a Allow disabling clipboard auto-share and add option to share manually
Continues the work started in !396 by rebasing it onto latest master and
making the "send clipboard" button from the plasmoid invisible when
automatic syncing is enabled.
    
I didn't find a way to do the same in kdeconnect-indicator and
kdeconnect-app (why do we have 3 UIs???), so in those we always show the
option for now.
2023-06-07 19:48:25 +00:00

101 lines
3.1 KiB
C++

/**
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "clipboardplugin.h"
#include "clipboardlistener.h"
#include "plugin_clipboard_debug.h"
#include <KPluginFactory>
K_PLUGIN_CLASS_WITH_JSON(ClipboardPlugin, "kdeconnect_clipboard.json")
ClipboardPlugin::ClipboardPlugin(QObject *parent, const QVariantList &args)
: KdeConnectPlugin(parent, args)
{
connect(ClipboardListener::instance(), &ClipboardListener::clipboardChanged, this, &ClipboardPlugin::clipboardChanged);
connect(config(), &KdeConnectPluginConfig::configChanged, this, &ClipboardPlugin::configChanged);
configChanged();
}
void ClipboardPlugin::connected()
{
sendConnectPacket();
}
QString ClipboardPlugin::dbusPath() const
{
return QStringLiteral("/modules/kdeconnect/devices/") + device()->id() + QStringLiteral("/clipboard");
}
void ClipboardPlugin::clipboardChanged(const QString &content, ClipboardListener::ClipboardContentType contentType)
{
if (!autoShare) {
return;
}
if (contentType == ClipboardListener::ClipboardContentTypePassword) {
if (!sharePasswords) {
return;
}
}
sendClipboard(content);
}
void ClipboardPlugin::configChanged()
{
autoShare = config()->getBool(QStringLiteral("autoShare"), config()->getBool(QStringLiteral("sendUnknown"), true));
sharePasswords = config()->getBool(QStringLiteral("sendPassword"), true);
Q_EMIT autoShareDisabledChanged(isAutoShareDisabled());
}
bool ClipboardPlugin::isAutoShareDisabled()
{
// Return true also if autoShare is enabled but disabled for passwords
return !autoShare || !sharePasswords;
}
void ClipboardPlugin::sendClipboard()
{
QString content = ClipboardListener::instance()->currentContent();
sendClipboard(content);
}
void ClipboardPlugin::sendClipboard(const QString &content)
{
NetworkPacket np(PACKET_TYPE_CLIPBOARD, {{QStringLiteral("content"), content}});
sendPacket(np);
}
void ClipboardPlugin::sendConnectPacket()
{
NetworkPacket np(PACKET_TYPE_CLIPBOARD_CONNECT,
{{QStringLiteral("content"), ClipboardListener::instance()->currentContent()},
{QStringLiteral("timestamp"), ClipboardListener::instance()->updateTimestamp()}});
sendPacket(np);
}
bool ClipboardPlugin::receivePacket(const NetworkPacket &np)
{
QString content = np.get<QString>(QStringLiteral("content"));
if (np.type() == PACKET_TYPE_CLIPBOARD) {
ClipboardListener::instance()->setText(content);
return true;
} else if (np.type() == PACKET_TYPE_CLIPBOARD_CONNECT) {
qint64 packetTime = np.get<qint64>(QStringLiteral("timestamp"));
// If the packetTime is 0, it means the timestamp is unknown (so do nothing).
if (packetTime == 0 || packetTime < ClipboardListener::instance()->updateTimestamp()) {
return false;
}
ClipboardListener::instance()->setText(content);
return true;
}
return false;
}
#include "clipboardplugin.moc"