[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;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.