summaryrefslogtreecommitdiff
path: root/libappstream-glib
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2016-07-31 18:34:34 +0100
committerRichard Hughes <richard@hughsie.com>2016-07-31 21:33:04 +0100
commitd181287379025919d007e3dd16127bcb9d10cf83 (patch)
treeb78d5fd2c7a1400fb466f668785e0c619cd37762 /libappstream-glib
parent2df0a81b92c56041f570e3bcb1e976ccaba33a67 (diff)
downloadappstream-glib-d181287379025919d007e3dd16127bcb9d10cf83.tar.gz
Include the distribution system in the equality check
Diffstat (limited to 'libappstream-glib')
-rw-r--r--libappstream-glib/as-app.c25
-rw-r--r--libappstream-glib/as-self-test.c4
2 files changed, 25 insertions, 4 deletions
diff --git a/libappstream-glib/as-app.c b/libappstream-glib/as-app.c
index 804e3db..d8f1d0d 100644
--- a/libappstream-glib/as-app.c
+++ b/libappstream-glib/as-app.c
@@ -518,13 +518,33 @@ as_app_fix_unique_nullable (const gchar *tmp)
return tmp;
}
+static const gchar *
+as_app_get_unique_id_system (AsApp *app)
+{
+ AsAppPrivate *priv = GET_PRIVATE (app);
+
+ /* prefer bundle */
+ if (priv->bundles->len > 0) {
+ AsBundle *bundle = g_ptr_array_index (priv->bundles, 0);
+ if (as_bundle_get_kind (bundle) != AS_BUNDLE_KIND_UNKNOWN)
+ return as_bundle_kind_to_string (as_bundle_get_kind (bundle));
+ }
+
+ /* fallback to packages */
+ if (priv->pkgnames->len > 0)
+ return "package";
+
+ /* nothing */
+ return "*";
+}
+
/**
* as_app_get_unique_id:
* @app: a #AsApp instance.
*
* Gets the unique ID value to represent the component.
*
- * Returns: the unique ID, e.g. "system/fedora/desktop/gimp.desktop/i386/master"
+ * Returns: the unique ID, e.g. "system/package/fedora/desktop/gimp.desktop/i386/master"
*
* Since: 0.6.1
**/
@@ -544,8 +564,9 @@ as_app_get_unique_id (AsApp *app)
id_str = as_app_get_id_no_prefix (app);
if (priv->architectures->len == 1)
arch_str = g_ptr_array_index (priv->architectures, 0);
- priv->unique_id = g_strdup_printf ("%s/%s/%s/%s/%s/%s",
+ priv->unique_id = g_strdup_printf ("%s/%s/%s/%s/%s/%s/%s",
as_app_fix_unique_nullable (scope_str),
+ as_app_get_unique_id_system (app),
as_app_fix_unique_nullable (priv->origin),
as_app_fix_unique_nullable (kind_str),
as_app_fix_unique_nullable (id_str),
diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c
index d8e31d6..c251e34 100644
--- a/libappstream-glib/as-self-test.c
+++ b/libappstream-glib/as-self-test.c
@@ -1537,7 +1537,7 @@ as_test_app_func (void)
/* verify */
g_assert_cmpstr (as_app_get_id (app), ==, "org.gnome.Software.desktop");
g_assert_cmpstr (as_app_get_id_filename (app), ==, "org.gnome.Software");
- g_assert_cmpstr (as_app_get_unique_id (app), ==, "*/*/desktop/org.gnome.Software.desktop/i386/master");
+ g_assert_cmpstr (as_app_get_unique_id (app), ==, "*/flatpak/*/desktop/org.gnome.Software.desktop/i386/master");
g_assert_cmpstr (as_app_get_name (app, "pl"), ==, "Oprogramowanie");
g_assert_cmpstr (as_app_get_comment (app, NULL), ==, "Application manager");
g_assert_cmpstr (as_app_get_description (app, NULL), ==, "<p>Software allows you to find stuff</p>");
@@ -3025,7 +3025,7 @@ as_test_store_flatpak_func (void)
g_assert_cmpint (apps->len, ==, 1);
app = g_ptr_array_index (apps, 0);
g_assert_cmpstr (as_app_get_id (app), ==, "flatpak:test.desktop");
- g_assert_cmpstr (as_app_get_unique_id (app), ==, "*/flatpak_remote-name/desktop/test.desktop/x86_64/master");
+ g_assert_cmpstr (as_app_get_unique_id (app), ==, "*/flatpak/flatpak_remote-name/desktop/test.desktop/x86_64/master");
g_assert_cmpstr (as_app_get_id_filename (app), ==, "test");
g_assert_cmpstr (as_app_get_origin (app), ==, "flatpak_remote-name");
g_assert_cmpstr (as_app_get_source_file (app), ==, filename);