trivial: Add helpers that can be used for returning local files

This also allows us to drop the use of FwupdResult in the daemon.
This commit is contained in:
Richard Hughes 2017-09-15 11:05:23 +01:00
parent cc3de2efa4
commit 93b1576bef
5 changed files with 70 additions and 25 deletions

View File

@ -29,6 +29,7 @@
#include "fwupd-enums-private.h"
#include "fwupd-error.h"
#include "fwupd-device-private.h"
#include "fwupd-release-private.h"
static void fwupd_device_finalize (GObject *object);
@ -54,6 +55,7 @@ typedef struct {
guint32 flashes_left;
FwupdUpdateState update_state;
gchar *update_error;
FwupdRelease *release_default;
} FwupdDevicePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (FwupdDevice, fwupd_device, G_TYPE_OBJECT)
@ -917,6 +919,7 @@ fwupd_device_to_variant_builder (FwupdDevice *device, GVariantBuilder *builder)
GVariant *
fwupd_device_to_data (FwupdDevice *device, const gchar *type_string)
{
FwupdDevicePrivate *priv = GET_PRIVATE (device);
GVariantBuilder builder;
g_return_val_if_fail (FWUPD_IS_DEVICE (device), NULL);
@ -925,6 +928,8 @@ fwupd_device_to_data (FwupdDevice *device, const gchar *type_string)
/* create an array with all the metadata in */
g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
fwupd_device_to_variant_builder (device, &builder);
if (priv->release_default != NULL)
fwupd_release_to_variant_builder (priv->release_default, &builder);
/* supported types */
if (g_strcmp0 (type_string, "a{sv}") == 0)
@ -1165,6 +1170,43 @@ fwupd_device_set_update_error (FwupdDevice *device, const gchar *update_error)
priv->update_error = g_strdup (update_error);
}
/**
* fwupd_device_get_release_default:
* @device: A #FwupdDevice
*
* Gets the default release for this device.
*
* Returns: (transfer none): the #FwupdRelease, or %NULL if not set
*
* Since: 0.9.8
**/
FwupdRelease *
fwupd_device_get_release_default (FwupdDevice *device)
{
FwupdDevicePrivate *priv = GET_PRIVATE (device);
g_return_val_if_fail (FWUPD_IS_DEVICE (device), NULL);
return priv->release_default;
}
/**
* fwupd_device_add_release:
* @device: A #FwupdDevice
* @release: a #FwupdRelease
*
* Adds a release for this device.
*
* NOTE: devices can only store one release at this point in time.
*
* Since: 0.9.8
**/
void
fwupd_device_add_release (FwupdDevice *device, FwupdRelease *release)
{
FwupdDevicePrivate *priv = GET_PRIVATE (device);
g_return_if_fail (FWUPD_IS_DEVICE (device));
g_set_object (&priv->release_default, release);
}
static void
fwupd_pad_kv_ups (GString *str, const gchar *key, FwupdUpdateState value)
{
@ -1257,6 +1299,8 @@ fwupd_device_finalize (GObject *object)
FwupdDevice *device = FWUPD_DEVICE (object);
FwupdDevicePrivate *priv = GET_PRIVATE (device);
if (priv->release_default != NULL)
g_object_unref (priv->release_default);
g_free (priv->description);
g_free (priv->id);
g_free (priv->name);

View File

@ -25,6 +25,7 @@
#include <glib-object.h>
#include "fwupd-enums.h"
#include "fwupd-release.h"
G_BEGIN_DECLS
@ -114,6 +115,9 @@ void fwupd_device_set_update_state (FwupdDevice *device,
const gchar *fwupd_device_get_update_error (FwupdDevice *device);
void fwupd_device_set_update_error (FwupdDevice *device,
const gchar *update_error);
void fwupd_device_add_release (FwupdDevice *device,
FwupdRelease *release);
FwupdRelease *fwupd_device_get_release_default (FwupdDevice *device);
G_END_DECLS

View File

@ -1790,18 +1790,16 @@ fu_engine_get_store_from_blob (FuEngine *self, GBytes *blob_cab, GError **error)
return g_steal_pointer (&store);
}
static FwupdResult *
static FwupdDevice *
fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
{
FwupdTrustFlags trust_flags = FWUPD_TRUST_FLAG_NONE;
AsRelease *release;
FwupdDevice *dev;
FwupdRelease *rel;
GPtrArray *provides;
g_autoptr(FwupdResult) res = NULL;
g_autoptr(FwupdDevice) dev = NULL;
g_autoptr(FwupdRelease) rel = NULL;
res = fwupd_result_new ();
dev = fwupd_result_get_device (res);
dev = fwupd_device_new ();
provides = as_app_get_provides (app);
for (guint i = 0; i < provides->len; i++) {
AsProvide *prov = AS_PROVIDE (g_ptr_array_index (provides, i));
@ -1851,7 +1849,7 @@ fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
/* create a result with all the metadata in */
fwupd_device_set_description (dev, as_app_get_description (app, NULL));
rel = fwupd_result_get_release (res);
rel = fwupd_release_new ();
fwupd_release_set_trust_flags (rel, trust_flags);
fwupd_release_set_homepage (rel, as_app_get_url_item (app, AS_URL_KIND_HOMEPAGE));
fwupd_release_set_license (rel, as_app_get_project_license (app));
@ -1860,7 +1858,8 @@ fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
fwupd_release_set_vendor (rel, as_app_get_developer_name (app, NULL));
fwupd_release_set_appstream_id (rel, as_app_get_id (app));
fu_engine_set_release_from_appstream (self, rel, release);
return g_steal_pointer (&res);
fwupd_device_add_release (dev, rel);
return g_steal_pointer (&dev);
}
/**
@ -1873,7 +1872,7 @@ fu_engine_get_result_from_app (FuEngine *self, AsApp *app, GError **error)
*
* Note: this will close the fd when done
*
* Returns: (transfer container) (element-type FwupdResult): results
* Returns: (transfer container) (element-type FwupdDevice): results
**/
GPtrArray *
fu_engine_get_details_local (FuEngine *self, gint fd, GError **error)
@ -1907,7 +1906,7 @@ fu_engine_get_details_local (FuEngine *self, gint fd, GError **error)
details = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
for (guint i = 0; i < apps->len; i++) {
AsApp *app = g_ptr_array_index (apps, i);
FwupdResult *res = NULL;
FwupdDevice *res = NULL;
/* check we can install it */
if (!fu_engine_check_requirements (app, NULL, error))
@ -1962,7 +1961,7 @@ fu_engine_get_devices (FuEngine *self, GError **error)
*
* Gets the list of updates.
*
* Returns: (transfer container) (element-type FwupdResult): results
* Returns: (transfer container) (element-type FwupdDevice): results
**/
GPtrArray *
fu_engine_get_updates (FuEngine *self, GError **error)
@ -1977,7 +1976,6 @@ fu_engine_get_updates (FuEngine *self, GError **error)
FuDeviceItem *item = g_ptr_array_index (self->devices, i);
g_autoptr(GError) error_local = NULL;
g_autoptr(GPtrArray) rels = NULL;
g_autoptr(FwupdResult) result = fwupd_result_new ();
FwupdRelease *rel_default;
rels = fu_engine_get_upgrades (self, fu_device_get_id (item->device), &error_local);
@ -1986,9 +1984,8 @@ fu_engine_get_updates (FuEngine *self, GError **error)
continue;
}
rel_default = g_ptr_array_index (rels, 0);
fwupd_result_set_release (result, rel_default);
fwupd_result_set_device (result, FWUPD_DEVICE (item->device));
g_ptr_array_add (updates, g_steal_pointer (&result));
fwupd_device_add_release (FWUPD_DEVICE (item->device), rel_default);
g_ptr_array_add (updates, g_object_ref (item->device));
}
if (updates->len == 0) {
g_set_error_literal (error,
@ -2112,7 +2109,7 @@ fu_engine_get_releases_for_device (FuEngine *self, FuDevice *device, GError **er
*
* Gets the releases available for a specific device.
*
* Returns: (transfer container) (element-type FwupdResult): results
* Returns: (transfer container) (element-type FwupdDevice): results
**/
GPtrArray *
fu_engine_get_releases (FuEngine *self, const gchar *device_id, GError **error)
@ -2152,7 +2149,7 @@ fu_engine_get_releases (FuEngine *self, const gchar *device_id, GError **error)
*
* Gets the downgrades available for a specific device.
*
* Returns: (transfer container) (element-type FwupdResult): results
* Returns: (transfer container) (element-type FwupdDevice): results
**/
GPtrArray *
fu_engine_get_downgrades (FuEngine *self, const gchar *device_id, GError **error)
@ -2245,7 +2242,7 @@ fu_engine_get_downgrades (FuEngine *self, const gchar *device_id, GError **error
*
* Gets the upgrades available for a specific device.
*
* Returns: (transfer container) (element-type FwupdResult): results
* Returns: (transfer container) (element-type FwupdDevice): results
**/
GPtrArray *
fu_engine_get_upgrades (FuEngine *self, const gchar *device_id, GError **error)
@ -2353,9 +2350,9 @@ fu_engine_clear_results (FuEngine *self, const gchar *device_id, GError **error)
*
* Gets the historical state of a specific device operation.
*
* Returns: (transfer container): a #FwupdResult, or %NULL
* Returns: (transfer container): a #FwupdDevice, or %NULL
**/
FwupdResult *
FwupdDevice *
fu_engine_get_results (FuEngine *self, const gchar *device_id, GError **error)
{
FuDeviceItem *item;

View File

@ -66,7 +66,7 @@ GPtrArray *fu_engine_get_downgrades (FuEngine *self,
GPtrArray *fu_engine_get_upgrades (FuEngine *self,
const gchar *device_id,
GError **error);
FwupdResult *fu_engine_get_results (FuEngine *self,
FwupdDevice *fu_engine_get_results (FuEngine *self,
const gchar *device_id,
GError **error);
gboolean fu_engine_clear_results (FuEngine *self,

View File

@ -230,8 +230,8 @@ fu_main_result_array_to_variant (GPtrArray *results)
g_return_val_if_fail (results->len > 0, NULL);
g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
for (guint i = 0; i < results->len; i++) {
FwupdResult *result = g_ptr_array_index (results, i);
GVariant *tmp = fwupd_result_to_data (result, "{sa{sv}}");
FwupdDevice *result = g_ptr_array_index (results, i);
GVariant *tmp = fwupd_device_to_data (result, "{sa{sv}}");
g_variant_builder_add_value (&builder, tmp);
}
return g_variant_new ("(a{sa{sv}})", &builder);
@ -504,7 +504,7 @@ fu_main_daemon_method_call (GDBusConnection *connection, const gchar *sender,
}
if (g_strcmp0 (method_name, "GetResults") == 0) {
const gchar *device_id = NULL;
g_autoptr(FwupdResult) result = NULL;
g_autoptr(FwupdDevice) result = NULL;
g_variant_get (parameters, "(&s)", &device_id);
g_debug ("Called %s(%s)", method_name, device_id);
result = fu_engine_get_results (priv->engine, device_id, &error);
@ -512,7 +512,7 @@ fu_main_daemon_method_call (GDBusConnection *connection, const gchar *sender,
g_dbus_method_invocation_return_gerror (invocation, error);
return;
}
val = fwupd_result_to_data (result, "(a{sv})");
val = fwupd_device_to_data (result, "(a{sv})");
g_dbus_method_invocation_return_value (invocation, val);
return;
}