mirror of
https://git.proxmox.com/git/fwupd
synced 2025-07-27 07:52:24 +00:00
Cache list of devices to cache directory
This commit is contained in:
parent
2cc5449ae8
commit
97a627b54b
@ -83,7 +83,7 @@ _show_device_ids()
|
||||
return 0
|
||||
fi
|
||||
local description
|
||||
description="$(command fwupdmgr get-devices --json 2>/dev/null | jq '.Devices | .[] | .DeviceId')"
|
||||
description="$(command jq '.Devices | .[] | .DeviceId' @localstatedir@/cache/fwupd/devices.json 2>/dev/null)"
|
||||
COMPREPLY+=( $(compgen -W "${description}" -- "$cur") )
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,14 @@ if bashcomp.found()
|
||||
pkgconfig_define: bashcomp.version().version_compare('>= 2.10') ? ['datadir', datadir] : ['prefix', prefix],
|
||||
)
|
||||
|
||||
install_data(['fwupdtool'],
|
||||
con = configuration_data()
|
||||
con.set('localstatedir', localstatedir)
|
||||
|
||||
configure_file(
|
||||
input : 'fwupdtool',
|
||||
output : 'fwupdtool',
|
||||
configuration : con,
|
||||
install : true,
|
||||
install_dir : completions_dir,
|
||||
)
|
||||
|
||||
|
@ -12,6 +12,8 @@
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "fwupd-device-private.h"
|
||||
|
||||
#include "fu-engine-helper.h"
|
||||
#include "fu-engine.h"
|
||||
|
||||
@ -135,3 +137,49 @@ fu_engine_update_motd(FuEngine *self, GError **error)
|
||||
g_debug("writing motd target %s", target);
|
||||
return g_file_set_contents(target, str->str, str->len, error);
|
||||
}
|
||||
|
||||
gboolean
|
||||
fu_engine_update_devices_file(FuEngine *self, GError **error)
|
||||
{
|
||||
gsize len;
|
||||
g_autoptr(JsonBuilder) builder = NULL;
|
||||
g_autoptr(JsonGenerator) generator = NULL;
|
||||
g_autoptr(JsonNode) root = NULL;
|
||||
g_autoptr(GPtrArray) devices = NULL;
|
||||
g_autofree gchar *data = NULL;
|
||||
g_autofree gchar *directory = NULL;
|
||||
g_autofree gchar *target = NULL;
|
||||
|
||||
builder = json_builder_new();
|
||||
json_builder_begin_object(builder);
|
||||
json_builder_set_member_name(builder, "Devices");
|
||||
json_builder_begin_array(builder);
|
||||
devices = fu_engine_get_devices(self, NULL);
|
||||
if (devices != NULL) {
|
||||
for (guint i = 0; i < devices->len; i++) {
|
||||
FwupdDevice *dev = g_ptr_array_index(devices, i);
|
||||
json_builder_begin_object(builder);
|
||||
fwupd_device_to_json(dev, builder);
|
||||
json_builder_end_object(builder);
|
||||
}
|
||||
}
|
||||
json_builder_end_array(builder);
|
||||
json_builder_end_object(builder);
|
||||
|
||||
root = json_builder_get_root(builder);
|
||||
generator = json_generator_new();
|
||||
json_generator_set_pretty(generator, TRUE);
|
||||
json_generator_set_root(generator, root);
|
||||
data = json_generator_to_data(generator, &len);
|
||||
if (data == NULL) {
|
||||
g_set_error_literal(error,
|
||||
FWUPD_ERROR,
|
||||
FWUPD_ERROR_INTERNAL,
|
||||
"Failed to convert to JSON string");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
directory = fu_path_from_kind(FU_PATH_KIND_CACHEDIR_PKG);
|
||||
target = g_build_filename(directory, "devices.json", NULL);
|
||||
return fu_bytes_set_contents(target, g_bytes_new_take(g_steal_pointer(&data), len), error);
|
||||
}
|
||||
|
@ -9,3 +9,5 @@
|
||||
|
||||
gboolean
|
||||
fu_engine_update_motd(FuEngine *self, GError **error);
|
||||
gboolean
|
||||
fu_engine_update_devices_file(FuEngine *self, GError **error);
|
||||
|
@ -129,6 +129,8 @@ G_DEFINE_TYPE(FuEngine, fu_engine, G_TYPE_OBJECT)
|
||||
static void
|
||||
fu_engine_emit_changed(FuEngine *self)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
g_signal_emit(self, signals[SIGNAL_CHANGED], 0);
|
||||
fu_engine_idle_reset(self);
|
||||
|
||||
@ -138,6 +140,10 @@ fu_engine_emit_changed(FuEngine *self)
|
||||
if (!fu_engine_update_motd(self, &error_local))
|
||||
g_debug("failed to update MOTD: %s", error_local->message);
|
||||
}
|
||||
|
||||
/* update the list of devices */
|
||||
if (!fu_engine_update_devices_file(self, &error))
|
||||
g_debug("failed to update list of devices: %s", error->message);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -6482,6 +6488,7 @@ fu_engine_backend_device_removed_cb(FuBackend *backend, FuDevice *device, FuEngi
|
||||
fu_device_get_name(device_tmp),
|
||||
fu_device_get_id(device_tmp));
|
||||
fu_device_list_remove(self->device_list, device_tmp);
|
||||
fu_engine_emit_changed(self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user