From aa782278018f5a61bea98fecc80f58b029b3d211 Mon Sep 17 00:00:00 2001
From: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Date: Mon, 13 Jul 2015 11:41:47 -0400
Subject: [PATCH] daemon: emit signal when media parameters changed

User is able to change media parameters / account.
When a new parameter is set in daemon, a signal would be helpful to notify UI
to refresh its media information.
This patchset adds signal mediaParametersChanged broadcast if a new media
parameter is succesfully set in daemon. AccoundID is also specified in
parameters.

Refs #77483
Change-Id: I2efc0b260da5774fa56cda74f64c8dec209552df
---
 bin/dbus/configurationmanager-introspec.xml | 13 +++++++++++++
 bin/dbus/dbusclient.cpp                     |  1 +
 src/client/configurationmanager.cpp         |  2 ++
 src/client/ring_signal.cpp                  |  1 +
 src/dring/configurationmanager_interface.h  |  4 ++++
 5 files changed, 21 insertions(+)

diff --git a/bin/dbus/configurationmanager-introspec.xml b/bin/dbus/configurationmanager-introspec.xml
index 7b4f0a596c..bb0003f2c1 100644
--- a/bin/dbus/configurationmanager-introspec.xml
+++ b/bin/dbus/configurationmanager-introspec.xml
@@ -982,5 +982,18 @@
            <arg type="a{ss}" name="shortcutsMap" direction="in">
            </arg>
        </method>
+
+       <signal name="mediaParametersChanged" tp:name-for-bindings="mediaParametersChanged">
+           <tp:added version="2.3.0"/>
+           <tp:docstring>
+               Notify clients that a media parameter changed.
+           </tp:docstring>
+           <arg type="s" name="accountID">
+               <tp:docstring>
+                   An account id.
+               </tp:docstring>
+           </arg>
+       </signal>
+
    </interface>
 </node>
diff --git a/bin/dbus/dbusclient.cpp b/bin/dbus/dbusclient.cpp
index b15479c929..2250984447 100644
--- a/bin/dbus/dbusclient.cpp
+++ b/bin/dbus/dbusclient.cpp
@@ -192,6 +192,7 @@ DBusClient::initLibrary(int flags)
         exportable_callback<ConfigurationSignal::CertificatePathPinned>(bind(&DBusConfigurationManager::certificatePathPinned, confM, _1, _2 )),
         exportable_callback<ConfigurationSignal::CertificateExpired>(bind(&DBusConfigurationManager::certificateExpired, confM, _1 )),
         exportable_callback<ConfigurationSignal::CertificateStateChanged>(bind(&DBusConfigurationManager::certificateStateChanged, confM, _1, _2, _3 )),
+        exportable_callback<ConfigurationSignal::MediaParametersChanged>(bind(&DBusConfigurationManager::mediaParametersChanged, confM, _1 )),
     };
 
     // Presence event handlers
diff --git a/src/client/configurationmanager.cpp b/src/client/configurationmanager.cpp
index 9df30eb2f8..e57cf050ff 100644
--- a/src/client/configurationmanager.cpp
+++ b/src/client/configurationmanager.cpp
@@ -401,6 +401,7 @@ setCodecDetails(const std::string& accountID,
     if (codec->systemCodecInfo.mediaType & ring::MEDIA_AUDIO) {
         if (auto foundCodec = std::static_pointer_cast<ring::AccountAudioCodecInfo>(codec)) {
             foundCodec->setCodecSpecifications(details);
+            ring::emitSignal<ConfigurationSignal::MediaParametersChanged>(accountID);
             return true;
         }
     }
@@ -416,6 +417,7 @@ setCodecDetails(const std::string& accountID,
                 auto call = ring::Manager::instance().getCurrentCall();
                 call->restartMediaSender();
             }
+            ring::emitSignal<ConfigurationSignal::MediaParametersChanged>(accountID);
             return true;
         }
     }
diff --git a/src/client/ring_signal.cpp b/src/client/ring_signal.cpp
index 8e4846731e..ac552d5b5b 100644
--- a/src/client/ring_signal.cpp
+++ b/src/client/ring_signal.cpp
@@ -76,6 +76,7 @@ getSignalHandlers()
         exported_callback<DRing::ConfigurationSignal::CertificateStateChanged>(),
         exported_callback<DRing::ConfigurationSignal::IncomingAccountMessage>(),
         exported_callback<DRing::ConfigurationSignal::IncomingTrustRequest>(),
+        exported_callback<DRing::ConfigurationSignal::MediaParametersChanged>(),
         exported_callback<DRing::ConfigurationSignal::Error>(),
 #ifdef __ANDROID__
         exported_callback<DRing::ConfigurationSignal::GetHardwareAudioFormat>(),
diff --git a/src/dring/configurationmanager_interface.h b/src/dring/configurationmanager_interface.h
index 537b5449f2..26075f6cce 100644
--- a/src/dring/configurationmanager_interface.h
+++ b/src/dring/configurationmanager_interface.h
@@ -210,6 +210,10 @@ struct ConfigurationSignal {
                 constexpr static const char* name = "CertificateStateChanged";
                 using cb_type = void(const std::string& /*account_id*/, const std::string& /*certId*/, const std::string& /*state*/);
         };
+        struct MediaParametersChanged {
+                constexpr static const char* name = "MediaParametersChanged";
+                using cb_type = void(const std::string& /*accountId*/);
+        };
 #ifdef __ANDROID__
         /**
          * These are special getters for Android so the daemon can retreive
-- 
GitLab