diff options
-rw-r--r-- | data/tests/firmware/2_0_0/firmware.inf | 5 | ||||
-rw-r--r-- | data/tests/firmware/2_0_1/firmware.inf | 4 | ||||
-rw-r--r-- | data/tests/firmware/2_0_1/firmware.metainfo.xml | 2 | ||||
-rw-r--r-- | data/tests/firmware/2_0_2/firmware.inf | 4 | ||||
-rw-r--r-- | data/tests/firmware/2_0_2/firmware.metainfo.xml | 5 | ||||
-rw-r--r-- | libappstream-builder/asb-self-test.c | 66 | ||||
-rw-r--r-- | libappstream-builder/plugins/asb-plugin-appdata.c | 34 | ||||
-rw-r--r-- | libappstream-glib/as-app-inf.c | 59 | ||||
-rw-r--r-- | libappstream-glib/as-app-validate.c | 5 | ||||
-rw-r--r-- | libappstream-glib/as-app.c | 21 | ||||
-rw-r--r-- | libappstream-glib/as-provide.c | 36 | ||||
-rw-r--r-- | libappstream-glib/as-provide.h | 10 |
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; |