mirror of
https://git.proxmox.com/git/fwupd
synced 2025-07-28 05:12:10 +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
|
return 0
|
||||||
fi
|
fi
|
||||||
local description
|
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") )
|
COMPREPLY+=( $(compgen -W "${description}" -- "$cur") )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,14 @@ if bashcomp.found()
|
|||||||
pkgconfig_define: bashcomp.version().version_compare('>= 2.10') ? ['datadir', datadir] : ['prefix', prefix],
|
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,
|
install_dir : completions_dir,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
|
#include "fwupd-device-private.h"
|
||||||
|
|
||||||
#include "fu-engine-helper.h"
|
#include "fu-engine-helper.h"
|
||||||
#include "fu-engine.h"
|
#include "fu-engine.h"
|
||||||
|
|
||||||
@ -135,3 +137,49 @@ fu_engine_update_motd(FuEngine *self, GError **error)
|
|||||||
g_debug("writing motd target %s", target);
|
g_debug("writing motd target %s", target);
|
||||||
return g_file_set_contents(target, str->str, str->len, error);
|
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
|
gboolean
|
||||||
fu_engine_update_motd(FuEngine *self, GError **error);
|
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
|
static void
|
||||||
fu_engine_emit_changed(FuEngine *self)
|
fu_engine_emit_changed(FuEngine *self)
|
||||||
{
|
{
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
g_signal_emit(self, signals[SIGNAL_CHANGED], 0);
|
g_signal_emit(self, signals[SIGNAL_CHANGED], 0);
|
||||||
fu_engine_idle_reset(self);
|
fu_engine_idle_reset(self);
|
||||||
|
|
||||||
@ -138,6 +140,10 @@ fu_engine_emit_changed(FuEngine *self)
|
|||||||
if (!fu_engine_update_motd(self, &error_local))
|
if (!fu_engine_update_motd(self, &error_local))
|
||||||
g_debug("failed to update MOTD: %s", error_local->message);
|
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
|
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_name(device_tmp),
|
||||||
fu_device_get_id(device_tmp));
|
fu_device_get_id(device_tmp));
|
||||||
fu_device_list_remove(self->device_list, device_tmp);
|
fu_device_list_remove(self->device_list, device_tmp);
|
||||||
|
fu_engine_emit_changed(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user