[system/konlineaccounts] /: feat: inform any registered apps that care about a new account
Bart Ribbers <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 5ea0f04d779e7df2f90fbb1f4e1305b10a514e71 by Bart Ribbers.
Committed on 13/07/2026 at 08:03.
Pushed by nicolasfella into branch 'master'.
feat: inform any registered apps that care about a new account
M +12 -0 daemon/accountsmanager.cpp
M +12 -0 lib/accessmanager.cpp
M +1 -0 lib/accessmanager.h
https://invent.kde.org/system/konlineaccounts/-/commit/5ea0f04d779e7df2f90fbb1f4e1305b10a514e71
diff --git a/daemon/accountsmanager.cpp b/daemon/accountsmanager.cpp
index b8035fa..49fba95 100644
--- a/daemon/accountsmanager.cpp
+++ b/daemon/accountsmanager.cpp
@@ -78,6 +78,18 @@ void AccountsManager::slotAccountCreationFinished(const QString &id, const QStri
account.get(),
QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors);
+ const QStringList apps = group.readEntry("allowedApplications", QStringList());
+ for (const QString &appId : apps) {
+ const auto service = AccessManager::instance().serviceNameForAppId(appId);
+ if (!service) {
+ continue;
+ }
+
+ auto message =
+ QDBusMessage::createTargetedSignal(service.value(), u"/org/kde/KOnlineAccounts"_s, u"org.kde.KOnlineAccounts.Manager"_s, u"accountAccessGranted"_s);
+ QDBusConnection::sessionBus().send(message);
+ }
+
if (!m_requester.isEmpty()) {
const QString appId = m_requester;
m_requester = QString();
diff --git a/lib/accessmanager.cpp b/lib/accessmanager.cpp
index 86face4..0fc46a6 100644
--- a/lib/accessmanager.cpp
+++ b/lib/accessmanager.cpp
@@ -7,6 +7,7 @@
#include "accessmanager.h"
#include "debug.h"
+#include <optional>
AccessManager &AccessManager::instance()
{
@@ -27,3 +28,14 @@ std::optional<QString> AccessManager::appIdForService(const QString &serviceName
}
return m_appIdentities[serviceName];
}
+
+std::optional<QString> AccessManager::serviceNameForAppId(const QString &serviceName)
+{
+ for (auto [key, value] : std::as_const(m_appIdentities).asKeyValueRange()) {
+ if (value == serviceName) {
+ return key;
+ }
+ }
+
+ return std::nullopt;
+}
diff --git a/lib/accessmanager.h b/lib/accessmanager.h
index c3337c3..c2e4e4a 100644
--- a/lib/accessmanager.h
+++ b/lib/accessmanager.h
@@ -18,6 +18,7 @@ public:
void registerApp(const QString &serviceName, const QString &appId);
std::optional<QString> appIdForService(const QString &serviceName);
+ std::optional<QString> serviceNameForAppId(const QString &appId);
private:
AccessManager() = default;