mirror of
https://git.proxmox.com/git/fwupd
synced 2025-12-25 06:19:14 +00:00
Add a get-plugins command to fwupdtool
This returns the list of currently enabled plugins.
This commit is contained in:
parent
d82e3b565a
commit
8c71a3f2e9
@ -1218,6 +1218,23 @@ fu_engine_install (FuEngine *self,
|
||||
version, flags, error);
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_engine_get_plugins:
|
||||
* @self: A #FuPluginList
|
||||
*
|
||||
* Gets all the plugins that have been added.
|
||||
*
|
||||
* Returns: (transfer none) (element-type FuPlugin): the plugins
|
||||
*
|
||||
* Since: 1.0.8
|
||||
**/
|
||||
GPtrArray *
|
||||
fu_engine_get_plugins (FuEngine *self)
|
||||
{
|
||||
g_return_val_if_fail (FU_IS_ENGINE (self), NULL);
|
||||
return fu_plugin_list_get_all (self->plugin_list);
|
||||
}
|
||||
|
||||
gboolean
|
||||
fu_engine_install_blob (FuEngine *self,
|
||||
FuDevice *device,
|
||||
@ -2879,7 +2896,7 @@ fu_engine_is_plugin_name_blacklisted (FuEngine *self, const gchar *name)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gboolean
|
||||
fu_engine_load_plugins (FuEngine *self, GError **error)
|
||||
{
|
||||
const gchar *fn;
|
||||
@ -2925,10 +2942,14 @@ fu_engine_load_plugins (FuEngine *self, GError **error)
|
||||
fu_plugin_set_runtime_versions (plugin, self->runtime_versions);
|
||||
fu_plugin_set_compile_versions (plugin, self->compile_versions);
|
||||
g_debug ("adding plugin %s", filename);
|
||||
if (!fu_plugin_open (plugin, filename, &error_local)) {
|
||||
g_warning ("failed to open plugin %s: %s",
|
||||
filename, error_local->message);
|
||||
continue;
|
||||
|
||||
/* if loaded from fu_engine_load() open the plugin */
|
||||
if (self->usb_ctx != NULL) {
|
||||
if (!fu_plugin_open (plugin, filename, &error_local)) {
|
||||
g_warning ("failed to open plugin %s: %s",
|
||||
filename, error_local->message);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* self disabled */
|
||||
|
||||
@ -40,6 +40,8 @@ G_DECLARE_FINAL_TYPE (FuEngine, fu_engine, FU, ENGINE, GObject)
|
||||
FuEngine *fu_engine_new (FuAppFlags app_flags);
|
||||
gboolean fu_engine_load (FuEngine *self,
|
||||
GError **error);
|
||||
gboolean fu_engine_load_plugins (FuEngine *self,
|
||||
GError **error);
|
||||
FwupdStatus fu_engine_get_status (FuEngine *self);
|
||||
void fu_engine_profile_dump (FuEngine *self);
|
||||
gboolean fu_engine_check_plugins_pending (FuEngine *self,
|
||||
@ -48,6 +50,7 @@ AsStore *fu_engine_get_store_from_blob (FuEngine *self,
|
||||
GBytes *blob_cab,
|
||||
GError **error);
|
||||
guint64 fu_engine_get_archive_size_max (FuEngine *self);
|
||||
GPtrArray *fu_engine_get_plugins (FuEngine *self);
|
||||
GPtrArray *fu_engine_get_devices (FuEngine *self,
|
||||
GError **error);
|
||||
FuDevice *fu_engine_get_device (FuEngine *self,
|
||||
|
||||
@ -124,11 +124,7 @@ fu_plugin_list_sort_cb (gconstpointer a, gconstpointer b)
|
||||
{
|
||||
FuPlugin **pa = (FuPlugin **) a;
|
||||
FuPlugin **pb = (FuPlugin **) b;
|
||||
if (fu_plugin_get_order (*pa) < fu_plugin_get_order (*pb))
|
||||
return -1;
|
||||
if (fu_plugin_get_order (*pa) > fu_plugin_get_order (*pb))
|
||||
return 1;
|
||||
return 0;
|
||||
return fu_plugin_order_compare (*pa, *pb);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -106,6 +106,10 @@ gboolean fu_plugin_runner_clear_results (FuPlugin *plugin,
|
||||
gboolean fu_plugin_runner_get_results (FuPlugin *plugin,
|
||||
FuDevice *device,
|
||||
GError **error);
|
||||
gint fu_plugin_name_compare (FuPlugin *plugin1,
|
||||
FuPlugin *plugin2);
|
||||
gint fu_plugin_order_compare (FuPlugin *plugin1,
|
||||
FuPlugin *plugin2);
|
||||
|
||||
/* utils */
|
||||
gchar *fu_plugin_guess_name_from_fn (const gchar *filename);
|
||||
|
||||
@ -1538,6 +1538,44 @@ fu_plugin_get_config_value (FuPlugin *plugin, const gchar *key)
|
||||
return g_key_file_get_string (keyfile, plugin_name, key, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_plugin_name_compare:
|
||||
* @plugin1: first #FuPlugin to compare.
|
||||
* @plugin2: second #FuPlugin to compare.
|
||||
*
|
||||
* Compares two plugins by their names.
|
||||
*
|
||||
* Returns: 1, 0 or -1 if @plugin1 is greater, equal, or less than @plugin2.
|
||||
**/
|
||||
gint
|
||||
fu_plugin_name_compare (FuPlugin *plugin1, FuPlugin *plugin2)
|
||||
{
|
||||
FuPluginPrivate *priv1 = fu_plugin_get_instance_private (plugin1);
|
||||
FuPluginPrivate *priv2 = fu_plugin_get_instance_private (plugin2);
|
||||
return g_strcmp0 (priv1->name, priv2->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* fu_plugin_order_compare:
|
||||
* @plugin1: first #FuPlugin to compare.
|
||||
* @plugin2: second #FuPlugin to compare.
|
||||
*
|
||||
* Compares two plugins by their depsolved order.
|
||||
*
|
||||
* Returns: 1, 0 or -1 if @plugin1 is greater, equal, or less than @plugin2.
|
||||
**/
|
||||
gint
|
||||
fu_plugin_order_compare (FuPlugin *plugin1, FuPlugin *plugin2)
|
||||
{
|
||||
FuPluginPrivate *priv1 = fu_plugin_get_instance_private (plugin1);
|
||||
FuPluginPrivate *priv2 = fu_plugin_get_instance_private (plugin2);
|
||||
if (priv1->order < priv2->order)
|
||||
return -1;
|
||||
if (priv1->order > priv2->order)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
fu_plugin_class_init (FuPluginClass *klass)
|
||||
{
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "fu-engine.h"
|
||||
#include "fu-plugin-private.h"
|
||||
#include "fu-progressbar.h"
|
||||
#include "fu-smbios.h"
|
||||
#include "fu-util-common.h"
|
||||
@ -286,6 +287,41 @@ fu_util_watch (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gint
|
||||
fu_util_plugin_name_sort_cb (FuPlugin **item1, FuPlugin **item2)
|
||||
{
|
||||
return fu_plugin_name_compare (*item1, *item2);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fu_util_get_plugins (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||
{
|
||||
GPtrArray *plugins;
|
||||
guint cnt = 0;
|
||||
|
||||
/* load engine */
|
||||
if (!fu_engine_load_plugins (priv->engine, error))
|
||||
return FALSE;
|
||||
|
||||
/* print */
|
||||
plugins = fu_engine_get_plugins (priv->engine);
|
||||
g_ptr_array_sort (plugins, (GCompareFunc) fu_util_plugin_name_sort_cb);
|
||||
for (guint i = 0; i < plugins->len; i++) {
|
||||
FuPlugin *plugin = g_ptr_array_index (plugins, i);
|
||||
if (!fu_plugin_get_enabled (plugin))
|
||||
continue;
|
||||
g_print ("%s\n", fu_plugin_get_name (plugin));
|
||||
cnt++;
|
||||
}
|
||||
if (cnt == 0) {
|
||||
/* TRANSLATORS: nothing found */
|
||||
g_print ("%s\n", _("No plugins found"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fu_util_get_devices (FuUtilPrivate *priv, gchar **values, GError **error)
|
||||
{
|
||||
@ -664,6 +700,12 @@ main (int argc, char *argv[])
|
||||
/* TRANSLATORS: command description */
|
||||
_("Dump SMBIOS data from a file"),
|
||||
fu_util_smbios_dump);
|
||||
fu_util_add (priv->cmd_array,
|
||||
"get-plugins",
|
||||
NULL,
|
||||
/* TRANSLATORS: command description */
|
||||
_("Get all enabled plugins registered with the system"),
|
||||
fu_util_get_plugins);
|
||||
fu_util_add (priv->cmd_array,
|
||||
"get-devices",
|
||||
NULL,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user