From 285b8f1490db9f2fc6fad0b25209f472c9ec0adb Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 4 Oct 2022 02:42:56 +0300 Subject: [PATCH] kutils: create org.kde.kded interface on demand in KPasswdStore Signed-off-by: Ivailo Monev --- kutils/kpasswdstore/kpasswdstore.cpp | 42 +++++++++++++++++++++------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/kutils/kpasswdstore/kpasswdstore.cpp b/kutils/kpasswdstore/kpasswdstore.cpp index f523f489..9f990961 100644 --- a/kutils/kpasswdstore/kpasswdstore.cpp +++ b/kutils/kpasswdstore/kpasswdstore.cpp @@ -44,23 +44,41 @@ static QByteArray getCookie() class KPasswdStorePrivate { public: - KPasswdStorePrivate(); + KPasswdStorePrivate(KPasswdStore *q); - QDBusInterface interface; + void ensureInterface(); + + KPasswdStore *q_ptr; + QDBusInterface *interface; QByteArray cookie; QString storeid; }; -KPasswdStorePrivate::KPasswdStorePrivate() - : interface("org.kde.kded", "/modules/kpasswdstore", "org.kde.kpasswdstore"), +KPasswdStorePrivate::KPasswdStorePrivate(KPasswdStore *q) + : q_ptr(q), + interface(nullptr), cookie(getCookie()), storeid(QApplication::applicationName()) { } +void KPasswdStorePrivate::ensureInterface() +{ + if (!interface) { + interface = new QDBusInterface( + QString::fromLatin1("org.kde.kded"), + QString::fromLatin1("/modules/kpasswdstore"), + QString::fromLatin1("org.kde.kpasswdstore"), + QDBusConnection::sessionBus(), + q_ptr + ); + } +} + + KPasswdStore::KPasswdStore(QObject *parent) : QObject(parent), - d(new KPasswdStorePrivate()) + d(new KPasswdStorePrivate(this)) { } @@ -76,18 +94,20 @@ void KPasswdStore::setStoreID(const QString &id) bool KPasswdStore::openStore(const qlonglong windowid) { - QDBusReply result = d->interface.call("openStore", d->cookie, d->storeid, windowid); + d->ensureInterface(); + QDBusReply result = d->interface->call("openStore", d->cookie, d->storeid, windowid); return result.value(); } void KPasswdStore::setCacheOnly(const bool cacheonly) { - d->interface.call("setCacheOnly", d->cookie, d->storeid, cacheonly); + d->interface->call("setCacheOnly", d->cookie, d->storeid, cacheonly); } bool KPasswdStore::cacheOnly() const { - QDBusReply result = d->interface.call("cacheOnly", d->cookie, d->storeid); + d->ensureInterface(); + QDBusReply result = d->interface->call("cacheOnly", d->cookie, d->storeid); return result.value(); } @@ -98,13 +118,15 @@ bool KPasswdStore::hasPasswd(const QByteArray &key, const qlonglong windowid) QString KPasswdStore::getPasswd(const QByteArray &key, const qlonglong windowid) { - QDBusReply result = d->interface.call("getPasswd", d->cookie, d->storeid, key, windowid); + d->ensureInterface(); + QDBusReply result = d->interface->call("getPasswd", d->cookie, d->storeid, key, windowid); return result.value(); } bool KPasswdStore::storePasswd(const QByteArray &key, const QString &passwd, const qlonglong windowid) { - QDBusReply result = d->interface.call("storePasswd", d->cookie, d->storeid, key, passwd, windowid); + d->ensureInterface(); + QDBusReply result = d->interface->call("storePasswd", d->cookie, d->storeid, key, passwd, windowid); return result.value(); }