[gnome-photos/wip/halfline/photos-anon-node-hack] wip! item-manager: Handle collection COLUMNS_URNs with stripped prefix
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/halfline/photos-anon-node-hack] wip! item-manager: Handle collection COLUMNS_URNs with stripped prefix
- Date: Tue, 3 May 2022 16:58:44 +0000 (UTC)
commit 62c75d289f21223902bcdb61b8fb51fce9830bf6
Author: Ray Strode <rstrode redhat com>
Date: Tue May 3 12:50:21 2022 -0400
wip! item-manager: Handle collection COLUMNS_URNs with stripped prefix
For reasons I don't understand, tracker sometimes returns
blank node urns without their qualifiers (so "82" instead of "urn:bnode:82")
That causes duplicate entries to get added to the collection model, and
makes the album view get confused.
This commit tries to accomodate the oddity by manually adding the
prefix back.
https://gitlab.gnome.org/GNOME/gnome-photos/-/issues/197
src/photos-base-item.c | 16 ++++++++++++----
src/photos-item-manager.c | 15 +++++++++++++++
2 files changed, 27 insertions(+), 4 deletions(-)
---
diff --git a/src/photos-base-item.c b/src/photos-base-item.c
index 3b20bc2e..eef0bf66 100644
--- a/src/photos-base-item.c
+++ b/src/photos-base-item.c
@@ -2807,6 +2807,7 @@ photos_base_item_populate_from_cursor (PhotosBaseItem *self, TrackerSparqlCursor
gchar *name_fallback;
gint64 height;
gint64 width;
+ g_autofree char *bnode_id = NULL;
priv = photos_base_item_get_instance_private (self);
@@ -2816,7 +2817,18 @@ photos_base_item_populate_from_cursor (PhotosBaseItem *self, TrackerSparqlCursor
photos_utils_set_string (&priv->uri, uri);
g_object_notify (G_OBJECT (self), "uri");
+ rdf_type = tracker_sparql_cursor_get_string (cursor, PHOTOS_QUERY_COLUMNS_RDF_TYPE, NULL);
+ photos_utils_set_string (&priv->rdf_type, rdf_type);
+
+ photos_base_item_update_info_from_type (self);
+
id = tracker_sparql_cursor_get_string (cursor, PHOTOS_QUERY_COLUMNS_URN, NULL);
+
+ if (priv->collection && !g_str_has_prefix (id, "urn:bnode:"))
+ {
+ bnode_id = g_strdup_printf ("urn:bnode:%s", id);
+ id = bnode_id;
+ }
photos_utils_set_string (&priv->id, id);
g_object_notify (G_OBJECT (self), "id");
@@ -2841,10 +2853,6 @@ photos_base_item_populate_from_cursor (PhotosBaseItem *self, TrackerSparqlCursor
mime_type = tracker_sparql_cursor_get_string (cursor, PHOTOS_QUERY_COLUMNS_MIME_TYPE, NULL);
photos_utils_set_string (&priv->mime_type, mime_type);
- rdf_type = tracker_sparql_cursor_get_string (cursor, PHOTOS_QUERY_COLUMNS_RDF_TYPE, NULL);
- photos_utils_set_string (&priv->rdf_type, rdf_type);
-
- photos_base_item_update_info_from_type (self);
priv->favorite = favorite && !priv->collection;
priv->ctime = -1;
diff --git a/src/photos-item-manager.c b/src/photos-item-manager.c
index 73ccaaa6..30a31769 100644
--- a/src/photos-item-manager.c
+++ b/src/photos-item-manager.c
@@ -305,6 +305,7 @@ photos_item_manager_add_cursor_for_mode (PhotosItemManager *self,
PhotosBaseManager *item_mngr_chld;
gboolean is_collection;
const gchar *id;
+ g_autofree char *bnode_id = NULL;
g_return_if_fail (PHOTOS_IS_ITEM_MANAGER (self));
g_return_if_fail (base_item_type == G_TYPE_NONE
@@ -326,6 +327,12 @@ photos_item_manager_add_cursor_for_mode (PhotosItemManager *self,
item_mngr_chld = self->item_mngr_chldrn[mode];
id = tracker_sparql_cursor_get_string (cursor, PHOTOS_QUERY_COLUMNS_URN, NULL);
+ if (mode == PHOTOS_WINDOW_MODE_COLLECTIONS && !g_str_has_prefix (id, "urn:bnode:"))
+ {
+ bnode_id = g_strdup_printf ("urn:bnode:%s", id);
+ id = bnode_id;
+ }
+
item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (item_mngr_chld, id));
if (item != NULL)
{
@@ -1378,6 +1385,7 @@ photos_item_manager_create_item (PhotosItemManager *self,
PhotosBaseItem *item;
PhotosBaseItem *ret_val = NULL;
const gchar *id;
+ g_autofree char *bnode_id = NULL;
g_return_val_if_fail (PHOTOS_IS_ITEM_MANAGER (self), NULL);
g_return_val_if_fail (base_item_type == G_TYPE_NONE
@@ -1386,6 +1394,13 @@ photos_item_manager_create_item (PhotosItemManager *self,
g_return_val_if_fail (TRACKER_IS_SPARQL_CURSOR (cursor), NULL);
id = tracker_sparql_cursor_get_string (cursor, PHOTOS_QUERY_COLUMNS_URN, NULL);
+
+ if (photos_item_manager_cursor_is_collection (cursor) && !g_str_has_prefix (id, "urn:bnode:"))
+ {
+ bnode_id = g_strdup_printf ("urn:bnode:%s", id);
+ id = bnode_id;
+ }
+
item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (PHOTOS_BASE_MANAGER (self), id));
if (item != NULL)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]