summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2015-08-10 13:54:49 +0100
committerRichard Hughes <richard@hughsie.com>2015-08-10 18:04:19 +0100
commit93f1a4b5ab2e6d80d66027cd80edef4dabe45b24 (patch)
tree3bcd724792e600fb629fc605ed166b0f9eb08e74
parent4695568085f77599355804fa79dfb9ae7e12a182 (diff)
downloadappstream-glib-93f1a4b5ab2e6d80d66027cd80edef4dabe45b24.tar.gz
Add support for the flashed firmware provide kind
This allows us to have an ID that isn't tied to the GUID, and also allows us to have one component that targets more than one ESRT GUID. This requires changing the matching logic better, but should match what makes it into AppStream 0.9
-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;