summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/tests/firmware/2_0_0/firmware.inf5
-rw-r--r--data/tests/firmware/2_0_1/firmware.inf4
-rw-r--r--data/tests/firmware/2_0_1/firmware.metainfo.xml2
-rw-r--r--data/tests/firmware/2_0_2/firmware.inf4
-rw-r--r--data/tests/firmware/2_0_2/firmware.metainfo.xml5
-rw-r--r--libappstream-builder/asb-self-test.c66
-rw-r--r--libappstream-builder/plugins/asb-plugin-appdata.c34
-rw-r--r--libappstream-glib/as-app-inf.c59
-rw-r--r--libappstream-glib/as-app-validate.c5
-rw-r--r--libappstream-glib/as-app.c21
-rw-r--r--libappstream-glib/as-provide.c36
-rw-r--r--libappstream-glib/as-provide.h10
12 files changed, 182 insertions, 69 deletions
diff --git a/data/tests/firmware/2_0_0/firmware.inf b/data/tests/firmware/2_0_0/firmware.inf
index ce4eeef..5c38614 100644
--- a/data/tests/firmware/2_0_0/firmware.inf
+++ b/data/tests/firmware/2_0_0/firmware.inf
@@ -4,6 +4,8 @@
Class=Firmware
ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
DriverVer=03/01/2015,2.0.0
+Provider=%Provider%
+AppstreamId=com.hughski.ColorHug2.firmware
[Firmware_CopyFiles]
firmware.bin
@@ -14,7 +16,6 @@ HKR,,FirmwareVersion,%REG_DWORD%,0x0000000
HKR,,FirmwareFilename,,firmware.bin
[Strings]
-Provider = "Hughski"
-MfgName = "Hughski Limited"
+Provider = "Hughski Limited"
FirmwareDesc = "ColorHug Firmware"
DiskName = "Firmware for the ColorHug Colorimeter"
diff --git a/data/tests/firmware/2_0_1/firmware.inf b/data/tests/firmware/2_0_1/firmware.inf
index ca6ca8b..f9ce8f4 100644
--- a/data/tests/firmware/2_0_1/firmware.inf
+++ b/data/tests/firmware/2_0_1/firmware.inf
@@ -3,6 +3,7 @@
[Version]
Class=Firmware
ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
+Provider=%Provider%
[Firmware_CopyFiles]
firmware.bin
@@ -13,7 +14,6 @@ HKR,,FirmwareVersion,%REG_DWORD%,0x0000000
HKR,,FirmwareFilename,,firmware.bin
[Strings]
-Provider = "Hughski"
-MfgName = "Hughski Limited"
+Provider = "Hughski Limited"
FirmwareDesc = "ColorHug Firmware"
DiskName = "Firmware for the ColorHug Colorimeter"
diff --git a/data/tests/firmware/2_0_1/firmware.metainfo.xml b/data/tests/firmware/2_0_1/firmware.metainfo.xml
index ba448b6..7097762 100644
--- a/data/tests/firmware/2_0_1/firmware.metainfo.xml
+++ b/data/tests/firmware/2_0_1/firmware.metainfo.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2015 Richard Hughes <richard@hughsie.com> -->
<component type="firmware">
- <id>84f40464-9272-4ef7-9399-cd95f12da696</id>
+ <id>com.hughski.ColorHug2.firmware</id>
<name>ColorHug Firmware</name>
<summary>Firmware for the ColorHug Colorimeter</summary>
<description>
diff --git a/data/tests/firmware/2_0_2/firmware.inf b/data/tests/firmware/2_0_2/firmware.inf
index fe604b7..28a21b5 100644
--- a/data/tests/firmware/2_0_2/firmware.inf
+++ b/data/tests/firmware/2_0_2/firmware.inf
@@ -4,6 +4,7 @@
Class=Firmware
ClassGuid={f2e7dd72-6468-4e36-b6f1-6488f42c1b52}
DriverVer=03/03/2015,2.0.2
+Provider=%Provider%
[Firmware_CopyFiles]
firmware.bin
@@ -14,7 +15,6 @@ HKR,,FirmwareVersion,%REG_DWORD%,0x0000000
HKR,,FirmwareFilename,,firmware.bin
[Strings]
-Provider = "Hughski"
-MfgName = "Hughski Limited"
+Provider = "Hughski Limited"
FirmwareDesc = "ColorHug Firmware"
DiskName = "Firmware for the ColorHug Colorimeter"
diff --git a/data/tests/firmware/2_0_2/firmware.metainfo.xml b/data/tests/firmware/2_0_2/firmware.metainfo.xml
index 91f2941..c459bd2 100644
--- a/data/tests/firmware/2_0_2/firmware.metainfo.xml
+++ b/data/tests/firmware/2_0_2/firmware.metainfo.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2015 Richard Hughes <richard@hughsie.com> -->
<component type="firmware">
- <id>84f40464-9272-4ef7-9399-cd95f12da696</id>
+ <id>com.hughski.ColorHug2.firmware</id>
<name>ColorHug Firmware</name>
<summary>Firmware for the ColorHug Colorimeter</summary>
<description>
@@ -10,6 +10,9 @@
adds new features.
</p>
</description>
+ <provides>
+ <firmware type="flashed">84f40464-9272-4ef7-9399-cd95f12da696</firmware>
+ </provides>
<url type="homepage">http://www.hughski.com/</url>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0+</project_license>
diff --git a/libappstream-builder/asb-self-test.c b/libappstream-builder/asb-self-test.c
index e48dd83..45e7092 100644
--- a/libappstream-builder/asb-self-test.c
+++ b/libappstream-builder/asb-self-test.c
@@ -416,30 +416,6 @@ asb_test_context_test_func (AsbTestContextMode mode)
xml = as_store_to_xml (store, AS_NODE_TO_XML_FLAG_FORMAT_MULTILINE);
expected_xml =
"<components version=\"0.9\" builder_id=\"appstream-glib:4\" origin=\"asb-self-test\">\n"
- "<component type=\"firmware\">\n"
- "<id>84f40464-9272-4ef7-9399-cd95f12da696</id>\n"
- "<name>ColorHug Firmware</name>\n"
- "<summary>Firmware for the ColorHug Colorimeter</summary>\n"
- "<developer_name>Hughski</developer_name>\n"
- "<description><p>Updating the firmware on your ColorHug device "
- "improves performance and adds new features.</p></description>\n"
- "<icon type=\"stock\">application-x-executable</icon>\n"
- "<url type=\"homepage\">http://www.hughski.com/</url>\n"
- "<releases>\n"
- "<release version=\"2.0.2\" timestamp=\"1424116753\">\n"
- "<location>http://www.hughski.com/downloads/colorhug2/firmware/colorhug-2.0.2.cab</location>\n"
- "<checksum filename=\"colorhug-als-2.0.2.cab\" target=\"container\" type=\"sha1\">522aeefdcc7f27658d73de76107fe62550c61868</checksum>\n"
- "<checksum filename=\"firmware.bin\" target=\"content\" type=\"sha1\">767a8a7b8a7b350b513f57761204b4aaa657aa44</checksum>\n"
- "<description><p>This unstable release adds the following features:</p>"
- "<ul><li>Add TakeReadingArray to enable panel latency measurements</li>"
- "<li>Speed up the auto-scaled measurements considerably, using 256ms "
- "as the smallest sample duration</li></ul></description>\n"
- "</release>\n"
- "</releases>\n"
- "<metadata>\n"
- "<value key=\"X-CacheID\">colorhug-als-2.0.2.cab</value>\n"
- "</metadata>\n"
- "</component>\n"
"<component type=\"font\">\n"
"<id>Liberation</id>\n"
"<pkgname>font</pkgname>\n"
@@ -541,6 +517,33 @@ asb_test_context_test_func (AsbTestContextMode mode)
"<value key=\"X-CacheID\">app-1-1.fc21.x86_64.rpm</value>\n"
"</metadata>\n"
"</component>\n"
+ "<component type=\"firmware\">\n"
+ "<id>com.hughski.ColorHug2.firmware</id>\n"
+ "<name>ColorHug Firmware</name>\n"
+ "<summary>Firmware for the ColorHug Colorimeter</summary>\n"
+ "<developer_name>Hughski Limited</developer_name>\n"
+ "<description><p>Updating the firmware on your ColorHug device "
+ "improves performance and adds new features.</p></description>\n"
+ "<icon type=\"stock\">application-x-executable</icon>\n"
+ "<url type=\"homepage\">http://www.hughski.com/</url>\n"
+ "<releases>\n"
+ "<release version=\"2.0.2\" timestamp=\"1424116753\">\n"
+ "<location>http://www.hughski.com/downloads/colorhug2/firmware/colorhug-2.0.2.cab</location>\n"
+ "<checksum filename=\"colorhug-als-2.0.2.cab\" target=\"container\" type=\"sha1\">6301e24ae5fb2aa73c336fd40a5d2f1835afe088</checksum>\n"
+ "<checksum filename=\"firmware.bin\" target=\"content\" type=\"sha1\">767a8a7b8a7b350b513f57761204b4aaa657aa44</checksum>\n"
+ "<description><p>This unstable release adds the following features:</p>"
+ "<ul><li>Add TakeReadingArray to enable panel latency measurements</li>"
+ "<li>Speed up the auto-scaled measurements considerably, using 256ms "
+ "as the smallest sample duration</li></ul></description>\n"
+ "</release>\n"
+ "</releases>\n"
+ "<provides>\n"
+ "<firmware type=\"flashed\">84f40464-9272-4ef7-9399-cd95f12da696</firmware>\n"
+ "</provides>\n"
+ "<metadata>\n"
+ "<value key=\"X-CacheID\">colorhug-als-2.0.2.cab</value>\n"
+ "</metadata>\n"
+ "</component>\n"
"<component type=\"desktop\">\n"
"<id>valid1.desktop</id>\n"
"<pkgname>composite</pkgname>\n"
@@ -912,7 +915,7 @@ asb_test_firmware_func (void)
g_assert_no_error (error);
g_assert (ret);
g_assert_cmpint (as_store_get_size (store), ==, 1);
- app = as_store_get_app_by_id (store, "84f40464-9272-4ef7-9399-cd95f12da696");
+ app = as_store_get_app_by_id (store, "com.hughski.ColorHug2.firmware");
g_assert (app != NULL);
/* check it matches what we expect */
@@ -920,10 +923,10 @@ asb_test_firmware_func (void)
expected_xml =
"<components version=\"0.9\" origin=\"asb-self-test\">\n"
"<component type=\"firmware\">\n"
- "<id>84f40464-9272-4ef7-9399-cd95f12da696</id>\n"
+ "<id>com.hughski.ColorHug2.firmware</id>\n"
"<name>ColorHug Firmware</name>\n"
"<summary>Firmware for the ColorHug Colorimeter</summary>\n"
- "<developer_name>Hughski</developer_name>\n"
+ "<developer_name>Hughski Limited</developer_name>\n"
"<description><p>Updating the firmware on your ColorHug device "
"improves performance and adds new features.</p></description>\n"
"<icon type=\"stock\">application-x-executable</icon>\n"
@@ -931,7 +934,7 @@ asb_test_firmware_func (void)
"<releases>\n"
"<release version=\"2.0.2\" timestamp=\"1424116753\">\n"
"<location>http://www.hughski.com/downloads/colorhug2/firmware/colorhug-2.0.2.cab</location>\n"
- "<checksum filename=\"colorhug-als-2.0.2.cab\" target=\"container\" type=\"sha1\">522aeefdcc7f27658d73de76107fe62550c61868</checksum>\n"
+ "<checksum filename=\"colorhug-als-2.0.2.cab\" target=\"container\" type=\"sha1\">6301e24ae5fb2aa73c336fd40a5d2f1835afe088</checksum>\n"
"<checksum filename=\"firmware.bin\" target=\"content\" type=\"sha1\">767a8a7b8a7b350b513f57761204b4aaa657aa44</checksum>\n"
"<description><p>This unstable release adds the following features:</p>"
"<ul><li>Add TakeReadingArray to enable panel latency measurements</li>"
@@ -940,7 +943,7 @@ asb_test_firmware_func (void)
"</release>\n"
"<release version=\"2.0.1\" timestamp=\"1424116753\">\n"
"<location>http://www.hughski.com/downloads/colorhug2/firmware/colorhug-2.0.1.cab</location>\n"
- "<checksum filename=\"colorhug-als-2.0.1.cab\" target=\"container\" type=\"sha1\">c61e55ccb2ce8de401550a731b0f364a18cb2639</checksum>\n"
+ "<checksum filename=\"colorhug-als-2.0.1.cab\" target=\"container\" type=\"sha1\">7d4cab8775213cbd223a4a3b236618ced0af9447</checksum>\n"
"<checksum filename=\"firmware.bin\" target=\"content\" type=\"sha1\">767a8a7b8a7b350b513f57761204b4aaa657aa44</checksum>\n"
"<description><p>This unstable release adds the following features:</p>"
"<ul><li>Use TakeReadings() to do a quick non-adaptive measurement</li>"
@@ -948,10 +951,13 @@ asb_test_firmware_func (void)
"sane</li></ul></description>\n"
"</release>\n"
"<release version=\"2.0.0\" timestamp=\"1425168000\">\n"
- "<checksum filename=\"colorhug-als-2.0.0.cab\" target=\"container\" type=\"sha1\">186ad37fe3e63acc843b8727ac1add4ac15f0bf8</checksum>\n"
+ "<checksum filename=\"colorhug-als-2.0.0.cab\" target=\"container\" type=\"sha1\">d7b9ae5b36029de606c9b047c229d9c8f5e3807c</checksum>\n"
"<checksum filename=\"firmware.bin\" target=\"content\" type=\"sha1\">767a8a7b8a7b350b513f57761204b4aaa657aa44</checksum>\n"
"</release>\n"
"</releases>\n"
+ "<provides>\n"
+ "<firmware type=\"flashed\">84f40464-9272-4ef7-9399-cd95f12da696</firmware>\n"
+ "</provides>\n"
"</component>\n"
"</components>\n";
ret = asb_test_compare_lines (xml->str, expected_xml, &error);
diff --git a/libappstream-builder/plugins/asb-plugin-appdata.c b/libappstream-builder/plugins/asb-plugin-appdata.c
index cfe57b9..15a6974 100644
--- a/libappstream-builder/plugins/asb-plugin-appdata.c
+++ b/libappstream-builder/plugins/asb-plugin-appdata.c
@@ -126,6 +126,28 @@ asb_plugin_process_filename (AsbPlugin *plugin,
as_app_get_id (AS_APP (app)));
}
+ /* overwrite the app ID with the metadata one for firmware */
+ if (as_app_get_id_kind (appdata) == AS_ID_KIND_FIRMWARE) {
+ old = as_app_get_id (AS_APP (app));
+ if (old != NULL) {
+ asb_package_log (asb_app_get_package (app),
+ ASB_PACKAGE_LOG_LEVEL_DEBUG,
+ "renaming ID %s -> %s",
+ old, as_app_get_id (AS_APP (appdata)));
+ }
+ as_app_set_id (AS_APP (app), as_app_get_id (AS_APP (appdata)));
+ }
+
+ /* add provide if missing */
+ if (as_app_get_id_kind (appdata) == AS_ID_KIND_FIRMWARE &&
+ as_utils_guid_is_valid (tmp)) {
+ _cleanup_object_unref_ AsProvide *provide = NULL;
+ provide = as_provide_new ();
+ as_provide_set_kind (provide, AS_PROVIDE_KIND_FIRMWARE_FLASHED);
+ as_provide_set_value (provide, tmp);
+ as_app_add_provide (AS_APP (app), provide);
+ }
+
/* check license */
tmp = as_app_get_metadata_license (appdata);
if (tmp == NULL) {
@@ -252,6 +274,11 @@ asb_plugin_process_filename (AsbPlugin *plugin,
as_app_add_metadata (AS_APP (app), key, tmp);
}
+ /* add developer name */
+ tmp = as_app_get_developer_name (AS_APP (appdata), NULL);
+ if (tmp != NULL)
+ as_app_set_developer_name (AS_APP (app), NULL, tmp);
+
/* add releases */
array = as_app_get_releases (appdata);
for (i = 0; i < array->len; i++) {
@@ -259,6 +286,13 @@ asb_plugin_process_filename (AsbPlugin *plugin,
as_app_add_release (AS_APP (app), rel);
}
+ /* add provides */
+ array = as_app_get_provides (appdata);
+ for (i = 0; i < array->len; i++) {
+ AsProvide *pr = g_ptr_array_index (array, i);
+ as_app_add_provide (AS_APP (app), pr);
+ }
+
/* log updateinfo */
tmp = as_app_get_update_contact (AS_APP (appdata));
if (tmp != NULL) {
diff --git a/libappstream-glib/as-app-inf.c b/libappstream-glib/as-app-inf.c
index d50fdee..9389108 100644
--- a/libappstream-glib/as-app-inf.c
+++ b/libappstream-glib/as-app-inf.c
@@ -57,6 +57,7 @@ as_app_parse_inf_file (AsApp *app,
{
guint64 timestamp;
_cleanup_error_free_ GError *error_local = NULL;
+ _cleanup_free_ gchar *appstream_id = NULL;
_cleanup_free_ gchar *catalog_basename = NULL;
_cleanup_free_ gchar *class_guid = NULL;
_cleanup_free_ gchar *class_guid_unsafe = NULL;
@@ -65,7 +66,7 @@ as_app_parse_inf_file (AsApp *app,
_cleanup_free_ gchar *filename_full = NULL;
_cleanup_free_ gchar *firmware_basename = NULL;
_cleanup_free_ gchar *guid = NULL;
- _cleanup_free_ gchar *id = NULL;
+ _cleanup_free_ gchar *provide_guid = NULL;
_cleanup_free_ gchar *location_checksum = NULL;
_cleanup_free_ gchar *name = NULL;
_cleanup_free_ gchar *srcpkg = NULL;
@@ -117,32 +118,50 @@ as_app_parse_inf_file (AsApp *app,
}
class_guid = as_app_parse_inf_sanitize_guid (class_guid_unsafe);
if (g_strcmp0 (class_guid, AS_APP_INF_CLASS_GUID_FIRMWARE) != 0) {
- g_debug ("ClassGuid is '%s', not '%s', so using as an ID",
- class_guid, AS_APP_INF_CLASS_GUID_FIRMWARE);
- as_app_set_id (app, class_guid);
+ g_set_error (error,
+ AS_APP_ERROR,
+ AS_APP_ERROR_INVALID_TYPE,
+ "ClassGuid is invalid, expected %s, got %s",
+ AS_APP_INF_CLASS_GUID_FIRMWARE,
+ class_guid);
+ return FALSE;
+ }
+
+ /* get the ESRT GUID */
+ guid = g_key_file_get_string (kf,
+ "Firmware_AddReg",
+ "HKR_FirmwareId",
+ NULL);
+ if (guid == NULL) {
+ g_set_error_literal (error,
+ AS_APP_ERROR,
+ AS_APP_ERROR_INVALID_TYPE,
+ "HKR->FirmwareId missing from [Firmware_AddReg]");
+ return FALSE;
+ }
+
+ /* add the GUID as a provide */
+ provide_guid = as_app_parse_inf_sanitize_guid (guid);
+ if (provide_guid != NULL) {
+ provide = as_provide_new ();
+ as_provide_set_kind (provide, AS_PROVIDE_KIND_FIRMWARE_FLASHED);
+ as_provide_set_value (provide, provide_guid);
+ as_app_add_provide (AS_APP (app), provide);
+ }
+
+ /* get the ID, which might be missing */
+ appstream_id = g_key_file_get_string (kf, "Version", "AppstreamId", NULL);
+ if (appstream_id != NULL) {
+ g_debug ("Using AppstreamId as ID");
+ as_app_set_id (app, appstream_id);
} else {
- /* get the ESRT GUID */
- guid = g_key_file_get_string (kf,
- "Firmware_AddReg",
- "HKR_FirmwareId",
- NULL);
- if (guid == NULL) {
- g_set_error_literal (error,
- AS_APP_ERROR,
- AS_APP_ERROR_INVALID_TYPE,
- "HKR->FirmwareId missing from [Firmware_AddReg]");
- return FALSE;
- }
- id = as_app_parse_inf_sanitize_guid (guid);
- as_app_set_id (app, id);
+ as_app_set_id (app, provide_guid);
}
/* get vendor */
vendor = g_key_file_get_string (kf, "Version", "Provider", NULL);
if (vendor == NULL)
vendor = g_key_file_get_string (kf, "Version", "MfgName", NULL);
- if (vendor == NULL) /* FIXME: is a hack */
- vendor = g_key_file_get_string (kf, "Strings", "Provider", NULL);
if (vendor != NULL)
as_app_set_developer_name (app, NULL, vendor);
diff --git a/libappstream-glib/as-app-validate.c b/libappstream-glib/as-app-validate.c
index 351c7f9..1d8bc41 100644
--- a/libappstream-glib/as-app-validate.c
+++ b/libappstream-glib/as-app-validate.c
@@ -1106,10 +1106,13 @@ as_app_validate (AsApp *app, AsAppValidateFlags flags, GError **error)
"<id> has invalid type attribute");
break;
+ case AS_ID_KIND_FIRMWARE:
+ if (g_str_has_suffix (id, ".firmware"))
+ ret = TRUE;
+ break;
case AS_ID_KIND_FONT:
case AS_ID_KIND_ADDON:
case AS_ID_KIND_SOURCE:
- case AS_ID_KIND_FIRMWARE:
/* anything goes */
ret = TRUE;
default:
diff --git a/libappstream-glib/as-app.c b/libappstream-glib/as-app.c
index 38ac45a..2a6602c 100644
--- a/libappstream-glib/as-app.c
+++ b/libappstream-glib/as-app.c
@@ -2192,6 +2192,20 @@ void
as_app_add_provide (AsApp *app, AsProvide *provide)
{
AsAppPrivate *priv = GET_PRIVATE (app);
+ AsProvide *tmp;
+ guint i;
+
+ /* check for duplicates */
+ if (priv->trust_flags & AS_APP_TRUST_FLAG_CHECK_DUPLICATES) {
+ for (i = 0; i < priv->provides->len; i++) {
+ tmp = g_ptr_array_index (priv->provides, i);
+ if (as_provide_get_kind (tmp) == as_provide_get_kind (provide) &&
+ g_strcmp0 (as_provide_get_value (tmp),
+ as_provide_get_value (provide)) == 0)
+ return;
+ }
+ }
+
g_ptr_array_add (priv->provides, g_object_ref (provide));
}
@@ -2656,6 +2670,7 @@ as_app_subsume_private (AsApp *app, AsApp *donor, AsAppSubsumeFlags flags)
AsAppPrivate *papp = GET_PRIVATE (app);
AsBundle *bundle;
AsScreenshot *ss;
+ AsProvide *pr;
const gchar *tmp;
const gchar *key;
gboolean overwrite;
@@ -2737,6 +2752,12 @@ as_app_subsume_private (AsApp *app, AsApp *donor, AsAppSubsumeFlags flags)
as_app_add_screenshot (app, ss);
}
+ /* provides */
+ for (i = 0; i < priv->provides->len; i++) {
+ pr = g_ptr_array_index (priv->provides, i);
+ as_app_add_provide (app, pr);
+ }
+
/* icons */
for (i = 0; i < priv->icons->len; i++) {
AsIcon *ic = g_ptr_array_index (priv->icons, i);
diff --git a/libappstream-glib/as-provide.c b/libappstream-glib/as-provide.c
index 0a97257..27b1aec 100644
--- a/libappstream-glib/as-provide.c
+++ b/libappstream-glib/as-provide.c
@@ -103,8 +103,10 @@ as_provide_kind_from_string (const gchar *kind)
return AS_PROVIDE_KIND_FONT;
if (g_strcmp0 (kind, "modalias") == 0)
return AS_PROVIDE_KIND_MODALIAS;
- if (g_strcmp0 (kind, "firmware") == 0)
- return AS_PROVIDE_KIND_FIRMWARE;
+ if (g_strcmp0 (kind, "firmware-runtime") == 0)
+ return AS_PROVIDE_KIND_FIRMWARE_RUNTIME;
+ if (g_strcmp0 (kind, "firmware-flashed") == 0)
+ return AS_PROVIDE_KIND_FIRMWARE_FLASHED;
if (g_strcmp0 (kind, "python2") == 0)
return AS_PROVIDE_KIND_PYTHON2;
if (g_strcmp0 (kind, "python3") == 0)
@@ -137,8 +139,10 @@ as_provide_kind_to_string (AsProvideKind kind)
return "font";
if (kind == AS_PROVIDE_KIND_MODALIAS)
return "modalias";
- if (kind == AS_PROVIDE_KIND_FIRMWARE)
- return "firmware";
+ if (kind == AS_PROVIDE_KIND_FIRMWARE_RUNTIME)
+ return "firmware-runtime";
+ if (kind == AS_PROVIDE_KIND_FIRMWARE_FLASHED)
+ return "firmware-flashed";
if (kind == AS_PROVIDE_KIND_PYTHON2)
return "python2";
if (kind == AS_PROVIDE_KIND_PYTHON3)
@@ -252,6 +256,20 @@ as_provide_node_insert (AsProvide *provide, GNode *parent, AsNodeContext *ctx)
"type", "system",
NULL);
break;
+ case AS_PROVIDE_KIND_FIRMWARE_FLASHED:
+ n = as_node_insert (parent, "firmware",
+ priv->value,
+ AS_NODE_INSERT_FLAG_NONE,
+ "type", "flashed",
+ NULL);
+ break;
+ case AS_PROVIDE_KIND_FIRMWARE_RUNTIME:
+ n = as_node_insert (parent, "firmware",
+ priv->value,
+ AS_NODE_INSERT_FLAG_NONE,
+ "type", "runtime",
+ NULL);
+ break;
default:
n = as_node_insert (parent, as_provide_kind_to_string (priv->kind),
priv->value,
@@ -300,14 +318,20 @@ as_provide_node_parse (AsProvide *provide, GNode *node,
AsNodeContext *ctx, GError **error)
{
AsProvidePrivate *priv = GET_PRIVATE (provide);
+ const gchar *tmp;
if (g_strcmp0 (as_node_get_name (node), "dbus") == 0) {
- const gchar *tmp;
tmp = as_node_get_attribute (node, "type");
if (g_strcmp0 (tmp, "system") == 0)
priv->kind = AS_PROVIDE_KIND_DBUS_SYSTEM;
- else if (g_strcmp0 (tmp, "session") == 0)
+ else
priv->kind = AS_PROVIDE_KIND_DBUS_SESSION;
+ } else if (g_strcmp0 (as_node_get_name (node), "firmware") == 0) {
+ tmp = as_node_get_attribute (node, "type");
+ if (g_strcmp0 (tmp, "flashed") == 0)
+ priv->kind = AS_PROVIDE_KIND_FIRMWARE_FLASHED;
+ else
+ priv->kind = AS_PROVIDE_KIND_FIRMWARE_RUNTIME;
} else {
priv->kind = as_provide_kind_from_string (as_node_get_name (node));
}
diff --git a/libappstream-glib/as-provide.h b/libappstream-glib/as-provide.h
index 040ab73..0196f3c 100644
--- a/libappstream-glib/as-provide.h
+++ b/libappstream-glib/as-provide.h
@@ -66,11 +66,12 @@ struct _AsProvideClass
* @AS_PROVIDE_KIND_BINARY: A binary file
* @AS_PROVIDE_KIND_FONT: A font file
* @AS_PROVIDE_KIND_MODALIAS: A hardware modalias
- * @AS_PROVIDE_KIND_FIRMWARE: A firmware file
+ * @AS_PROVIDE_KIND_FIRMWARE_RUNTIME: A runtime-loadable firmware file
* @AS_PROVIDE_KIND_PYTHON2: A Python 2 module
* @AS_PROVIDE_KIND_PYTHON3: A Python 3 module
* @AS_PROVIDE_KIND_DBUS_SESSION: A D-Bus session service
* @AS_PROVIDE_KIND_DBUS_SYSTEM: A D-Bus system service
+ * @AS_PROVIDE_KIND_FIRMWARE_FLASHED: A flashed firmware GUID
*
* The provide type.
**/
@@ -80,11 +81,12 @@ typedef enum {
AS_PROVIDE_KIND_BINARY,
AS_PROVIDE_KIND_FONT,
AS_PROVIDE_KIND_MODALIAS,
- AS_PROVIDE_KIND_FIRMWARE,
+ AS_PROVIDE_KIND_FIRMWARE_RUNTIME,
AS_PROVIDE_KIND_PYTHON2,
AS_PROVIDE_KIND_PYTHON3,
- AS_PROVIDE_KIND_DBUS_SESSION, /* Since: 0.1.7 */
- AS_PROVIDE_KIND_DBUS_SYSTEM, /* Since: 0.2.4 */
+ AS_PROVIDE_KIND_DBUS_SESSION, /* Since: 0.1.7 */
+ AS_PROVIDE_KIND_DBUS_SYSTEM, /* Since: 0.2.4 */
+ AS_PROVIDE_KIND_FIRMWARE_FLASHED, /* Since: 0.5.0 */
/*< private >*/
AS_PROVIDE_KIND_LAST
} AsProvideKind;