Add dbus signal emission on switches configuration changing 15/206715/5
authorOskar Chodowicz <o.chodowicz@samsung.com>
Thu, 23 May 2019 13:03:21 +0000 (15:03 +0200)
committerOskar Chodowicz <o.chodowicz@samsung.com>
Wed, 26 Jun 2019 14:46:17 +0000 (16:46 +0200)
Change-Id: I111e84f7ca68c318c6140f7ddcf6e22c7c73ccd1

src/DBus.hpp
src/DBusInterface.cpp

index 942eb25c77d018356f1be2d4e6ff29fd69549e70..fe0c25a23959a220fab66d061db3da80207f44ed 100644 (file)
@@ -2263,8 +2263,9 @@ namespace DBus
                        friend class ::DBus::DBusInterfaceDescription;
                        detail::CallId id;
 
-                       SignalId() = default;
                        SignalId(detail::CallId id) : id(id) { }
+                       public:
+                       SignalId() = default;
                };
                /// \endcond
 
index d335f3f51e99bb00889ae273167fd9fc42326b86..a449e8fec22959dfd0884c5db8ed66d8a6c12896 100644 (file)
@@ -160,6 +160,7 @@ class DBusInterfaceImpl: public DBusInterface
                auto configurationItem = std::make_shared<SwitchConfigurationItem>(switchId, activityType);
                configurationItem->setUserName(userName);
                configuration->add(configurationItem);
+               scheduleSwitchesConfigurationChangedSignalEmission();
                return DBus::Success{};
        }
 
@@ -179,6 +180,7 @@ class DBusInterfaceImpl: public DBusInterface
                        configurationItem->setActivityType(activityType);
                        configurationItem->setUserName(userName);
                        configuration->update(configurationItem);
+                       scheduleSwitchesConfigurationChangedSignalEmission();
                        return DBus::Success{};
                } else {
                        ERROR("configurationItem switchId: %s not found", switchId.c_str());
@@ -201,6 +203,7 @@ class DBusInterfaceImpl: public DBusInterface
                auto configurationItem = configuration->findBySwitchId(switchId);
                if (configurationItem) {
                        configuration->remove(configurationItem);
+                       scheduleSwitchesConfigurationChangedSignalEmission();
                        return DBus::Success{};
                } else {
                        ERROR("configurationItem switchId: %s not found", switchId.c_str());
@@ -286,6 +289,12 @@ class DBusInterfaceImpl: public DBusInterface
                releaseSwitchObserver();
                return DBus::Success{};
        }
+
+       template <typename ... ARGS> auto addSignal(DBus::DBusInterfaceDescription &desc, const std::string &funcName)
+       {
+               return desc.addSignal<ARGS...>(funcName);
+       }
+
 public:
        DBusInterfaceImpl() : dbusServer(DBus::ConnectionType::SESSION)
        {
@@ -300,14 +309,25 @@ public:
                add(desc, "addSwitchConfigurationItem", &DBusInterfaceImpl::addSwitchConfigurationItem);
                add(desc, "updateSwitchConfigurationItem", &DBusInterfaceImpl::updateSwitchConfigurationItem);
                add(desc, "removeSwitchConfigurationItem", &DBusInterfaceImpl::removeSwitchConfigurationItem);
+               onSwitchesChangeSignalId = addSignal<>(desc, "switchesConfigurationChanged");
+
                dbusServer.addInterface(PATH, desc);
 
                eldbus_name_request(dbusServer.getConnection()->get(), BUS, ELDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, onNameRequest, nullptr);
        }
 private:
        DBus::DBusServer dbusServer;
+       DBus::DBusInterfaceDescription::SignalId onSwitchesChangeSignalId;
+       ecore::AsyncInvoker configurationChangedSignalInvoker;
        std::shared_ptr<DBusSwitchObserver> switchObserver;
 
+       void scheduleSwitchesConfigurationChangedSignalEmission()
+       {
+               configurationChangedSignalInvoker.addToMainLoopQueue([this]() {
+                       this->dbusServer.emit<>(this->onSwitchesChangeSignalId);
+               });
+       }
+
        template <typename ... RET, typename ... ARGS> void add(DBus::DBusInterfaceDescription &desc, const std::string &funcName,
                        DBus::ValueOrError<RET...>(DBusInterfaceImpl::*funcPtr)(ARGS...))
        {
@@ -328,6 +348,7 @@ private:
                });
        }
 
+
        void releaseSwitchObserver()
        {
                if (switchObserver) {