extensions-tool: Split out get_extension_property() helper
For the prefs command, we first fetch the extension info to check whether the extension exists and actually has preferences. This pattern can be useful for other commands and properties, so split out a generic helper function. https://gitlab.gnome.org/GNOME/gnome-shell/issues/2391
This commit is contained in:
parent
23e382dd33
commit
636ab4b0e9
@ -29,9 +29,7 @@ static gboolean
|
|||||||
launch_extension_prefs (const char *uuid)
|
launch_extension_prefs (const char *uuid)
|
||||||
{
|
{
|
||||||
g_autoptr (GDBusProxy) proxy = NULL;
|
g_autoptr (GDBusProxy) proxy = NULL;
|
||||||
g_autoptr (GVariant) response = NULL;
|
g_autoptr (GVariant) info = NULL;
|
||||||
g_autoptr (GVariant) asv = NULL;
|
|
||||||
g_autoptr (GVariantDict) info = NULL;
|
|
||||||
g_autoptr (GError) error = NULL;
|
g_autoptr (GError) error = NULL;
|
||||||
gboolean has_prefs;
|
gboolean has_prefs;
|
||||||
|
|
||||||
@ -39,29 +37,11 @@ launch_extension_prefs (const char *uuid)
|
|||||||
if (proxy == NULL)
|
if (proxy == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
response = g_dbus_proxy_call_sync (proxy,
|
info = get_extension_property (proxy, uuid, "hasPrefs");
|
||||||
"GetExtensionInfo",
|
if (info == NULL)
|
||||||
g_variant_new ("(s)", uuid),
|
return FALSE;
|
||||||
0,
|
|
||||||
-1,
|
|
||||||
NULL,
|
|
||||||
&error);
|
|
||||||
if (response == NULL)
|
|
||||||
{
|
|
||||||
g_printerr (_("Failed to connect to GNOME Shell"));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
asv = g_variant_get_child_value (response, 0);
|
has_prefs = g_variant_get_boolean (info);
|
||||||
info = g_variant_dict_new (asv);
|
|
||||||
|
|
||||||
if (!g_variant_dict_contains (info, "uuid"))
|
|
||||||
{
|
|
||||||
g_printerr (_("Extension “%s” doesn't exist\n"), uuid);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs);
|
|
||||||
if (!has_prefs)
|
if (!has_prefs)
|
||||||
{
|
{
|
||||||
g_printerr (_("Extension “%s” doesn't have preferences\n"), uuid);
|
g_printerr (_("Extension “%s” doesn't have preferences\n"), uuid);
|
||||||
|
@ -54,6 +54,10 @@ void print_extension_info (GVariantDict *info,
|
|||||||
DisplayFormat format);
|
DisplayFormat format);
|
||||||
|
|
||||||
GDBusProxy *get_shell_proxy (GError **error);
|
GDBusProxy *get_shell_proxy (GError **error);
|
||||||
|
GVariant *get_extension_property (GDBusProxy *proxy,
|
||||||
|
const char *uuid,
|
||||||
|
const char *property);
|
||||||
|
|
||||||
GSettings *get_shell_settings (void);
|
GSettings *get_shell_settings (void);
|
||||||
|
|
||||||
gboolean settings_list_add (GSettings *settings,
|
gboolean settings_list_add (GSettings *settings,
|
||||||
|
@ -124,6 +124,41 @@ get_shell_settings (void)
|
|||||||
return g_settings_new_full (schema, NULL, NULL);
|
return g_settings_new_full (schema, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GVariant *
|
||||||
|
get_extension_property (GDBusProxy *proxy,
|
||||||
|
const char *uuid,
|
||||||
|
const char *property)
|
||||||
|
{
|
||||||
|
g_autoptr (GVariant) response = NULL;
|
||||||
|
g_autoptr (GVariant) asv = NULL;
|
||||||
|
g_autoptr (GVariantDict) info = NULL;
|
||||||
|
g_autoptr (GError) error = NULL;
|
||||||
|
|
||||||
|
response = g_dbus_proxy_call_sync (proxy,
|
||||||
|
"GetExtensionInfo",
|
||||||
|
g_variant_new ("(s)", uuid),
|
||||||
|
0,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
&error);
|
||||||
|
if (response == NULL)
|
||||||
|
{
|
||||||
|
g_printerr (_("Failed to connect to GNOME Shell"));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
asv = g_variant_get_child_value (response, 0);
|
||||||
|
info = g_variant_dict_new (asv);
|
||||||
|
|
||||||
|
if (!g_variant_dict_contains (info, "uuid"))
|
||||||
|
{
|
||||||
|
g_printerr (_("Extension “%s” doesn't exist\n"), uuid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_variant_dict_lookup_value (info, property, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
settings_list_add (GSettings *settings,
|
settings_list_add (GSettings *settings,
|
||||||
const char *key,
|
const char *key,
|
||||||
|
Loading…
Reference in New Issue
Block a user