summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Georg <mail@jensge.org>2018-02-07 21:12:35 +0100
committerThomas Bechtold <tbechtold@suse.com>2018-06-04 20:06:26 +0200
commit7b47d3571c0acb4bb183914af274af6d71d3eca3 (patch)
treefe484def9cbfe37b151bc88d920d7e98e9fec724 /src
parenta82fa2b512c63f029557f41a38a4fb3e165fdde5 (diff)
downloadeog-7b47d3571c0acb4bb183914af274af6d71d3eca3.tar.gz
all: Replace Exempi with gexiv2
Diffstat (limited to 'src')
-rw-r--r--src/eog-application.c13
-rw-r--r--src/eog-exif-util.c6
-rw-r--r--src/eog-image-private.h6
-rw-r--r--src/eog-image.c14
-rw-r--r--src/eog-metadata-details.c10
-rw-r--r--src/eog-metadata-details.h5
-rw-r--r--src/eog-metadata-reader-jpg.c12
-rw-r--r--src/eog-metadata-reader-png.c12
-rw-r--r--src/eog-metadata-reader.c2
-rw-r--r--src/eog-metadata-reader.h5
-rw-r--r--src/eog-metadata-sidebar.c5
-rw-r--r--src/eog-properties-dialog.c105
12 files changed, 56 insertions, 139 deletions
diff --git a/src/eog-application.c b/src/eog-application.c
index 95ca9ac0..a3566ae4 100644
--- a/src/eog-application.c
+++ b/src/eog-application.c
@@ -45,10 +45,6 @@
#include <glib-object.h>
#include <gtk/gtk.h>
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#endif
-
#define APPLICATION_SERVICE_NAME "org.gnome.eog.ApplicationService"
static void eog_application_load_accelerators (void);
@@ -279,9 +275,8 @@ eog_application_startup (GApplication *application)
g_application_set_resource_base_path (application, "/org/gnome/eog");
G_APPLICATION_CLASS (eog_application_parent_class)->startup (application);
-#ifdef HAVE_EXEMPI
- xmp_init();
-#endif
+ gexiv2_initialize ();
+
eog_debug_init ();
eog_job_scheduler_init ();
eog_thumbnail_init ();
@@ -334,10 +329,6 @@ eog_application_startup (GApplication *application)
static void
eog_application_shutdown (GApplication *application)
{
-#ifdef HAVE_EXEMPI
- xmp_terminate();
-#endif
-
G_APPLICATION_CLASS (eog_application_parent_class)->shutdown (application);
}
diff --git a/src/eog-exif-util.c b/src/eog-exif-util.c
index a39108d6..4240e6d4 100644
--- a/src/eog-exif-util.c
+++ b/src/eog-exif-util.c
@@ -310,8 +310,10 @@ const gchar *
eog_exif_data_get_value (EogExifData *exif_data, const char *tag_id, gchar *buffer, guint buf_size)
{
char *data = gexiv2_metadata_get_tag_string (exif_data, tag_id);
- strncpy (buffer, data, buf_size - 1);
- g_free (data);
+ if (data != NULL) {
+ strncpy (buffer, data, buf_size - 1);
+ g_free (data);
+ }
return buffer;
}
diff --git a/src/eog-image-private.h b/src/eog-image-private.h
index e393dbf4..71819434 100644
--- a/src/eog-image-private.h
+++ b/src/eog-image-private.h
@@ -28,10 +28,6 @@
#include <librsvg/rsvg.h>
#endif
-#ifdef HAVE_EXEMPI
-#include <exempi/xmp.h>
-#endif
-
G_BEGIN_DECLS
struct _EogImagePrivate {
@@ -75,7 +71,7 @@ struct _EogImagePrivate {
GExiv2Metadata *exif;
#endif
#ifdef HAVE_EXEMPI
- XmpPtr xmp;
+ GExiv2Metadata *xmp;
#endif
#ifdef HAVE_LCMS
diff --git a/src/eog-image.c b/src/eog-image.c
index a0d67ada..23ef852b 100644
--- a/src/eog-image.c
+++ b/src/eog-image.c
@@ -56,10 +56,6 @@
#include <gexiv2/gexiv2.h>
#endif
-#ifdef HAVE_EXEMPI
-#include <exempi/xmp.h>
-#endif
-
#ifdef HAVE_LCMS
#include <lcms2.h>
#ifndef EXIF_TAG_GAMMA
@@ -136,7 +132,7 @@ eog_image_free_mem_private (EogImage *image)
#ifdef HAVE_EXEMPI
if (priv->xmp != NULL) {
- xmp_free (priv->xmp);
+ g_object_unref (priv->xmp);
priv->xmp = NULL;
}
#endif
@@ -794,7 +790,7 @@ eog_image_set_xmp_data (EogImage *img, EogMetadataReader *md_reader)
priv = img->priv;
if (priv->xmp) {
- xmp_free (priv->xmp);
+ g_object_unref (priv->xmp);
}
priv->xmp = eog_metadata_reader_get_xmp_data (md_reader);
}
@@ -2048,7 +2044,9 @@ eog_image_get_exif_info (EogImage *img)
g_mutex_lock (&priv->status_mutex);
- g_object_ref (priv->exif);
+ if (priv->exif != NULL) {
+ g_object_ref (priv->exif);
+ }
data = priv->exif;
g_mutex_unlock (&priv->status_mutex);
@@ -2078,7 +2076,7 @@ eog_image_get_xmp_info (EogImage *img)
priv = img->priv;
g_mutex_lock (&priv->status_mutex);
- data = (gpointer) xmp_copy (priv->xmp);
+ data = (gpointer) g_object_ref (priv->xmp);
g_mutex_unlock (&priv->status_mutex);
#endif
diff --git a/src/eog-metadata-details.c b/src/eog-metadata-details.c
index fdb89696..d9864dfa 100644
--- a/src/eog-metadata-details.c
+++ b/src/eog-metadata-details.c
@@ -29,10 +29,6 @@
#if HAVE_EXIF
#include <gexiv2/gexiv2.h>
#endif
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#include <exempi/xmpconsts.h>
-#endif
#include <glib/gi18n.h>
#include <gtk/gtk.h>
@@ -591,7 +587,7 @@ eog_metadata_details_update (EogMetadataDetails *details, ExifData *data)
}
#endif /* HAVE_EXIF */
-#ifdef HAVE_EXEMPI
+#ifdef HAVE_EXEMPI_
typedef struct {
const char *id;
MetadataCategory category;
@@ -610,7 +606,7 @@ static XmpNsCategory xmp_ns_category_map[] = {
};
static MetadataCategory
-get_xmp_category (XmpStringPtr schema)
+get_xmp_category (const char *schema)
{
MetadataCategory cat = XMP_CATEGORY_OTHER;
const char *s = xmp_string_cstr(schema);
@@ -664,7 +660,7 @@ xmp_entry_insert (EogMetadataDetails *view, XmpStringPtr xmp_schema,
}
void
-eog_metadata_details_xmp_update (EogMetadataDetails *view, XmpPtr data)
+eog_metadata_details_xmp_update (EogMetadataDetails *view, GExiv2Metadata *data)
{
g_return_if_fail (EOG_IS_METADATA_DETAILS (view));
diff --git a/src/eog-metadata-details.h b/src/eog-metadata-details.h
index 0c663901..2eed72e2 100644
--- a/src/eog-metadata-details.h
+++ b/src/eog-metadata-details.h
@@ -29,9 +29,6 @@
#if HAVE_EXIF
#include <gexiv2/gexiv2.h>
#endif
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#endif
G_BEGIN_DECLS
@@ -70,7 +67,7 @@ void eog_metadata_details_update (EogMetadataDetails *detail
#if HAVE_EXEMPI
G_GNUC_INTERNAL
void eog_metadata_details_xmp_update (EogMetadataDetails *view,
- XmpPtr xmp_data);
+ GExiv2Metadata *xmp_data);
#endif
G_END_DECLS
diff --git a/src/eog-metadata-reader-jpg.c b/src/eog-metadata-reader-jpg.c
index 420a1930..9c12e4df 100644
--- a/src/eog-metadata-reader-jpg.c
+++ b/src/eog-metadata-reader-jpg.c
@@ -487,15 +487,21 @@ static gpointer
eog_metadata_reader_jpg_get_xmp_data (EogMetadataReaderJpg *emr )
{
EogMetadataReaderJpgPrivate *priv;
- XmpPtr xmp = NULL;
+ GExiv2Metadata *xmp = NULL;
g_return_val_if_fail (EOG_IS_METADATA_READER (emr), NULL);
priv = emr->priv;
if (priv->xmp_chunk != NULL) {
- xmp = xmp_new (((const char*)priv->xmp_chunk)+EOG_XMP_OFFSET,
- priv->xmp_len-EOG_XMP_OFFSET);
+ GError *error = NULL;
+ xmp = gexiv2_metadata_new ();
+ if (!gexiv2_metadata_open_buf (xmp, (guint8 *)priv->xmp_chunk+EOG_XMP_OFFSET,
+ priv->xmp_len-EOG_XMP_OFFSET, &error)) {
+ g_warning ("Failed to parse XMP data : %s", error->message);
+ g_clear_error (&error);
+ g_clear_object (&xmp);
+ }
}
return (gpointer)xmp;
diff --git a/src/eog-metadata-reader-png.c b/src/eog-metadata-reader-png.c
index 25f58d2e..54dabd84 100644
--- a/src/eog-metadata-reader-png.c
+++ b/src/eog-metadata-reader-png.c
@@ -461,15 +461,21 @@ static gpointer
eog_metadata_reader_png_get_xmp_data (EogMetadataReaderPng *emr )
{
EogMetadataReaderPngPrivate *priv;
- XmpPtr xmp = NULL;
+ GExiv2Metadata *xmp = NULL;
g_return_val_if_fail (EOG_IS_METADATA_READER_PNG (emr), NULL);
priv = emr->priv;
if (priv->xmp_chunk != NULL) {
- xmp = xmp_new ((const char*)priv->xmp_chunk+EOG_XMP_OFFSET,
- priv->xmp_len-EOG_XMP_OFFSET);
+ GError *error = NULL;
+ xmp = gexiv2_metadata_new ();
+ if (!gexiv2_metadata_open_buf (xmp, (const char*)priv->xmp_chunk+EOG_XMP_OFFSET,
+ priv->xmp_len-EOG_XMP_OFFSET, &error)) {
+ g_warning ("Failed to parse XMP data : %s", error->message);
+ g_clear_error (&error);
+ g_clear_object (&xmp);
+ }
}
return (gpointer) xmp;
diff --git a/src/eog-metadata-reader.c b/src/eog-metadata-reader.c
index 399558d1..c4a818a8 100644
--- a/src/eog-metadata-reader.c
+++ b/src/eog-metadata-reader.c
@@ -85,7 +85,7 @@ eog_metadata_reader_get_exif_data (EogMetadataReader *emr)
#endif
#ifdef HAVE_EXEMPI
-XmpPtr
+GExiv2Metadata*
eog_metadata_reader_get_xmp_data (EogMetadataReader *emr)
{
return EOG_METADATA_READER_GET_INTERFACE (emr)->get_xmp_ptr (emr);
diff --git a/src/eog-metadata-reader.h b/src/eog-metadata-reader.h
index 83e92ce7..6a785fcb 100644
--- a/src/eog-metadata-reader.h
+++ b/src/eog-metadata-reader.h
@@ -26,9 +26,6 @@
#if HAVE_EXIF
#include "eog-exif-util.h"
#endif
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#endif
#if HAVE_LCMS
#include <lcms2.h>
#endif
@@ -94,7 +91,7 @@ GExiv2Metadata* eog_metadata_reader_get_exif_data (EogMetadataReader *em
#ifdef HAVE_EXEMPI
G_GNUC_INTERNAL
-XmpPtr eog_metadata_reader_get_xmp_data (EogMetadataReader *emr);
+GExiv2Metadata* eog_metadata_reader_get_xmp_data (EogMetadataReader *emr);
#endif
#if 0
diff --git a/src/eog-metadata-sidebar.c b/src/eog-metadata-sidebar.c
index 5dc83cb0..5498ac3e 100644
--- a/src/eog-metadata-sidebar.c
+++ b/src/eog-metadata-sidebar.c
@@ -44,11 +44,6 @@
#include "eog-exif-util.h"
#endif
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#include <exempi/xmpconsts.h>
-#endif
-
/* There's no exempi support in the sidebar yet */
#if HAVE_EXIF /*|| HAVE_EXEMPI */
#define HAVE_METADATA 1
diff --git a/src/eog-properties-dialog.c b/src/eog-properties-dialog.c
index 334138a0..9ee61873 100644
--- a/src/eog-properties-dialog.c
+++ b/src/eog-properties-dialog.c
@@ -39,10 +39,6 @@
#include <gio/gio.h>
#include <gtk/gtk.h>
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#include <exempi/xmpconsts.h>
-#endif
#if HAVE_EXIF || HAVE_EXEMPI
#define HAVE_METADATA 1
#endif
@@ -217,61 +213,6 @@ pd_update_general_tab (EogPropertiesDialog *prop_dlg,
g_free (bytes_str);
}
-#if HAVE_EXEMPI
-static void
-eog_xmp_set_label (XmpPtr xmp,
- const char *ns,
- const char *propname,
- GtkWidget *w)
-{
- uint32_t options;
-
- XmpStringPtr value = xmp_string_new ();
-
- if (xmp_get_property (xmp, ns, propname, value, &options)) {
- if (XMP_IS_PROP_SIMPLE (options)) {
- gtk_label_set_text (GTK_LABEL (w), xmp_string_cstr (value));
- } else if (XMP_IS_PROP_ARRAY (options)) {
- XmpIteratorPtr iter = xmp_iterator_new (xmp,
- ns,
- propname,
- XMP_ITER_JUSTLEAFNODES);
-
- GString *string = g_string_new ("");
-
- if (iter) {
- gboolean first = TRUE;
-
- while (xmp_iterator_next (iter, NULL, NULL, value, &options)
- && !XMP_IS_PROP_QUALIFIER (options)) {
-
- if (!first) {
- g_string_append_printf(string, ", ");
- } else {
- first = FALSE;
- }
-
- g_string_append_printf (string,
- "%s",
- xmp_string_cstr (value));
- }
-
- xmp_iterator_free (iter);
- }
-
- gtk_label_set_text (GTK_LABEL (w), string->str);
- g_string_free (string, TRUE);
- }
- } else {
- /* Property was not found */
- /* Clear label so it won't show bogus data */
- gtk_label_set_text (GTK_LABEL (w), NULL);
- }
-
- xmp_string_free (value);
-}
-#endif
-
#if HAVE_METADATA
static void
pd_update_metadata_tab (EogPropertiesDialog *prop_dlg,
@@ -283,7 +224,7 @@ pd_update_metadata_tab (EogPropertiesDialog *prop_dlg,
GExiv2Metadata *exif_data;
#endif
#if HAVE_EXEMPI
- XmpPtr xmp_data;
+ GExiv2Metadata *xmp_data;
#endif
g_return_if_fail (EOG_IS_PROPERTIES_DIALOG (prop_dlg));
@@ -361,37 +302,29 @@ pd_update_metadata_tab (EogPropertiesDialog *prop_dlg,
#endif
#if HAVE_EXEMPI
- xmp_data = (XmpPtr) eog_image_get_xmp_info (image);
+ xmp_data = (GExiv2Metadata *) eog_image_get_xmp_info (image);
if (xmp_data != NULL) {
- eog_xmp_set_label (xmp_data,
- NS_IPTC4XMP,
- "Location",
- priv->xmp_location_label);
-
- eog_xmp_set_label (xmp_data,
- NS_DC,
- "description",
- priv->xmp_description_label);
-
- eog_xmp_set_label (xmp_data,
- NS_DC,
- "subject",
- priv->xmp_keywords_label);
-
- eog_xmp_set_label (xmp_data,
- NS_DC,
- "creator",
- priv->xmp_creator_label);
-
- eog_xmp_set_label (xmp_data,
- NS_DC,
- "rights",
- priv->xmp_rights_label);
+ eog_exif_util_set_label_text (GTK_LABEL (priv->xmp_location_label),
+ xmp_data, "Xmp.dc.location");
+
+ eog_exif_util_set_label_text (GTK_LABEL (priv->xmp_description_label),
+ xmp_data, "Xmp.dc.description");
+
+ eog_exif_util_set_label_text (GTK_LABEL (priv->xmp_keywords_label),
+ xmp_data, "Xmp.dc.subject");
+ eog_exif_util_set_label_text (GTK_LABEL (priv->xmp_creator_label),
+ xmp_data, "Xmp.dc.creator");
+
+ 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
- xmp_free (xmp_data);
+ g_clear_object (&xmp_data);
} else {
/* Image has no XMP data */