[tracker/tracker-0.6] Add multivalue support for all image metadata formats
- From: Mikael Ottela <mottela src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-0.6] Add multivalue support for all image metadata formats
- Date: Wed, 13 May 2009 23:16:43 -0400 (EDT)
commit 255d2611dd7aa5cb065106803a2ca05798a7e0af
Author: Mikael Ottela <mikael ottela ixonos com>
Date: Thu May 14 06:13:28 2009 +0300
Add multivalue support for all image metadata formats
Add support for multivalued fields in all image metadata formats and fix how
HasKeywords is used.
Fixes NB#110584.
---
src/tracker-extract/tracker-extract-gstreamer.c | 3 -
src/tracker-extract/tracker-extract-jpeg.c | 115 +++++++++++++++------
src/tracker-extract/tracker-extract-png.c | 86 ++++++++++++---
src/tracker-extract/tracker-extract-tiff.c | 128 ++++++++++++++++-------
src/tracker-extract/tracker-iptc.c | 7 +-
src/tracker-extract/tracker-xmp.c | 18 +---
6 files changed, 248 insertions(+), 109 deletions(-)
diff --git a/src/tracker-extract/tracker-extract-gstreamer.c b/src/tracker-extract/tracker-extract-gstreamer.c
index 90a498c..9b7323c 100644
--- a/src/tracker-extract/tracker-extract-gstreamer.c
+++ b/src/tracker-extract/tracker-extract-gstreamer.c
@@ -375,13 +375,10 @@ dbin_dpad_cb (GstElement* e, GstPad* pad, gboolean cont, gpointer data)
g_value_init (&val, G_TYPE_INT);
g_value_set_int (&val, 50);
-
g_object_set_property (G_OBJECT (fsink), "preroll-queue-len", &val);
-
g_value_unset (&val);
extractor->fsinks = g_list_append (extractor->fsinks, fsink);
-
gst_element_set_state (fsink, GST_STATE_PAUSED);
gst_bin_add (GST_BIN (extractor->pipeline), fsink);
diff --git a/src/tracker-extract/tracker-extract-jpeg.c b/src/tracker-extract/tracker-extract-jpeg.c
index 42e8a8b..647e549 100644
--- a/src/tracker-extract/tracker-extract-jpeg.c
+++ b/src/tracker-extract/tracker-extract-jpeg.c
@@ -19,10 +19,6 @@
* Boston, MA 02110-1301, USA.
*/
-/*
- * FIXME: We should try to get raw data (from libexif) to avoid processing.
- */
-
#include "config.h"
#include <stdio.h>
@@ -92,6 +88,7 @@ typedef gchar * (*PostProcessor) (const gchar*);
typedef struct {
ExifTag tag;
gchar *name;
+ gboolean multi;
PostProcessor post;
} TagType;
@@ -103,37 +100,87 @@ static gchar *fix_exposure_time (const gchar *et);
static gchar *fix_orientation (const gchar *orientation);
static TagType tags[] = {
- { EXIF_TAG_PIXEL_Y_DIMENSION, "Image:Height", NULL },
- { EXIF_TAG_PIXEL_X_DIMENSION, "Image:Width", NULL },
- { EXIF_TAG_RELATED_IMAGE_WIDTH, "Image:Width", NULL },
- { EXIF_TAG_DOCUMENT_NAME, "Image:Title", NULL },
+ { EXIF_TAG_PIXEL_Y_DIMENSION, "Image:Height", FALSE, NULL },
+ { EXIF_TAG_PIXEL_X_DIMENSION, "Image:Width", FALSE, NULL },
+ { EXIF_TAG_RELATED_IMAGE_WIDTH, "Image:Width", FALSE, NULL },
+ { EXIF_TAG_DOCUMENT_NAME, "Image:Title", FALSE, NULL },
/* { -1, "Image:Album", NULL }, */
- { EXIF_TAG_DATE_TIME, "Image:Date", date_to_iso8601 },
- { EXIF_TAG_DATE_TIME_ORIGINAL, "Image:Date", date_to_iso8601 },
+ { EXIF_TAG_DATE_TIME, "Image:Date", FALSE, date_to_iso8601, },
+ { EXIF_TAG_DATE_TIME_ORIGINAL, "Image:Date", FALSE, date_to_iso8601, },
/* { -1, "Image:Keywords", NULL }, */
- { EXIF_TAG_ARTIST, "Image:Creator", NULL },
- { EXIF_TAG_USER_COMMENT, "Image:Comments", NULL },
- { EXIF_TAG_IMAGE_DESCRIPTION, "Image:Description", NULL },
- { EXIF_TAG_SOFTWARE, "Image:Software", NULL },
- { EXIF_TAG_MAKE, "Image:CameraMake", NULL },
- { EXIF_TAG_MODEL, "Image:CameraModel", NULL },
- { EXIF_TAG_ORIENTATION, "Image:Orientation", fix_orientation },
- { EXIF_TAG_EXPOSURE_PROGRAM, "Image:ExposureProgram", NULL },
- { EXIF_TAG_EXPOSURE_TIME, "Image:ExposureTime", fix_exposure_time },
- { EXIF_TAG_FNUMBER, "Image:FNumber", fix_fnumber },
- { EXIF_TAG_FLASH, "Image:Flash", fix_flash },
- { EXIF_TAG_FOCAL_LENGTH, "Image:FocalLength", fix_focal_length },
- { EXIF_TAG_ISO_SPEED_RATINGS, "Image:ISOSpeed", NULL },
- { EXIF_TAG_METERING_MODE, "Image:MeteringMode", NULL },
- { EXIF_TAG_WHITE_BALANCE, "Image:WhiteBalance", NULL },
- { EXIF_TAG_COPYRIGHT, "File:Copyright", NULL },
- { -1, NULL, NULL }
+ { EXIF_TAG_ARTIST, "Image:Creator", FALSE, NULL },
+ { EXIF_TAG_USER_COMMENT, "Image:Comments", FALSE, NULL },
+ { EXIF_TAG_IMAGE_DESCRIPTION, "Image:Description", FALSE, NULL },
+ { EXIF_TAG_SOFTWARE, "Image:Software", FALSE, NULL },
+ { EXIF_TAG_MAKE, "Image:CameraMake", FALSE, NULL },
+ { EXIF_TAG_MODEL, "Image:CameraModel", FALSE, NULL },
+ { EXIF_TAG_ORIENTATION, "Image:Orientation", FALSE, fix_orientation },
+ { EXIF_TAG_EXPOSURE_PROGRAM, "Image:ExposureProgram", FALSE, NULL },
+ { EXIF_TAG_EXPOSURE_TIME, "Image:ExposureTime", FALSE, fix_exposure_time },
+ { EXIF_TAG_FNUMBER, "Image:FNumber", FALSE, fix_fnumber },
+ { EXIF_TAG_FLASH, "Image:Flash", FALSE, fix_flash },
+ { EXIF_TAG_FOCAL_LENGTH, "Image:FocalLength", FALSE, fix_focal_length },
+ { EXIF_TAG_ISO_SPEED_RATINGS, "Image:ISOSpeed", FALSE, NULL },
+ { EXIF_TAG_METERING_MODE, "Image:MeteringMode", FALSE, NULL },
+ { EXIF_TAG_WHITE_BALANCE, "Image:WhiteBalance", FALSE, NULL },
+ { EXIF_TAG_COPYRIGHT, "File:Copyright", FALSE, NULL },
+ { -1, NULL, FALSE, NULL }
};
#endif /* HAVE_EXIF */
#ifdef HAVE_LIBEXIF
+static void
+metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append)
+{
+ gchar *new_value;
+ gchar *orig;
+ gchar **list;
+ gboolean found = FALSE;
+ guint i;
+
+ if (append && (orig = g_hash_table_lookup (metadata, key))) {
+ gchar *escaped;
+
+ escaped = tracker_escape_metadata (value);
+
+ list = g_strsplit (orig, "|", -1);
+ for (i=0; list[i]; i++) {
+ if (strcmp (list[i], escaped) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ g_strfreev(list);
+
+ if (!found) {
+ new_value = g_strconcat (orig, "|", escaped, NULL);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+ }
+
+ g_free (escaped);
+ } else {
+ new_value = tracker_escape_metadata (value);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+
+ /* FIXME Postprocessing is evil and should be elsewhere */
+ if (strcmp (key, "Image:Keywords") == 0) {
+ g_hash_table_insert (metadata,
+ g_strdup ("Image:HasKeywords"),
+ tracker_escape_metadata ("1"));
+ }
+ }
+
+ /* Adding certain fields also to HasKeywords FIXME Postprocessing is evil */
+ if ((strcmp (key, "Image:Title") == 0) ||
+ (strcmp (key, "Image:Description") == 0) ) {
+ g_hash_table_insert (metadata,
+ g_strdup ("Image:HasKeywords"),
+ tracker_escape_metadata ("1"));
+ }
+}
+
static gchar *
date_to_iso8601 (const gchar *date)
{
@@ -261,14 +308,16 @@ read_exif (const unsigned char *buffer,
str = (*p->post) (buffer);
- g_hash_table_insert (metadata,
- g_strdup (p->name),
- tracker_escape_metadata (str));
+ metadata_append (metadata,
+ g_strdup (p->name),
+ tracker_escape_metadata (str),
+ p->multi);
g_free (str);
} else {
- g_hash_table_insert (metadata,
- g_strdup (p->name),
- tracker_escape_metadata (buffer));
+ metadata_append (metadata,
+ g_strdup (p->name),
+ tracker_escape_metadata (buffer),
+ p->multi);
}
}
}
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c
index 114236f..22533dd 100644
--- a/src/tracker-extract/tracker-extract-png.c
+++ b/src/tracker-extract/tracker-extract-png.c
@@ -51,6 +51,7 @@ typedef gchar * (*PostProcessor) (gchar *);
typedef struct {
const gchar *name;
const gchar *type;
+ gboolean multi;
PostProcessor post;
} TagProcessors;
@@ -59,16 +60,16 @@ static void extract_png (const gchar *filename,
GHashTable *metadata);
static TagProcessors tag_processors[] = {
- { "Author", "Image:Creator", NULL },
- { "Creator", "Image:Creator", NULL },
- { "Description", "Image:Description", NULL },
- { "Comment", "Image:Comments", NULL },
- { "Copyright", "File:Copyright", NULL },
- { "Creation Time", "Image:Date", rfc1123_to_iso8601_date },
- { "Title", "Image:Title", NULL },
- { "Software", "Image:Software", NULL },
- { "Disclaimer", "File:License", NULL },
- { NULL, NULL, NULL },
+ { "Author", "Image:Creator", FALSE, NULL },
+ { "Creator", "Image:Creator", FALSE, NULL },
+ { "Description", "Image:Description", FALSE, NULL },
+ { "Comment", "Image:Comments", FALSE, NULL },
+ { "Copyright", "File:Copyright", FALSE, NULL },
+ { "Creation Time", "Image:Date", FALSE, rfc1123_to_iso8601_date },
+ { "Title", "Image:Title", FALSE, NULL },
+ { "Software", "Image:Software", FALSE, NULL },
+ { "Disclaimer", "File:License", FALSE, NULL },
+ { NULL, NULL, FALSE, NULL },
};
static TrackerExtractData data[] = {
@@ -87,6 +88,57 @@ rfc1123_to_iso8601_date (gchar *date)
}
static void
+metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append)
+{
+ gchar *new_value;
+ gchar *orig;
+ gchar **list;
+ gboolean found = FALSE;
+ guint i;
+
+ if (append && (orig = g_hash_table_lookup (metadata, key))) {
+ gchar *escaped;
+
+ escaped = tracker_escape_metadata (value);
+
+ list = g_strsplit (orig, "|", -1);
+ for (i=0; list[i]; i++) {
+ if (strcmp (list[i], escaped) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ g_strfreev(list);
+
+ if (!found) {
+ new_value = g_strconcat (orig, "|", escaped, NULL);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+ }
+
+ g_free (escaped);
+ } else {
+ new_value = tracker_escape_metadata (value);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+
+ /* FIXME Postprocessing is evil and should be elsewhere */
+ if (strcmp (key, "Image:Keywords") == 0) {
+ g_hash_table_insert (metadata,
+ g_strdup ("Image:HasKeywords"),
+ tracker_escape_metadata ("1"));
+ }
+ }
+
+ /* Adding certain fields also to keywords FIXME Postprocessing is evil */
+ if ((strcmp (key, "Image:Title") == 0) ||
+ (strcmp (key, "Image:Description") == 0) ) {
+ metadata_append (metadata, "Image:Keywords", value, TRUE);
+ g_hash_table_insert (metadata,
+ g_strdup ("Image:HasKeywords"),
+ tracker_escape_metadata ("1"));
+ }
+}
+
+static void
read_metadata (png_structp png_ptr,
png_infop info_ptr,
GHashTable *metadata)
@@ -123,15 +175,17 @@ read_metadata (png_structp png_ptr,
str = (*tag_processors[j].post) (text_ptr[i].text);
if (str) {
- g_hash_table_insert (metadata,
- g_strdup (tag_processors[j].type),
- tracker_escape_metadata (str));
+ metadata_append (metadata,
+ g_strdup (tag_processors[j].type),
+ tracker_escape_metadata (str),
+ tag_processors[j].multi);
g_free (str);
}
} else {
- g_hash_table_insert (metadata,
- g_strdup (tag_processors[j].type),
- tracker_escape_metadata (text_ptr[i].text));
+ metadata_append (metadata,
+ g_strdup (tag_processors[j].type),
+ tracker_escape_metadata (text_ptr[i].text),
+ tag_processors[j].multi);
}
break;
diff --git a/src/tracker-extract/tracker-extract-tiff.c b/src/tracker-extract/tracker-extract-tiff.c
index 93d5567..e0e567a 100644
--- a/src/tracker-extract/tracker-extract-tiff.c
+++ b/src/tracker-extract/tracker-extract-tiff.c
@@ -23,6 +23,7 @@
#include <glib.h>
#include <glib/gstdio.h>
+#include <string.h>
#include <tiff.h>
#include <tiffio.h>
@@ -51,6 +52,7 @@ typedef struct {
guint tag;
gchar *name;
TagType type;
+ gboolean multi;
PostProcessor post;
} TiffTag;
@@ -65,33 +67,33 @@ static TrackerExtractData data[] = {
/* FIXME: We are missing some */
static TiffTag tags[] = {
- { TIFFTAG_ARTIST, "Image:Creator", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_COPYRIGHT, "File:Copyright", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_DATETIME, "Image:Date", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_DOCUMENTNAME, "Image:Title", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_IMAGEDESCRIPTION, "Image:Comments", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_IMAGEWIDTH, "Image:Width", TIFF_TAGTYPE_UINT32, NULL },
- { TIFFTAG_IMAGELENGTH, "Image:Height", TIFF_TAGTYPE_UINT32, NULL },
- { TIFFTAG_MAKE, "Image:CameraMake", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_MODEL, "Image:CameraModel", TIFF_TAGTYPE_STRING, NULL },
- { TIFFTAG_ORIENTATION, "Image:Orientation", TIFF_TAGTYPE_UINT16, NULL },
- { TIFFTAG_SOFTWARE, "Image:Software", TIFF_TAGTYPE_STRING, NULL },
- { -1, NULL, TIFF_TAGTYPE_UNDEFINED, NULL }
+ { TIFFTAG_ARTIST, "Image:Creator", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_COPYRIGHT, "File:Copyright", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_DATETIME, "Image:Date", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_DOCUMENTNAME, "Image:Title", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_IMAGEDESCRIPTION, "Image:Comments", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_IMAGEWIDTH, "Image:Width", TIFF_TAGTYPE_UINT32, FALSE, NULL },
+ { TIFFTAG_IMAGELENGTH, "Image:Height", TIFF_TAGTYPE_UINT32, FALSE, NULL },
+ { TIFFTAG_MAKE, "Image:CameraMake", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_MODEL, "Image:CameraModel", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { TIFFTAG_ORIENTATION, "Image:Orientation", TIFF_TAGTYPE_UINT16, FALSE, NULL },
+ { TIFFTAG_SOFTWARE, "Image:Software", TIFF_TAGTYPE_STRING, FALSE, NULL },
+ { -1, NULL, TIFF_TAGTYPE_UNDEFINED, FALSE, NULL }
};
static TiffTag exiftags[] = {
- { EXIFTAG_EXPOSURETIME, "Image:ExposureTime", TIFF_TAGTYPE_DOUBLE, NULL},
- { EXIFTAG_FNUMBER, "Image:FNumber", TIFF_TAGTYPE_DOUBLE, NULL},
- { EXIFTAG_EXPOSUREPROGRAM, "Image:ExposureProgram", TIFF_TAGTYPE_UINT16, NULL },
- { EXIFTAG_ISOSPEEDRATINGS, "Image:ISOSpeed", TIFF_TAGTYPE_C16_UINT16, NULL},
- { EXIFTAG_DATETIMEORIGINAL, "Image:Date", TIFF_TAGTYPE_STRING, date_to_iso8601 },
- { EXIFTAG_METERINGMODE, "Image:MeteringMode", TIFF_TAGTYPE_UINT16, NULL},
- { EXIFTAG_FLASH, "Image:Flash", TIFF_TAGTYPE_UINT16, NULL},
- { EXIFTAG_FOCALLENGTH, "Image:FocalLength", TIFF_TAGTYPE_DOUBLE, NULL},
- { EXIFTAG_PIXELXDIMENSION, "Image:Width", TIFF_TAGTYPE_UINT32, NULL},
- { EXIFTAG_PIXELYDIMENSION, "Image:Height", TIFF_TAGTYPE_UINT32, NULL},
- { EXIFTAG_WHITEBALANCE, "Image:WhiteBalance", TIFF_TAGTYPE_UINT16, NULL},
- { -1, NULL, TIFF_TAGTYPE_UNDEFINED, NULL }
+ { EXIFTAG_EXPOSURETIME, "Image:ExposureTime", TIFF_TAGTYPE_DOUBLE, FALSE, NULL},
+ { EXIFTAG_FNUMBER, "Image:FNumber", TIFF_TAGTYPE_DOUBLE, FALSE, NULL},
+ { EXIFTAG_EXPOSUREPROGRAM, "Image:ExposureProgram", TIFF_TAGTYPE_UINT16, FALSE, NULL },
+ { EXIFTAG_ISOSPEEDRATINGS, "Image:ISOSpeed", TIFF_TAGTYPE_C16_UINT16, FALSE, NULL},
+ { EXIFTAG_DATETIMEORIGINAL, "Image:Date", TIFF_TAGTYPE_STRING, FALSE, date_to_iso8601 },
+ { EXIFTAG_METERINGMODE, "Image:MeteringMode", TIFF_TAGTYPE_UINT16, FALSE, NULL},
+ { EXIFTAG_FLASH, "Image:Flash", TIFF_TAGTYPE_UINT16, FALSE, NULL},
+ { EXIFTAG_FOCALLENGTH, "Image:FocalLength", TIFF_TAGTYPE_DOUBLE, FALSE, NULL},
+ { EXIFTAG_PIXELXDIMENSION, "Image:Width", TIFF_TAGTYPE_UINT32, FALSE, NULL},
+ { EXIFTAG_PIXELYDIMENSION, "Image:Height", TIFF_TAGTYPE_UINT32, FALSE, NULL},
+ { EXIFTAG_WHITEBALANCE, "Image:WhiteBalance", TIFF_TAGTYPE_UINT16, FALSE, NULL},
+ { -1, NULL, TIFF_TAGTYPE_UNDEFINED, FALSE, NULL }
};
static gchar *
@@ -105,6 +107,56 @@ date_to_iso8601 (gchar *date)
}
static void
+metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append)
+{
+ gchar *new_value;
+ gchar *orig;
+ gchar **list;
+ gboolean found = FALSE;
+ guint i;
+
+ if (append && (orig = g_hash_table_lookup (metadata, key))) {
+ gchar *escaped;
+
+ escaped = tracker_escape_metadata (value);
+
+ list = g_strsplit (orig, "|", -1);
+ for (i=0; list[i]; i++) {
+ if (strcmp (list[i], escaped) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ g_strfreev(list);
+
+ if (!found) {
+ new_value = g_strconcat (orig, "|", escaped, NULL);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+ }
+
+ g_free (escaped);
+ } else {
+ new_value = tracker_escape_metadata (value);
+ g_hash_table_insert (metadata, g_strdup (key), new_value);
+
+ /* FIXME Postprocessing is evil and should be elsewhere */
+ if (strcmp (key, "Image:Keywords") == 0) {
+ g_hash_table_insert (metadata,
+ g_strdup ("Image:HasKeywords"),
+ tracker_escape_metadata ("1"));
+ }
+ }
+
+ /* Adding certain fields also to keywords FIXME Postprocessing is evil */
+ if ((strcmp (key, "Image:Title") == 0) ||
+ (strcmp (key, "Image:Description") == 0) ) {
+ g_hash_table_insert (metadata,
+ g_strdup ("Image:HasKeywords"),
+ tracker_escape_metadata ("1"));
+ }
+}
+
+static void
extract_tiff (const gchar *filename,
GHashTable *metadata)
{
@@ -205,13 +257,15 @@ extract_tiff (const gchar *filename,
}
if (tag->post) {
- g_hash_table_insert (metadata,
- g_strdup (tag->name),
- tracker_escape_metadata ((*tag->post) (buffer)));
+ metadata_append (metadata,
+ g_strdup (tag->name),
+ tracker_escape_metadata ((*tag->post) (buffer)),
+ tag->multi);
} else {
- g_hash_table_insert (metadata,
- g_strdup (tag->name),
- tracker_escape_metadata (buffer));
+ metadata_append (metadata,
+ g_strdup (tag->name),
+ tracker_escape_metadata (buffer),
+ tag->multi);
}
}
}
@@ -254,13 +308,15 @@ extract_tiff (const gchar *filename,
}
if (tag->post) {
- g_hash_table_insert (metadata,
- g_strdup (tag->name),
- tracker_escape_metadata ((*tag->post) (buffer)));
+ metadata_append (metadata,
+ g_strdup (tag->name),
+ tracker_escape_metadata ((*tag->post) (buffer)),
+ tag->multi);
} else {
- g_hash_table_insert (metadata,
- g_strdup (tag->name),
- tracker_escape_metadata (buffer));
+ metadata_append (metadata,
+ g_strdup (tag->name),
+ tracker_escape_metadata (buffer),
+ tag->multi);
}
}
diff --git a/src/tracker-extract/tracker-iptc.c b/src/tracker-extract/tracker-iptc.c
index 88d98a3..44efab7 100644
--- a/src/tracker-extract/tracker-iptc.c
+++ b/src/tracker-extract/tracker-iptc.c
@@ -100,11 +100,8 @@ metadata_append (GHashTable *metadata, gchar *key, gchar *value, gboolean append
}
/* Adding certain fields also to keywords FIXME Postprocessing is evil */
- if ((strcmp (key, "Image:Location") == 0) ||
- (strcmp (key, "Image:Sublocation") == 0) ||
- (strcmp (key, "Image:Country") == 0) ||
- (strcmp (key, "Image:City") == 0) ) {
- metadata_append (metadata, "Image:Keywords", value, TRUE);
+ if ((strcmp (key, "Image:Title") == 0) ||
+ (strcmp (key, "Image:Description") == 0) ) {
g_hash_table_insert (metadata,
g_strdup ("Image:HasKeywords"),
tracker_escape_metadata ("1"));
diff --git a/src/tracker-extract/tracker-xmp.c b/src/tracker-extract/tracker-xmp.c
index c9d9282..5b4a5a1 100644
--- a/src/tracker-extract/tracker-xmp.c
+++ b/src/tracker-extract/tracker-xmp.c
@@ -261,6 +261,7 @@ tracker_xmp_iter_simple (GHashTable *metadata,
if (strcmp (schema, NS_DC) == 0) {
if (strcmp (name, "title") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Title", value, append, FALSE);
+ tracker_append_string_to_hash_table (metadata, "Image:HasKeywords", "1", FALSE, FALSE);
}
else if (strcmp (name, "rights") == 0) {
tracker_append_string_to_hash_table (metadata, "File:Copyright", value, append, FALSE);
@@ -270,6 +271,7 @@ tracker_xmp_iter_simple (GHashTable *metadata,
}
else if (strcmp (name, "description") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Description", value, append, FALSE);
+ tracker_append_string_to_hash_table (metadata, "Image:HasKeywords", "1", FALSE, FALSE);
}
else if (strcmp (name, "date") == 0) {
/* exempi considers this an array while we want a single value */
@@ -395,34 +397,18 @@ tracker_xmp_iter_simple (GHashTable *metadata,
else if (strcmp (schema, NS_IPTC4XMP) == 0) {
if (strcmp (name, "Location") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Location", value, append, FALSE);
-
- /* Added to the valid keywords */
- tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
- tracker_append_string_to_hash_table (metadata, "Image:HasKeywords", "1", FALSE, FALSE);
}
if (strcmp (name, "Sublocation") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Sublocation", value, append, FALSE);
-
- /* Added to the valid keywords */
- tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
- tracker_append_string_to_hash_table (metadata, "Image:HasKeywords", "1", FALSE, FALSE);
}
}
/* Photoshop scheme */
else if (strcmp (schema, NS_PHOTOSHOP) == 0) {
if (strcmp (name, "City") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:City", value, append, FALSE);
-
- /* Added to the valid keywords */
- tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
- tracker_append_string_to_hash_table (metadata, "Image:HasKeywords", "1", FALSE, FALSE);
}
else if (strcmp (name, "Country") == 0) {
tracker_append_string_to_hash_table (metadata, "Image:Country", value, append, FALSE);
-
- /* Added to the valid keywords */
- tracker_append_string_to_hash_table (metadata, "Image:Keywords", value, TRUE, FALSE);
- tracker_append_string_to_hash_table (metadata, "Image:HasKeywords", "1", FALSE, FALSE);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]