diff --git a/bin/dbus/configurationmanager-introspec.xml b/bin/dbus/configurationmanager-introspec.xml index 7b4f0a596c163783c8fa6450d9e0e86712149d42..bb0003f2c1d532d85ceabaa1dc2d71ae96695d62 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 b15479c929bada700bdea9cf1e59bf89ee7a85c5..22509844471df6c0df31c5566b43798e5755eff8 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 9df30eb2f8a8cf52f1e36daff26addd640dd8c66..e57cf050ffc83ff1f5e8ae049376d1dab7889418 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 8e4846731e74527bd8086ff985bbc768f161969b..ac552d5b5b6774c49e31a9ffbe322356209f6c25 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 537b5449f299224a437a9852ef0ffed3cc4666ab..26075f6cce4e2a966ac81bcc676876702aa51119 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