[eog/wip/phako/gexiv2] all: Fix filling XMP details



commit 5abc2fe362e1da1132a2792a344f8948120b2b3c
Author: Jens Georg <mail jensge org>
Date:   Wed Feb 7 22:01:53 2018 +0100

    all: Fix filling XMP details

 src/eog-metadata-details.c  |   64 ++++++++++++++++---------------------------
 src/eog-metadata-details.h  |    2 -
 src/eog-properties-dialog.c |    2 -
 3 files changed, 24 insertions(+), 44 deletions(-)
---
diff --git a/src/eog-metadata-details.c b/src/eog-metadata-details.c
index d9864df..52887d1 100644
--- a/src/eog-metadata-details.c
+++ b/src/eog-metadata-details.c
@@ -240,7 +240,7 @@ eog_metadata_details_init (EogMetadataDetails *details)
        priv = details->priv;
 
        priv->model = GTK_TREE_MODEL (gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_STRING));
-       priv->id_path_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
+       priv->id_path_hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
        priv->id_path_hash_mnote = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
 
        /* Tag name column */
@@ -587,21 +587,22 @@ eog_metadata_details_update (EogMetadataDetails *details, ExifData *data)
 }
 #endif /* HAVE_EXIF */
 
-#ifdef HAVE_EXEMPI_
+#ifdef HAVE_EXEMPI
 typedef struct {
        const char *id;
        MetadataCategory category;
 } XmpNsCategory;
 
 static XmpNsCategory xmp_ns_category_map[] = {
-       { NS_EXIF,                  XMP_CATEGORY_EXIF},
-       { NS_TIFF,                  XMP_CATEGORY_EXIF},
-       { NS_XAP,                   XMP_CATEGORY_EXIF},
-       { NS_XAP_RIGHTS,            XMP_CATEGORY_RIGHTS},
-       { NS_EXIF_AUX,              XMP_CATEGORY_EXIF},
-       { NS_DC,                    XMP_CATEGORY_IPTC},
-       { NS_IPTC4XMP,              XMP_CATEGORY_IPTC},
-       { NS_CC,                    XMP_CATEGORY_RIGHTS},
+       { "Xmp.exif",               XMP_CATEGORY_EXIF},
+       { "Xmp.tiff",               XMP_CATEGORY_EXIF},
+       { "Xmp.xmp",                XMP_CATEGORY_EXIF},
+       { "Xmp.xmpRights",          XMP_CATEGORY_RIGHTS},
+       { "Xmp.aux",                XMP_CATEGORY_EXIF},
+       { "Xmp.dc",                 XMP_CATEGORY_IPTC},
+       { "Xmp.iptc",               XMP_CATEGORY_IPTC},
+       { "Xmp.Iptc4xmpCore",       XMP_CATEGORY_IPTC},
+/*     { NS_CC,                    XMP_CATEGORY_RIGHTS}, */
        { NULL, -1}
 };
 
@@ -609,11 +610,10 @@ static MetadataCategory
 get_xmp_category (const char *schema)
 {
        MetadataCategory cat = XMP_CATEGORY_OTHER;
-       const char *s = xmp_string_cstr(schema);
        int i;
 
        for (i = 0; xmp_ns_category_map[i].id != NULL; i++) {
-               if (strcmp (xmp_ns_category_map[i].id, s) == 0) {
+               if (g_str_has_prefix (schema, xmp_ns_category_map[i].id)) {
                        cat = xmp_ns_category_map[i].category;
                        break;
                }
@@ -623,39 +623,28 @@ get_xmp_category (const char *schema)
 }
 
 static void
-xmp_entry_insert (EogMetadataDetails *view, XmpStringPtr xmp_schema,
-                 XmpStringPtr xmp_path, XmpStringPtr xmp_prop)
+xmp_entry_insert (EogMetadataDetails *view, const char *xmp_key, const char *xmp_value)
 {
        GtkTreeStore *store;
        EogMetadataDetailsPrivate *priv;
        MetadataCategory cat;
        char *path;
-       gchar *key;
 
        priv = view->priv;
 
-       key = g_strconcat (xmp_string_cstr (xmp_schema), ":",
-                          xmp_string_cstr (xmp_path), NULL);
-
        store = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
 
-       path = g_hash_table_lookup (priv->id_path_hash, key);
+       path = g_hash_table_lookup (priv->id_path_hash, xmp_key);
 
        if (path != NULL) {
-               set_row_data (store, path, NULL,
-                             xmp_string_cstr (xmp_path),
-                             xmp_string_cstr (xmp_prop));
-
-               g_free(key);
+               set_row_data (store, path, NULL, xmp_key, xmp_value);
        }
        else {
-               cat = get_xmp_category (xmp_schema);
+               cat = get_xmp_category (xmp_key);
 
-               path = set_row_data (store, NULL, exif_categories[cat].path,
-                                    xmp_string_cstr(xmp_path),
-                                    xmp_string_cstr(xmp_prop));
+               path = set_row_data (store, NULL, exif_categories[cat].path, xmp_key, xmp_value);
 
-               g_hash_table_insert (priv->id_path_hash, key, path);
+               g_hash_table_insert (priv->id_path_hash, (gpointer) xmp_key, path);
        }
 }
 
@@ -665,19 +654,14 @@ eog_metadata_details_xmp_update (EogMetadataDetails *view, GExiv2Metadata *data)
        g_return_if_fail (EOG_IS_METADATA_DETAILS (view));
 
        if (data) {
-               XmpIteratorPtr iter = xmp_iterator_new(data, NULL, NULL, XMP_ITER_JUSTLEAFNODES);
-               XmpStringPtr the_schema = xmp_string_new ();
-               XmpStringPtr the_path = xmp_string_new ();
-               XmpStringPtr the_prop = xmp_string_new ();
-
-               while (xmp_iterator_next (iter, the_schema, the_path, the_prop, NULL)) {
-                       xmp_entry_insert (view, the_schema, the_path, the_prop);
+               char **iter, **tags;
+               iter = tags = gexiv2_metadata_get_xmp_tags (data);
+               while (iter != NULL && *iter != NULL) {
+                       xmp_entry_insert (view, *iter, gexiv2_metadata_get_tag_string (data, *iter));
+                       iter++;
                }
 
-               xmp_string_free (the_prop);
-               xmp_string_free (the_path);
-               xmp_string_free (the_schema);
-               xmp_iterator_free (iter);
+               g_strfreev (tags);
        }
 }
 #endif
diff --git a/src/eog-metadata-details.h b/src/eog-metadata-details.h
index 2eed72e..37bf408 100644
--- a/src/eog-metadata-details.h
+++ b/src/eog-metadata-details.h
@@ -63,8 +63,6 @@ GtkWidget          *eog_metadata_details_new         (void);
 G_GNUC_INTERNAL
 void                eog_metadata_details_update      (EogMetadataDetails *details,
                                                      GExiv2Metadata       *data);
-#endif
-#if HAVE_EXEMPI
 G_GNUC_INTERNAL
 void                eog_metadata_details_xmp_update  (EogMetadataDetails *view,
                                                      GExiv2Metadata          *xmp_data);
diff --git a/src/eog-properties-dialog.c b/src/eog-properties-dialog.c
index 9ee6187..26e57d4 100644
--- a/src/eog-properties-dialog.c
+++ b/src/eog-properties-dialog.c
@@ -320,9 +320,7 @@ pd_update_metadata_tab (EogPropertiesDialog *prop_dlg,
                eog_exif_util_set_label_text (GTK_LABEL (priv->xmp_rights_label),
                                xmp_data, "Xmp.dc.rights");
 
-#if 0
                eog_metadata_details_xmp_update (EOG_METADATA_DETAILS (priv->metadata_details), xmp_data);
-#endif
 
                g_clear_object (&xmp_data);
        } else {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]