mirror of
https://git.proxmox.com/git/fwupd
synced 2025-06-05 03:37:10 +00:00

Although we supported other hashes than SHA1 (which is now moderately unsafe) we had to switch the metadata provider and daemon on some kind of flag day to using SHA256. Since that's somewhat impractical, just allow multiple checksums to be set on objects and just try to match whatever is given in preference order. This also means we can easily transition to other hash types in the future. The removed API was never present in a tarball release, so not an API break.
1669 lines
40 KiB
C
1669 lines
40 KiB
C
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
|
*
|
|
* Copyright (C) 2015-2016 Richard Hughes <richard@hughsie.com>
|
|
*
|
|
* Licensed under the GNU Lesser General Public License Version 2.1
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <glib-object.h>
|
|
#include <gio/gio.h>
|
|
#include <string.h>
|
|
|
|
#include "fwupd-common-private.h"
|
|
#include "fwupd-device-private.h"
|
|
#include "fwupd-enums-private.h"
|
|
#include "fwupd-error.h"
|
|
#include "fwupd-release-private.h"
|
|
#include "fwupd-result.h"
|
|
|
|
static void fwupd_result_finalize (GObject *object);
|
|
|
|
typedef struct {
|
|
gchar *unique_id;
|
|
FwupdTrustFlags update_trust_flags;
|
|
FwupdUpdateState update_state;
|
|
gchar *update_error;
|
|
FwupdDevice *device;
|
|
FwupdRelease *release;
|
|
} FwupdResultPrivate;
|
|
|
|
enum {
|
|
SIGNAL_LAST
|
|
};
|
|
|
|
enum {
|
|
PROP_0,
|
|
PROP_DEVICE_ID,
|
|
PROP_UNIQUE_ID,
|
|
PROP_LAST
|
|
};
|
|
|
|
G_DEFINE_TYPE_WITH_PRIVATE (FwupdResult, fwupd_result, G_TYPE_OBJECT)
|
|
#define GET_PRIVATE(o) (fwupd_result_get_instance_private (o))
|
|
|
|
/**
|
|
* fwupd_result_get_unique_id:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the unique ID that can be used for caching.
|
|
*
|
|
* Returns: the ID, or %NULL if unset
|
|
*
|
|
* Since: 0.7.3
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_unique_id (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return priv->unique_id;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_unique_id:
|
|
* @result: A #FwupdResult
|
|
* @unique_id: the result ID, e.g. "USB:foo"
|
|
*
|
|
* Sets the unique ID that can be used for caching.
|
|
*
|
|
* Since: 0.7.3
|
|
**/
|
|
void
|
|
fwupd_result_set_unique_id (FwupdResult *result, const gchar *unique_id)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
g_free (priv->unique_id);
|
|
priv->unique_id = g_strdup (unique_id);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_release:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the default release for this result.
|
|
*
|
|
* Returns: (transfer none): the #FwupdRelease
|
|
*
|
|
* Since: 0.9.3
|
|
**/
|
|
FwupdRelease *
|
|
fwupd_result_get_release (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return priv->release;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the default device for this result.
|
|
*
|
|
* Returns: (transfer none): the #FwupdDevice
|
|
*
|
|
* Since: 0.9.3
|
|
**/
|
|
FwupdDevice *
|
|
fwupd_result_get_device (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return priv->device;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_id:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the ID.
|
|
*
|
|
* Returns: the ID, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_id (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_id (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_id:
|
|
* @result: A #FwupdResult
|
|
* @device_id: the result ID, e.g. "USB:foo"
|
|
*
|
|
* Sets the ID.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_id (FwupdResult *result, const gchar *device_id)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_id (priv->device, device_id);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_guids:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the GUIDs.
|
|
*
|
|
* Returns: (element-type utf8) (transfer none): the GUIDs
|
|
*
|
|
* Since: 0.7.2
|
|
**/
|
|
GPtrArray *
|
|
fwupd_result_get_guids (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_guids (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_has_guid:
|
|
* @result: A #FwupdResult
|
|
* @guid: the GUID, e.g. "2082b5e0-7a64-478a-b1b2-e3404fab6dad"
|
|
*
|
|
* Finds out if the device has this specific GUID.
|
|
*
|
|
* Returns: %TRUE if the GUID is found
|
|
*
|
|
* Since: 0.7.2
|
|
**/
|
|
gboolean
|
|
fwupd_result_has_guid (FwupdResult *result, const gchar *guid)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), FALSE);
|
|
return fwupd_device_has_guid (priv->device, guid);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_add_guid:
|
|
* @result: A #FwupdResult
|
|
* @guid: the GUID, e.g. "2082b5e0-7a64-478a-b1b2-e3404fab6dad"
|
|
*
|
|
* Adds the GUID if it does not already exist.
|
|
*
|
|
* Since: 0.7.2
|
|
**/
|
|
void
|
|
fwupd_result_add_guid (FwupdResult *result, const gchar *guid)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_add_guid (priv->device, guid);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_guid_default:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the default GUID.
|
|
*
|
|
* Returns: the GUID, or %NULL if unset
|
|
*
|
|
* Since: 0.7.2
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_guid_default (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_guid_default (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_guid:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the GUID.
|
|
*
|
|
* Returns: the GUID, or %NULL if unset
|
|
*
|
|
* This function has been deprecated since 0.7.2.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_guid (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_guid_default (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_guid:
|
|
* @result: A #FwupdResult
|
|
* @guid: the GUID, e.g. "2082b5e0-7a64-478a-b1b2-e3404fab6dad"
|
|
*
|
|
* Sets the GUID.
|
|
*
|
|
* This function has been deprecated since 0.7.2.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_guid (FwupdResult *result, const gchar *guid)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
fwupd_device_add_guid (priv->device, guid);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_name:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device name.
|
|
*
|
|
* Returns: the device name, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_name (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_name (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_name:
|
|
* @result: A #FwupdResult
|
|
* @device_name: the device update_name, e.g. "ColorHug2"
|
|
*
|
|
* Sets the device update_name.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_name (FwupdResult *result, const gchar *device_name)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_name (priv->device, device_name);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_vendor:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device vendor.
|
|
*
|
|
* Returns: the device vendor, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_vendor (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_vendor (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_vendor:
|
|
* @result: A #FwupdResult
|
|
* @device_vendor: the description
|
|
*
|
|
* Sets the device vendor.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_vendor (FwupdResult *result, const gchar *device_vendor)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_vendor (priv->device, device_vendor);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_description:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device description in AppStream markup format.
|
|
*
|
|
* Returns: the device description, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_description (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_description (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_description:
|
|
* @result: A #FwupdResult
|
|
* @device_description: the description in AppStream markup format
|
|
*
|
|
* Sets the device description.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_description (FwupdResult *result, const gchar *device_description)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_description (priv->device, device_description);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_version:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device version.
|
|
*
|
|
* Returns: the device version, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_version (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_version (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_version:
|
|
* @result: A #FwupdResult
|
|
* @device_version: the device version, e.g. "1.2.3"
|
|
*
|
|
* Sets the device version.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_version (FwupdResult *result, const gchar *device_version)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_version (priv->device, device_version);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_version:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update version.
|
|
*
|
|
* Returns: the update version, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_version (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_version (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_version_lowest:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the lowest version of firmware the device will accept.
|
|
*
|
|
* Returns: the device version_lowest, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_version_lowest (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_version_lowest (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_version_lowest:
|
|
* @result: A #FwupdResult
|
|
* @device_version_lowest: the description
|
|
*
|
|
* Sets the lowest version of firmware the device will accept.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_version_lowest (FwupdResult *result, const gchar *device_version_lowest)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_version_lowest (priv->device, device_version_lowest);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_version_bootloader:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the version of the bootloader.
|
|
*
|
|
* Returns: the device version_bootloader, or %NULL if unset
|
|
*
|
|
* Since: 0.8.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_version_bootloader (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_version_bootloader (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_version_bootloader:
|
|
* @result: A #FwupdResult
|
|
* @device_version_bootloader: the description
|
|
*
|
|
* Sets the bootloader version.
|
|
*
|
|
* Since: 0.8.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_version_bootloader (FwupdResult *result,
|
|
const gchar *device_version_bootloader)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_version_bootloader (priv->device, device_version_bootloader);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_device_get_flashes_left:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the number of flash cycles left on the device
|
|
*
|
|
* Returns: the flash cycles left, or %NULL if unset
|
|
*
|
|
* Since: 0.7.1
|
|
**/
|
|
guint32
|
|
fwupd_result_get_device_flashes_left (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
|
|
return fwupd_device_get_flashes_left (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_device_set_flashes_left:
|
|
* @result: A #FwupdResult
|
|
* @flashes_left: the description
|
|
*
|
|
* Sets the number of flash cycles left on the device
|
|
*
|
|
* Since: 0.7.1
|
|
**/
|
|
void
|
|
fwupd_result_set_device_flashes_left (FwupdResult *result, guint32 flashes_left)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_flashes_left (priv->device, flashes_left);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_version:
|
|
* @result: A #FwupdResult
|
|
* @update_version: the update version, e.g. "1.2.4"
|
|
*
|
|
* Sets the update version.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_version (FwupdResult *result, const gchar *update_version)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_version (priv->release, update_version);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_filename:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update filename.
|
|
*
|
|
* Returns: the update filename, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_filename (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_filename (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_filename:
|
|
* @result: A #FwupdResult
|
|
* @update_filename: the update filename on disk
|
|
*
|
|
* Sets the update filename.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_filename (FwupdResult *result, const gchar *update_filename)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_filename (priv->release, update_filename);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_state:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update state.
|
|
*
|
|
* Returns: the update state, or %FWUPD_UPDATE_STATE_UNKNOWN if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
FwupdUpdateState
|
|
fwupd_result_get_update_state (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), FWUPD_UPDATE_STATE_UNKNOWN);
|
|
return priv->update_state;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_state:
|
|
* @result: A #FwupdResult
|
|
* @update_state: the state, e.g. %FWUPD_UPDATE_STATE_PENDING
|
|
*
|
|
* Sets the update state.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_state (FwupdResult *result, FwupdUpdateState update_state)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
priv->update_state = update_state;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_checksum:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update checksum.
|
|
*
|
|
* Returns: the update checksum, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_checksum (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
GPtrArray *checksums;
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
checksums = fwupd_release_get_checksums (priv->release);
|
|
for (guint i = 0; i < checksums->len; i++) {
|
|
const gchar *checksum = g_ptr_array_index (checksums, i);
|
|
if (fwupd_checksum_guess_kind (checksum) == G_CHECKSUM_SHA1)
|
|
return checksum;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_checksum:
|
|
* @result: A #FwupdResult
|
|
* @update_checksum: the update checksum
|
|
*
|
|
* Sets the update checksum.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_checksum (FwupdResult *result, const gchar *update_checksum)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_add_checksum (priv->release, update_checksum);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_checksum_kind:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update checkum kind.
|
|
*
|
|
* Returns: the #GChecksumType
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
GChecksumType
|
|
fwupd_result_get_update_checksum_kind (FwupdResult *result)
|
|
{
|
|
return G_CHECKSUM_SHA1;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_checksum_kind:
|
|
* @result: A #FwupdResult
|
|
* @checkum_kind: the checksum kind, e.g. %G_CHECKSUM_SHA1
|
|
*
|
|
* Sets the update checkum kind.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_checksum_kind (FwupdResult *result, GChecksumType checkum_kind)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_uri:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update uri.
|
|
*
|
|
* Returns: the update uri, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_uri (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_uri (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_uri:
|
|
* @result: A #FwupdResult
|
|
* @update_uri: the update URI
|
|
*
|
|
* Sets the update uri, i.e. where you can download the firmware from.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_uri (FwupdResult *result, const gchar *update_uri)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_uri (priv->release, update_uri);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_homepage:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update homepage.
|
|
*
|
|
* Returns: the update homepage, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_homepage (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_homepage (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_homepage:
|
|
* @result: A #FwupdResult
|
|
* @update_homepage: the description
|
|
*
|
|
* Sets the update homepage.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_homepage (FwupdResult *result, const gchar *update_homepage)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_homepage (priv->release, update_homepage);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_description:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update description in AppStream markup format.
|
|
*
|
|
* Returns: the update description, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_description (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_description (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_description:
|
|
* @result: A #FwupdResult
|
|
* @update_description: the update description in AppStream markup format
|
|
*
|
|
* Sets the update description.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_description (FwupdResult *result, const gchar *update_description)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_description (priv->release, update_description);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_id:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update id.
|
|
*
|
|
* Returns: the update id, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_id (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_appstream_id (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_id:
|
|
* @result: A #FwupdResult
|
|
* @update_id: the AppStream component ID, e.g. "org.hughski.ColorHug2.firmware"
|
|
*
|
|
* Sets the update id.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_id (FwupdResult *result, const gchar *update_id)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_appstream_id (priv->release, update_id);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_size:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update size.
|
|
*
|
|
* Returns: the update size in bytes, or 0 if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
guint64
|
|
fwupd_result_get_update_size (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
|
|
return fwupd_release_get_size (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_size:
|
|
* @result: A #FwupdResult
|
|
* @update_size: the update size in bytes
|
|
*
|
|
* Sets the update size.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_size (FwupdResult *result, guint64 update_size)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_size (priv->release, update_size);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_checksum:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device checksum.
|
|
*
|
|
* Returns: the device checksum, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_checksum (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
GPtrArray *checksums;
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
checksums = fwupd_device_get_checksums (priv->device);
|
|
for (guint i = 0; i < checksums->len; i++) {
|
|
const gchar *checksum = g_ptr_array_index (checksums, i);
|
|
if (fwupd_checksum_guess_kind (checksum) == G_CHECKSUM_SHA1)
|
|
return checksum;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_checksum:
|
|
* @result: A #FwupdResult
|
|
* @device_checksum: the device checksum
|
|
*
|
|
* Sets the device checksum, i.e. what is on the device right now.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_checksum (FwupdResult *result, const gchar *device_checksum)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_add_checksum (priv->device, device_checksum);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_checksum_kind:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device checkum kind.
|
|
*
|
|
* Returns: the #GChecksumType
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
GChecksumType
|
|
fwupd_result_get_device_checksum_kind (FwupdResult *result)
|
|
{
|
|
return G_CHECKSUM_SHA1;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_checksum_kind:
|
|
* @result: A #FwupdResult
|
|
* @checkum_kind: the checksum kind, e.g. %G_CHECKSUM_SHA1
|
|
*
|
|
* Sets the device checkum kind.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_checksum_kind (FwupdResult *result, GChecksumType checkum_kind)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_summary:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update summary.
|
|
*
|
|
* Returns: the update summary, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_summary (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_summary (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_summary:
|
|
* @result: A #FwupdResult
|
|
* @update_summary: the update one line summary
|
|
*
|
|
* Sets the update summary.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_summary (FwupdResult *result, const gchar *update_summary)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_summary (priv->release, update_summary);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_provider:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device provider.
|
|
*
|
|
* Returns: the device provider, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_device_provider (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_device_get_provider (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_provider:
|
|
* @result: A #FwupdResult
|
|
* @device_provider: the provider name, e.g. "colorhug"
|
|
*
|
|
* Sets the device provider.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_provider (FwupdResult *result, const gchar *device_provider)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_provider (priv->device, device_provider);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_error:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update error.
|
|
*
|
|
* Returns: the update error, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_error (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return priv->update_error;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_error:
|
|
* @result: A #FwupdResult
|
|
* @update_error: the update error string
|
|
*
|
|
* Sets the update error.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_error (FwupdResult *result, const gchar *update_error)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
g_free (priv->update_error);
|
|
priv->update_error = g_strdup (update_error);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_trust_flags:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update trust_flags.
|
|
*
|
|
* Returns: the #FwupdTrustFlags, or 0 if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
FwupdTrustFlags
|
|
fwupd_result_get_update_trust_flags (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
|
|
return priv->update_trust_flags;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_trust_flags:
|
|
* @result: A #FwupdResult
|
|
* @trust_flags: the trust flags, e.g. %FWUPD_TRUST_FLAG_PAYLOAD
|
|
*
|
|
* Sets the update trust_flags.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_trust_flags (FwupdResult *result, FwupdTrustFlags trust_flags)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
priv->update_trust_flags = trust_flags;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_vendor:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update vendor.
|
|
*
|
|
* Returns: the update vendor, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_vendor (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_vendor (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_vendor:
|
|
* @result: A #FwupdResult
|
|
* @update_vendor: the vendor name, e.g. "Hughski Limited"
|
|
*
|
|
* Sets the update vendor.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_vendor (FwupdResult *result, const gchar *update_vendor)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_vendor (priv->release, update_vendor);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_license:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update license.
|
|
*
|
|
* Returns: the update license, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_license (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_license (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_license:
|
|
* @result: A #FwupdResult
|
|
* @update_license: the description
|
|
*
|
|
* Sets the update license.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_license (FwupdResult *result, const gchar *update_license)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_license (priv->release, update_license);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_update_name:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the update name.
|
|
*
|
|
* Returns: the update name, or %NULL if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
const gchar *
|
|
fwupd_result_get_update_name (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
return fwupd_release_get_name (priv->release);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_update_name:
|
|
* @result: A #FwupdResult
|
|
* @update_name: the description
|
|
*
|
|
* Sets the update name.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_update_name (FwupdResult *result, const gchar *update_name)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_release_set_name (priv->release, update_name);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_flags:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets the device flags.
|
|
*
|
|
* Returns: the device flags, or 0 if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
guint64
|
|
fwupd_result_get_device_flags (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
|
|
return fwupd_device_get_flags (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_flags:
|
|
* @result: A #FwupdResult
|
|
* @device_flags: the device flags, e.g. %FWUPD_DEVICE_FLAG_REQUIRE_AC
|
|
*
|
|
* Sets the device flags.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_flags (FwupdResult *result, guint64 device_flags)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_flags (priv->device, device_flags);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_add_device_flag:
|
|
* @result: A #FwupdResult
|
|
* @flag: the #FwupdDeviceFlags
|
|
*
|
|
* Adds a specific device flag to the result.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_add_device_flag (FwupdResult *result, FwupdDeviceFlags flag)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_add_flag (priv->device, flag);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_remove_device_flag:
|
|
* @result: A #FwupdResult
|
|
* @flag: the #FwupdDeviceFlags
|
|
*
|
|
* Removes a specific device flag from the result.
|
|
*
|
|
* Since: 0.7.3
|
|
**/
|
|
void
|
|
fwupd_result_remove_device_flag (FwupdResult *result, FwupdDeviceFlags flag)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_remove_flag (priv->device, flag);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_has_device_flag:
|
|
* @result: A #FwupdResult
|
|
* @flag: the #FwupdDeviceFlags
|
|
*
|
|
* Finds if the device has a specific device flag.
|
|
*
|
|
* Returns: %TRUE if the flag is set
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
gboolean
|
|
fwupd_result_has_device_flag (FwupdResult *result, FwupdDeviceFlags flag)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), FALSE);
|
|
return fwupd_device_has_flag (priv->device, flag);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_created:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets when the result was device_created.
|
|
*
|
|
* Returns: the UNIX time, or 0 if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
guint64
|
|
fwupd_result_get_device_created (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
|
|
return fwupd_device_get_created (priv->device);
|
|
}
|
|
|
|
|
|
/**
|
|
* fwupd_result_set_device_created:
|
|
* @result: A #FwupdResult
|
|
* @device_created: the UNIX time
|
|
*
|
|
* Sets when the result was device_created.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_created (FwupdResult *result, guint64 device_created)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_created (priv->device, device_created);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_get_device_modified:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Gets when the result was device_modified.
|
|
*
|
|
* Returns: the UNIX time, or 0 if unset
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
guint64
|
|
fwupd_result_get_device_modified (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), 0);
|
|
return fwupd_device_get_modified (priv->device);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_set_device_modified:
|
|
* @result: A #FwupdResult
|
|
* @device_modified: the UNIX time
|
|
*
|
|
* Sets when the result was device_modified.
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
void
|
|
fwupd_result_set_device_modified (FwupdResult *result, guint64 device_modified)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
g_return_if_fail (FWUPD_IS_RESULT (result));
|
|
fwupd_device_set_modified (priv->device, device_modified);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_to_data:
|
|
* @result: A #FwupdResult
|
|
* @type_string: The Gvariant type string, e.g. "{sa{sv}}" or "(a{sv})"
|
|
*
|
|
* Creates a GVariant from the result data.
|
|
*
|
|
* Returns: the GVariant, or %NULL for error
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
GVariant *
|
|
fwupd_result_to_data (FwupdResult *result, const gchar *type_string)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
GVariantBuilder builder;
|
|
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
g_return_val_if_fail (type_string != NULL, NULL);
|
|
|
|
/* create an array with all the metadata in */
|
|
g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
|
|
if (priv->unique_id != NULL) {
|
|
g_variant_builder_add (&builder, "{sv}",
|
|
FWUPD_RESULT_KEY_UNIQUE_ID,
|
|
g_variant_new_string (priv->unique_id));
|
|
}
|
|
if (priv->update_error != NULL) {
|
|
g_variant_builder_add (&builder, "{sv}",
|
|
FWUPD_RESULT_KEY_UPDATE_ERROR,
|
|
g_variant_new_string (priv->update_error));
|
|
}
|
|
if (priv->update_state != FWUPD_UPDATE_STATE_UNKNOWN) {
|
|
g_variant_builder_add (&builder, "{sv}",
|
|
FWUPD_RESULT_KEY_UPDATE_STATE,
|
|
g_variant_new_uint32 (priv->update_state));
|
|
}
|
|
if (priv->update_trust_flags != 0) {
|
|
g_variant_builder_add (&builder, "{sv}",
|
|
FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS,
|
|
g_variant_new_uint64 (priv->update_trust_flags));
|
|
}
|
|
|
|
/* device and release objects */
|
|
fwupd_release_to_variant_builder (priv->release, &builder);
|
|
fwupd_device_to_variant_builder (priv->device, &builder);
|
|
|
|
/* supported types */
|
|
if (g_strcmp0 (type_string, "{sa{sv}}") == 0) {
|
|
const gchar *device_id = fwupd_device_get_id (priv->device);
|
|
if (device_id == NULL)
|
|
device_id = "";
|
|
return g_variant_new ("{sa{sv}}", device_id, &builder);
|
|
}
|
|
if (g_strcmp0 (type_string, "(a{sv})") == 0)
|
|
return g_variant_new ("(a{sv})", &builder);
|
|
return NULL;
|
|
}
|
|
|
|
static void
|
|
fwupd_result_from_key_value (FwupdResult *result, const gchar *key, GVariant *value)
|
|
{
|
|
if (g_strcmp0 (key, FWUPD_RESULT_KEY_UNIQUE_ID) == 0) {
|
|
fwupd_result_set_unique_id (result, g_variant_get_string (value, NULL));
|
|
return;
|
|
}
|
|
if (g_strcmp0 (key, FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS) == 0) {
|
|
fwupd_result_set_update_trust_flags (result, g_variant_get_uint64 (value));
|
|
return;
|
|
}
|
|
if (g_strcmp0 (key, FWUPD_RESULT_KEY_UPDATE_STATE) == 0) {
|
|
/* old daemon version and new client */
|
|
if (g_strcmp0 (g_variant_get_type_string (value), "s") == 0) {
|
|
FwupdUpdateState tmp;
|
|
tmp = fwupd_update_state_from_string (g_variant_get_string (value, NULL));
|
|
fwupd_result_set_update_state (result, tmp);
|
|
} else {
|
|
fwupd_result_set_update_state (result, g_variant_get_uint32 (value));
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
static void
|
|
fwupd_pad_kv_str (GString *str, const gchar *key, const gchar *value)
|
|
{
|
|
/* ignore */
|
|
if (key == NULL || value == NULL)
|
|
return;
|
|
g_string_append_printf (str, " %s: ", key);
|
|
for (gsize i = strlen (key); i < 20; i++)
|
|
g_string_append (str, " ");
|
|
g_string_append_printf (str, "%s\n", value);
|
|
}
|
|
|
|
static void
|
|
fwupd_pad_kv_ups (GString *str, const gchar *key, FwupdUpdateState value)
|
|
{
|
|
if (value == FWUPD_UPDATE_STATE_UNKNOWN)
|
|
return;
|
|
fwupd_pad_kv_str (str, key, fwupd_update_state_to_string (value));
|
|
}
|
|
|
|
static void
|
|
fwupd_pad_kv_tfl (GString *str, const gchar *key, FwupdTrustFlags trust_flags)
|
|
{
|
|
guint i;
|
|
g_autoptr(GString) tmp = NULL;
|
|
|
|
tmp = g_string_new ("");
|
|
for (i = 1; i < FWUPD_TRUST_FLAG_LAST; i *= 2) {
|
|
if ((trust_flags & i) == 0)
|
|
continue;
|
|
g_string_append_printf (tmp, "%s|",
|
|
fwupd_trust_flag_to_string (i));
|
|
}
|
|
if (tmp->len == 0) {
|
|
g_string_append (tmp, fwupd_trust_flag_to_string (0));
|
|
} else {
|
|
g_string_truncate (tmp, tmp->len - 1);
|
|
}
|
|
fwupd_pad_kv_str (str, key, tmp->str);
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_to_string:
|
|
* @result: A #FwupdResult
|
|
*
|
|
* Builds a text representation of the object.
|
|
*
|
|
* Returns: text, or %NULL for invalid
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
gchar *
|
|
fwupd_result_to_string (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
GString *str;
|
|
g_autofree gchar *device_str = NULL;
|
|
g_autofree gchar *release_str = NULL;
|
|
|
|
g_return_val_if_fail (FWUPD_IS_RESULT (result), NULL);
|
|
|
|
str = g_string_new ("");
|
|
|
|
/* not set when using GetDetails */
|
|
if (fwupd_device_get_name (priv->device) != NULL)
|
|
g_string_append_printf (str, "%s\n", fwupd_device_get_name (priv->device));
|
|
else
|
|
g_string_append_printf (str, "%s\n", "Unknown Device");
|
|
|
|
/* device */
|
|
fwupd_pad_kv_str (str, FWUPD_RESULT_KEY_UNIQUE_ID, priv->unique_id);
|
|
fwupd_pad_kv_ups (str, FWUPD_RESULT_KEY_UPDATE_STATE, priv->update_state);
|
|
|
|
/* device and release */
|
|
device_str = fwupd_device_to_string (priv->device);
|
|
g_string_append (str, device_str);
|
|
release_str = fwupd_release_to_string (priv->release);
|
|
g_string_append (str, release_str);
|
|
if (fwupd_release_get_version (priv->release) != NULL)
|
|
fwupd_pad_kv_tfl (str, FWUPD_RESULT_KEY_UPDATE_TRUST_FLAGS, priv->update_trust_flags);
|
|
|
|
return g_string_free (str, FALSE);
|
|
}
|
|
|
|
static void
|
|
fwupd_result_get_property (GObject *object, guint prop_id,
|
|
GValue *value, GParamSpec *pspec)
|
|
{
|
|
FwupdResult *result = FWUPD_RESULT (object);
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
|
|
switch (prop_id) {
|
|
case PROP_DEVICE_ID:
|
|
g_value_set_string (value, fwupd_device_get_id (priv->device));
|
|
break;
|
|
case PROP_UNIQUE_ID:
|
|
g_value_set_string (value, priv->unique_id);
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
fwupd_result_set_property (GObject *object, guint prop_id,
|
|
const GValue *value, GParamSpec *pspec)
|
|
{
|
|
FwupdResult *result = FWUPD_RESULT (object);
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
|
|
switch (prop_id) {
|
|
case PROP_DEVICE_ID:
|
|
fwupd_device_set_id (priv->device, g_value_get_string (value));
|
|
break;
|
|
case PROP_UNIQUE_ID:
|
|
g_free (priv->unique_id);
|
|
priv->unique_id = g_strdup (g_value_get_string (value));
|
|
break;
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void
|
|
fwupd_result_class_init (FwupdResultClass *klass)
|
|
{
|
|
GParamSpec *pspec;
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
object_class->finalize = fwupd_result_finalize;
|
|
object_class->get_property = fwupd_result_get_property;
|
|
object_class->set_property = fwupd_result_set_property;
|
|
|
|
/**
|
|
* FwupdResult:device-id:
|
|
*
|
|
* The device ID for this result.
|
|
*
|
|
* Since: 0.7.0
|
|
*/
|
|
pspec = g_param_spec_string ("device-id", NULL, NULL,
|
|
NULL,
|
|
G_PARAM_READWRITE);
|
|
g_object_class_install_property (object_class, PROP_DEVICE_ID, pspec);
|
|
}
|
|
|
|
static void
|
|
fwupd_result_init (FwupdResult *result)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
priv->release = fwupd_release_new ();
|
|
priv->device = fwupd_device_new ();
|
|
}
|
|
|
|
static void
|
|
fwupd_result_finalize (GObject *object)
|
|
{
|
|
FwupdResult *result = FWUPD_RESULT (object);
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
|
|
g_object_unref (priv->device);
|
|
g_object_unref (priv->release);
|
|
g_free (priv->unique_id);
|
|
g_free (priv->update_error);
|
|
|
|
G_OBJECT_CLASS (fwupd_result_parent_class)->finalize (object);
|
|
}
|
|
|
|
static void
|
|
fwupd_result_from_variant_iter (FwupdResult *result, GVariantIter *iter)
|
|
{
|
|
FwupdResultPrivate *priv = GET_PRIVATE (result);
|
|
GVariant *value;
|
|
const gchar *key;
|
|
while (g_variant_iter_next (iter, "{&sv}", &key, &value)) {
|
|
fwupd_result_from_key_value (result, key, value);
|
|
fwupd_release_from_key_value (priv->release, key, value);
|
|
fwupd_device_from_key_value (priv->device, key, value);
|
|
g_variant_unref (value);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_new_from_data:
|
|
* @data: a #GVariant
|
|
*
|
|
* Creates a new result using packed data.
|
|
*
|
|
* Returns: a new #FwupdResult, or %NULL if @data was invalid
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
FwupdResult *
|
|
fwupd_result_new_from_data (GVariant *data)
|
|
{
|
|
FwupdResult *res = NULL;
|
|
const gchar *id;
|
|
const gchar *type_string;
|
|
g_autoptr(GVariantIter) iter = NULL;
|
|
|
|
/* format from GetDetails */
|
|
type_string = g_variant_get_type_string (data);
|
|
if (g_strcmp0 (type_string, "(a{sv})") == 0) {
|
|
res = fwupd_result_new ();
|
|
g_variant_get (data, "(a{sv})", &iter);
|
|
fwupd_result_from_variant_iter (res, iter);
|
|
} else if (g_strcmp0 (type_string, "{sa{sv}}") == 0) {
|
|
res = fwupd_result_new ();
|
|
g_variant_get (data, "{&sa{sv}}", &id, &iter);
|
|
fwupd_device_set_id (fwupd_result_get_device (res), id);
|
|
fwupd_result_from_variant_iter (res, iter);
|
|
} else {
|
|
g_warning ("type %s not known", type_string);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
/**
|
|
* fwupd_result_new:
|
|
*
|
|
* Creates a new result.
|
|
*
|
|
* Returns: a new #FwupdResult
|
|
*
|
|
* Since: 0.7.0
|
|
**/
|
|
FwupdResult *
|
|
fwupd_result_new (void)
|
|
{
|
|
FwupdResult *result;
|
|
result = g_object_new (FWUPD_TYPE_RESULT, NULL);
|
|
return FWUPD_RESULT (result);
|
|
}
|