Add a new daemon configuration option to control EnumerateAllDevices

For plugins that are configured to only enumerate devices supported
by metadata this will allow showing them in all contexts

Fixes: #1877
This commit is contained in:
Mario Limonciello 2020-03-28 10:50:57 -05:00 committed by Mario Limonciello
parent 80d9b7450c
commit 4fa95a7b51
4 changed files with 29 additions and 0 deletions

View File

@ -25,3 +25,6 @@ VerboseDomains=
# Update the message of the day (MOTD) on device and metadata changes # Update the message of the day (MOTD) on device and metadata changes
UpdateMotd=true UpdateMotd=true
# For some plugins, enumerate only devices supported by metadata
EnumerateAllDevices=true

View File

@ -34,6 +34,7 @@ struct _FuConfig
guint idle_timeout; guint idle_timeout;
gchar *config_file; gchar *config_file;
gboolean update_motd; gboolean update_motd;
gboolean enumerate_all_devices;
}; };
G_DEFINE_TYPE (FuConfig, fu_config, G_TYPE_OBJECT) G_DEFINE_TYPE (FuConfig, fu_config, G_TYPE_OBJECT)
@ -55,6 +56,7 @@ fu_config_reload (FuConfig *self, GError **error)
g_auto(GStrv) plugins = NULL; g_auto(GStrv) plugins = NULL;
g_autofree gchar *domains = NULL; g_autofree gchar *domains = NULL;
g_autoptr(GKeyFile) keyfile = g_key_file_new (); g_autoptr(GKeyFile) keyfile = g_key_file_new ();
g_autoptr(GError) error_enumerate_all = NULL;
g_debug ("loading config values from %s", self->config_file); g_debug ("loading config values from %s", self->config_file);
if (!g_key_file_load_from_file (keyfile, self->config_file, if (!g_key_file_load_from_file (keyfile, self->config_file,
@ -133,6 +135,17 @@ fu_config_reload (FuConfig *self, GError **error)
"UpdateMotd", "UpdateMotd",
NULL); NULL);
/* whether to only show supported devices for some plugins */
self->enumerate_all_devices = g_key_file_get_boolean (keyfile,
"fwupd",
"EnumerateAllDevices",
&error_enumerate_all);
/* if error parsing or missing, we want to default to true */
if (!self->enumerate_all_devices && error_enumerate_all != NULL) {
g_debug ("failed to read EnumerateAllDevices key: %s", error_enumerate_all->message);
self->enumerate_all_devices = TRUE;
}
return TRUE; return TRUE;
} }
@ -237,6 +250,13 @@ fu_config_get_update_motd (FuConfig *self)
return self->update_motd; return self->update_motd;
} }
gboolean
fu_config_get_enumerate_all_devices (FuConfig *self)
{
g_return_val_if_fail (FU_IS_CONFIG (self), FALSE);
return self->enumerate_all_devices;
}
static void static void
fu_config_class_init (FuConfigClass *klass) fu_config_class_init (FuConfigClass *klass)
{ {

View File

@ -27,3 +27,4 @@ GPtrArray *fu_config_get_blacklist_devices (FuConfig *self);
GPtrArray *fu_config_get_blacklist_plugins (FuConfig *self); GPtrArray *fu_config_get_blacklist_plugins (FuConfig *self);
GPtrArray *fu_config_get_approved_firmware (FuConfig *self); GPtrArray *fu_config_get_approved_firmware (FuConfig *self);
gboolean fu_config_get_update_motd (FuConfig *self); gboolean fu_config_get_update_motd (FuConfig *self);
gboolean fu_config_get_enumerate_all_devices (FuConfig *self);

View File

@ -501,6 +501,7 @@ fu_engine_modify_config (FuEngine *self, const gchar *key, const gchar *value, G
"IdleTimeout", "IdleTimeout",
"VerboseDomains", "VerboseDomains",
"UpdateMotd", "UpdateMotd",
"EnumerateAllDevices",
NULL }; NULL };
g_return_val_if_fail (FU_IS_ENGINE (self), FALSE); g_return_val_if_fail (FU_IS_ENGINE (self), FALSE);
@ -4880,6 +4881,10 @@ fu_engine_plugin_check_supported_cb (FuPlugin *plugin, const gchar *guid, FuEngi
{ {
g_autoptr(XbNode) n = NULL; g_autoptr(XbNode) n = NULL;
g_autofree gchar *xpath = NULL; g_autofree gchar *xpath = NULL;
if (fu_config_get_enumerate_all_devices (self->config))
return TRUE;
xpath = g_strdup_printf ("components/component/" xpath = g_strdup_printf ("components/component/"
"provides/firmware[@type='flashed'][text()='%s']", "provides/firmware[@type='flashed'][text()='%s']",
guid); guid);