mirror of
https://gitlab.freedesktop.org/pipewire/wireplumber.git
synced 2026-05-05 04:18:07 +02:00
settings: use WpSpaJson instead of raw string in WpSettingsChangedCallback
Avoids users to construct a WpSpaJson every time the callback is triggered.
This commit is contained in:
parent
a512ddaaf3
commit
d28d7d4278
5 changed files with 76 additions and 79 deletions
|
|
@ -655,8 +655,13 @@ on_metadata_changed (WpMetadata *m, guint32 subject,
|
|||
const gchar *setting, const gchar *type, const gchar *new_value, gpointer d)
|
||||
{
|
||||
WpSettings *self = WP_SETTINGS(d);
|
||||
const gchar *old_value = wp_properties_get (self->settings, setting);
|
||||
const gchar *old_value = NULL;
|
||||
|
||||
/* Only handle JSON metadata values */
|
||||
if (!g_str_equal (type, "Spa:String:JSON"))
|
||||
return;
|
||||
|
||||
old_value = wp_properties_get (self->settings, setting);
|
||||
if (!old_value) {
|
||||
wp_info_object (self, "new setting defined \"%s\" = \"%s\"",
|
||||
setting, new_value);
|
||||
|
|
@ -671,15 +676,17 @@ on_metadata_changed (WpMetadata *m, guint32 subject,
|
|||
Callback *cb = g_ptr_array_index (self->callbacks, i);
|
||||
|
||||
if (g_pattern_match_simple (cb->pattern, setting)) {
|
||||
|
||||
g_autoptr (WpSpaJson) json = NULL;
|
||||
GValue values[3] = { G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT };
|
||||
|
||||
g_value_init (&values[0], G_TYPE_OBJECT);
|
||||
g_value_init (&values[1], G_TYPE_STRING);
|
||||
g_value_init (&values[2], G_TYPE_STRING);
|
||||
g_value_init (&values[2], WP_TYPE_SPA_JSON);
|
||||
|
||||
g_value_set_object (&values[0], self);
|
||||
g_value_set_string (&values[1], setting);
|
||||
g_value_set_string (&values[2], new_value);
|
||||
json = new_value ? wp_spa_json_new_from_string (new_value) : NULL;
|
||||
g_value_set_boxed (&values[2], json);
|
||||
|
||||
g_closure_invoke (cb->closure, NULL, 3, values, NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,16 +37,16 @@ WpSettings * wp_settings_get_instance (WpCore * core,
|
|||
const gchar *metadata_name);
|
||||
|
||||
/*!
|
||||
* \brief callback conveying the changed setting and its string(raw) value
|
||||
* \brief callback conveying the changed setting and its json value
|
||||
*
|
||||
* \ingroup wpsettings
|
||||
* \param obj the wpsettings object
|
||||
* \param setting the changed setting
|
||||
* \param raw_value string value of the the changed setting
|
||||
* \param value json value of the the changed setting
|
||||
* \param user_data data passed in the \a wp_settings_subscribe
|
||||
*/
|
||||
typedef void (*WpSettingsChangedCallback) (WpSettings *obj,
|
||||
const gchar *setting, const gchar *raw_value, gpointer user_data);
|
||||
const gchar *setting, WpSpaJson *value, gpointer user_data);
|
||||
|
||||
WP_API
|
||||
guintptr wp_settings_subscribe (WpSettings *self,
|
||||
|
|
|
|||
|
|
@ -563,7 +563,7 @@ get_settings (WpDefaultNodes *self, const gchar *setting)
|
|||
|
||||
void
|
||||
wp_settings_changed_callback (WpSettings *obj, const gchar *setting,
|
||||
const gchar *raw_value, gpointer user_data)
|
||||
WpSpaJson *value, gpointer user_data)
|
||||
{
|
||||
WpDefaultNodes *self = WP_DEFAULT_NODES (user_data);
|
||||
g_return_if_fail (self);
|
||||
|
|
|
|||
|
|
@ -7,17 +7,6 @@
|
|||
*/
|
||||
#include "../common/base-test-fixture.h"
|
||||
|
||||
/*
|
||||
* tests the loading & parsing of JSON conf file(pls check the .conf that is
|
||||
* loaded), metadata updates, wpsetttings object creation and its API.
|
||||
*/
|
||||
typedef enum {
|
||||
BOOLEAN,
|
||||
INTEGER,
|
||||
STRING,
|
||||
FLOAT
|
||||
} SettingType;
|
||||
|
||||
typedef struct {
|
||||
WpBaseTestFixture base;
|
||||
|
||||
|
|
@ -29,9 +18,8 @@ typedef struct {
|
|||
WpSettings *s;
|
||||
|
||||
gchar *triggered_setting;
|
||||
gchar *triggered_setting_value;
|
||||
WpSpaJson *triggered_setting_value;
|
||||
gboolean triggered_callback;
|
||||
SettingType setting_type;
|
||||
} TestSettingsFixture;
|
||||
|
||||
static void
|
||||
|
|
@ -634,29 +622,31 @@ test_rules (TestSettingsFixture *self, gconstpointer data)
|
|||
}
|
||||
|
||||
void wp_settings_changed_callback (WpSettings *obj, const gchar *setting,
|
||||
const gchar *raw_value, gpointer user_data)
|
||||
WpSpaJson *json, gpointer user_data)
|
||||
{
|
||||
TestSettingsFixture *self = user_data;
|
||||
g_assert_cmpstr (setting, ==, self->triggered_setting);
|
||||
self->triggered_callback = true;
|
||||
g_autoptr (WpSpaJson) j = wp_settings_get (self->s, setting);
|
||||
g_assert_nonnull (j);
|
||||
g_assert_nonnull (json);
|
||||
|
||||
if (self->setting_type == BOOLEAN) {
|
||||
gboolean value = FALSE;
|
||||
g_assert_true (wp_spa_json_parse_boolean (j, &value));
|
||||
g_assert_cmpint (value, ==, spa_atob (self->triggered_setting_value));
|
||||
g_assert_cmpstr (raw_value, ==, self->triggered_setting_value);
|
||||
} else if (self->setting_type == INTEGER) {
|
||||
gint value = 0;
|
||||
g_assert_true (wp_spa_json_parse_int (j, &value));
|
||||
g_assert_cmpint (value, ==, atoi (self->triggered_setting_value));
|
||||
g_assert_cmpstr (raw_value, ==, self->triggered_setting_value);
|
||||
} else if (self->setting_type == STRING) {
|
||||
g_autofree gchar *value = wp_spa_json_parse_string (j);
|
||||
if (wp_spa_json_is_boolean (json)) {
|
||||
gboolean value = FALSE, expected = FALSE;
|
||||
g_assert_true (wp_spa_json_parse_boolean (json, &value));
|
||||
g_assert_true (wp_spa_json_parse_boolean (self->triggered_setting_value,
|
||||
&expected));
|
||||
g_assert_cmpint (value, ==, expected);
|
||||
} else if (wp_spa_json_is_int (json)) {
|
||||
gint value = 0, expected = 0;
|
||||
g_assert_true (wp_spa_json_parse_int (json, &value));
|
||||
g_assert_true (wp_spa_json_parse_int (self->triggered_setting_value,
|
||||
&expected));
|
||||
g_assert_cmpint (value, ==, expected);
|
||||
} else if (wp_spa_json_is_string (json)) {
|
||||
g_autofree gchar *value = wp_spa_json_parse_string (json);
|
||||
g_autofree gchar *expected = wp_spa_json_parse_string (json);
|
||||
g_assert_nonnull (value);
|
||||
g_assert_cmpstr (value, ==, self->triggered_setting_value);
|
||||
g_assert_cmpstr (raw_value, ==, self->triggered_setting_value);
|
||||
g_assert_nonnull (expected);
|
||||
g_assert_cmpstr (value, ==, expected);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -672,56 +662,57 @@ test_callbacks (TestSettingsFixture *self, gconstpointer data)
|
|||
wp_settings_changed_callback, (gpointer)self);
|
||||
|
||||
{
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_boolean (TRUE);
|
||||
self->triggered_setting = "test-setting1";
|
||||
self->triggered_setting_value = "true";
|
||||
self->triggered_callback = false;
|
||||
self->setting_type = BOOLEAN;
|
||||
self->triggered_setting_value = json;
|
||||
self->triggered_callback = FALSE;
|
||||
wp_metadata_set (self->metadata, 0, self->triggered_setting,
|
||||
"Spa:String:JSON", self->triggered_setting_value);
|
||||
g_assert_cmpint (self->triggered_callback, ==, true);
|
||||
"Spa:String:JSON", wp_spa_json_get_data (json));
|
||||
g_assert_cmpint (self->triggered_callback, ==, TRUE);
|
||||
}
|
||||
|
||||
{
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_boolean (TRUE);
|
||||
self->triggered_setting = "test-setting1";
|
||||
self->triggered_setting_value = "true";
|
||||
self->setting_type = BOOLEAN;
|
||||
self->triggered_callback = false;
|
||||
self->triggered_setting_value = json;
|
||||
self->triggered_callback = FALSE;
|
||||
wp_metadata_set (self->metadata, 0, self->triggered_setting,
|
||||
"Spa:String:JSON", self->triggered_setting_value);
|
||||
g_assert_cmpint (self->triggered_callback, ==, false);
|
||||
"Spa:String:JSON", wp_spa_json_get_data (json));
|
||||
g_assert_cmpint (self->triggered_callback, ==, FALSE);
|
||||
}
|
||||
|
||||
{
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_int (99);
|
||||
self->triggered_setting = "test-setting3-int";
|
||||
self->setting_type = INTEGER;
|
||||
self->triggered_setting_value = "99";
|
||||
self->triggered_callback = true;
|
||||
self->triggered_setting_value = json;
|
||||
self->triggered_callback = TRUE;
|
||||
wp_metadata_set (self->metadata, 0, self->triggered_setting,
|
||||
"Spa:String:JSON", self->triggered_setting_value);
|
||||
g_assert_cmpint (self->triggered_callback, ==, true);
|
||||
"Spa:String:JSON", wp_spa_json_get_data (json));
|
||||
g_assert_cmpint (self->triggered_callback, ==, TRUE);
|
||||
}
|
||||
|
||||
{
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_string ("lets not blabber");
|
||||
self->triggered_setting = "test-setting4-string";
|
||||
self->setting_type = STRING;
|
||||
self->triggered_setting_value = "lets not blabber";
|
||||
self->triggered_callback = true;
|
||||
self->triggered_setting_value = json;
|
||||
self->triggered_callback = TRUE;
|
||||
wp_metadata_set (self->metadata, 0, self->triggered_setting,
|
||||
"Spa:String:JSON", self->triggered_setting_value);
|
||||
g_assert_cmpint (self->triggered_callback, ==, true);
|
||||
"Spa:String:JSON", wp_spa_json_get_data (json));
|
||||
g_assert_cmpint (self->triggered_callback, ==, TRUE);
|
||||
}
|
||||
|
||||
{
|
||||
g_autoptr (WpSpaJson) json = wp_spa_json_new_string ("lets blabber");
|
||||
self->triggered_setting = "test-setting4-string";
|
||||
self->setting_type = STRING;
|
||||
self->triggered_setting_value = "lets blabber";
|
||||
self->triggered_callback = false;
|
||||
self->triggered_setting_value = json;
|
||||
self->triggered_callback = FALSE;
|
||||
g_assert_cmpint (wp_settings_unsubscribe (s, sub_id), ==,
|
||||
true);
|
||||
g_assert_cmpint (wp_settings_unsubscribe (s, (sub_id-1)), ==,
|
||||
false);
|
||||
wp_metadata_set (self->metadata, 0, self->triggered_setting,
|
||||
"Spa:String:JSON", self->triggered_setting_value);
|
||||
g_assert_cmpint (self->triggered_callback, ==, false);
|
||||
"Spa:String:JSON", wp_spa_json_get_data (json));
|
||||
g_assert_cmpint (self->triggered_callback, ==, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -256,27 +256,26 @@ local setting_value
|
|||
local callback
|
||||
local finish_activation
|
||||
|
||||
function callback (obj, s, rawvalue)
|
||||
local json = Json.Raw (rawvalue)
|
||||
function callback (obj, s, json)
|
||||
assert (json ~= nil)
|
||||
|
||||
if (json:is_boolean()) then
|
||||
assert (s == setting)
|
||||
callback = true
|
||||
assert (json:parse() == setting_value)
|
||||
assert (setting_value == Settings.get (s, "test-settings"):parse())
|
||||
assert (json:parse() == setting_value:parse())
|
||||
assert (setting_value:parse() == Settings.get (s, "test-settings"):parse())
|
||||
|
||||
elseif (json:is_int()) then
|
||||
assert (s == setting)
|
||||
callback = true
|
||||
assert (json:parse() == setting_value)
|
||||
assert (setting_value == Settings.get (s, "test-settings"):parse())
|
||||
assert (json:parse() == setting_value:parse())
|
||||
assert (setting_value:parse() == Settings.get (s, "test-settings"):parse())
|
||||
|
||||
elseif (json:is_string()) then
|
||||
assert (s == setting)
|
||||
callback = true
|
||||
assert (json:parse() == setting_value)
|
||||
assert (setting_value == Settings.get (s, "test-settings"):parse())
|
||||
assert (json:parse() == setting_value:parse())
|
||||
assert (setting_value:parse() == Settings.get (s, "test-settings"):parse())
|
||||
end
|
||||
|
||||
if (finish_activation) then
|
||||
|
|
@ -297,35 +296,35 @@ metadata_om:connect("objects-changed", function (om)
|
|||
|
||||
-- test #1
|
||||
setting = "test-setting1"
|
||||
setting_value = true
|
||||
setting_value = Json.Boolean (true)
|
||||
callback = false
|
||||
|
||||
metadata:set(0, setting, "Spa:String:JSON", tostring(setting_value))
|
||||
metadata:set(0, setting, "Spa:String:JSON", setting_value:get_data())
|
||||
assert (callback)
|
||||
|
||||
-- test #2
|
||||
setting = "test-setting1"
|
||||
setting_value = true
|
||||
setting_value = Json.Boolean (true)
|
||||
callback = false
|
||||
|
||||
metadata:set(0, setting, "Spa:String:JSON", tostring(setting_value))
|
||||
metadata:set(0, setting, "Spa:String:JSON", setting_value:get_data())
|
||||
assert (not callback)
|
||||
|
||||
-- test #3
|
||||
setting = "test-setting3-int"
|
||||
setting_value = 99
|
||||
setting_value = Json.Int (99)
|
||||
callback = false
|
||||
|
||||
metadata:set(0, setting, "Spa:String:JSON", setting_value)
|
||||
metadata:set(0, setting, "Spa:String:JSON", setting_value:get_data())
|
||||
assert (callback)
|
||||
|
||||
-- test #4
|
||||
setting = "test-setting4-string"
|
||||
setting_value = "lets not blabber"
|
||||
setting_value = Json.String ("lets not blabber")
|
||||
callback = false
|
||||
|
||||
finish_activation = true
|
||||
metadata:set(0, setting, "Spa:String:JSON", "\"lets not blabber\"")
|
||||
metadata:set(0, setting, "Spa:String:JSON", setting_value:get_data())
|
||||
assert (callback)
|
||||
|
||||
end)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue