gthumb r2258 - in trunk: . libgthumb



Author: mjc
Date: Wed Feb  6 13:38:22 2008
New Revision: 2258
URL: http://svn.gnome.org/viewvc/gthumb?rev=2258&view=rev

Log:
2008-02-06  Michael J. Chudobiak  <mjc svn gnome org>

        * libgthumb/comments.c: (load_comment_from_metadata),
        (save_comment_to_metadata):
        * libgthumb/gth-exif-utils.c: (get_metadata_time_from_fd),
        (update_metadata):
        * libgthumb/gth-exif-utils.h:
        Use two different tagsets for comment dates and sorting dates.
        Comments prefer the Exif DateTime tag, sorting prefers the
        DateTimeOriginal tag.



Modified:
   trunk/ChangeLog
   trunk/libgthumb/comments.c
   trunk/libgthumb/gth-exif-utils.c
   trunk/libgthumb/gth-exif-utils.h

Modified: trunk/libgthumb/comments.c
==============================================================================
--- trunk/libgthumb/comments.c	(original)
+++ trunk/libgthumb/comments.c	Wed Feb  6 13:38:22 2008
@@ -387,7 +387,7 @@
                 g_free (metadata_string);
         }
 
-        metadata_time = get_exif_time (file);
+        metadata_time = get_metadata_time_from_fd (file, TAG_NAME_SETS[COMMENT_DATE_TAG_NAMES]);
         if (metadata_time > (time_t) 0)
                 data->time = metadata_time;
 
@@ -434,8 +434,8 @@
         file = file_data_new (uri, NULL);
         file_data_update_all (file, FALSE);
 
-	add_metadata = simple_add_metadata (add_metadata, "Exif.Photo.UserComment", data->comment);
-	add_metadata = simple_add_metadata (add_metadata, "Xmp.iptc.Location", data->place);
+	add_metadata = simple_add_metadata (add_metadata,  TAG_NAME_SETS[COMMENT_TAG_NAMES][0], data->comment);
+	add_metadata = simple_add_metadata (add_metadata,  TAG_NAME_SETS[LOCATION_TAG_NAMES][0], data->place);
 
         localtime_r (&data->time, &tm);
         buf = g_strdup_printf ("%04d:%02d:%02d %02d:%02d:%02d ",
@@ -445,7 +445,7 @@
                                tm.tm_hour,
                                tm.tm_min,
                                tm.tm_sec );
-        add_metadata = simple_add_metadata (add_metadata, "Exif.Image.DateTime", buf);
+        add_metadata = simple_add_metadata (add_metadata, TAG_NAME_SETS[COMMENT_DATE_TAG_NAMES][0], buf);
 
         if (data->keywords_n > 0) {
                 if (data->keywords_n == 1)
@@ -455,7 +455,7 @@
         } else
                 keywords_str = g_strdup ("");
 
-	add_metadata = simple_add_metadata (add_metadata, "Xmp.dc.subject", keywords_str);
+	add_metadata = simple_add_metadata (add_metadata, TAG_NAME_SETS[KEYWORD_TAG_NAMES][0], keywords_str);
 
 	update_and_save_metadata (file->path, file->path, add_metadata);
 	free_metadata (add_metadata);

Modified: trunk/libgthumb/gth-exif-utils.c
==============================================================================
--- trunk/libgthumb/gth-exif-utils.c	(original)
+++ trunk/libgthumb/gth-exif-utils.c	Wed Feb  6 13:38:22 2008
@@ -39,19 +39,34 @@
    The arrays below define the valid tags for a particular piece of 
    information, in decreasing order of preference (best one first) */
 
-const char *_DATE_TAG_NAMES[] = {
+/* When reading / writing comment dates, we use a slightly different
+   set of tags than for date sorting. */
+const char *_COMMENT_DATE_TAG_NAMES[] = {
+        "Exif.Image.DateTime",
+        "Xmp.exif.DateTime",
         "Exif.Photo.DateTimeOriginal",
         "Xmp.exif.DateTimeOriginal",
         "Exif.Photo.DateTimeDigitized",
         "Xmp.exif.DateTimeDigitized",
-        "Exif.Image.DateTime",
-        "Xmp.exif.DateTime",
 	"Xmp.xmp.CreateDate",
         "Xmp.photoshop.DateCreated",
 	"Xmp.xmp.ModifyDate",
 	"Xmp.xmp.MetadataDate",
 	NULL };
 
+const char *_SORTING_DATE_TAG_NAMES[] = {
+        "Exif.Photo.DateTimeOriginal",
+        "Xmp.exif.DateTimeOriginal",
+        "Exif.Photo.DateTimeDigitized",
+        "Xmp.exif.DateTimeDigitized",
+        "Exif.Image.DateTime",
+        "Xmp.exif.DateTime",
+        "Xmp.xmp.CreateDate",
+        "Xmp.photoshop.DateCreated",
+        "Xmp.xmp.ModifyDate",
+        "Xmp.xmp.MetadataDate",
+        NULL };
+
 const char *_EXPTIME_TAG_NAMES[] = {
         "Exif.Photo.ExposureTime",
 	"Xmp.exif.ExposureTime",
@@ -127,7 +142,8 @@
 
 /* if you add something here, also update the matching enum in gth-exif-utils.h */
 const char **TAG_NAME_SETS[] = {
-        _DATE_TAG_NAMES,
+        _COMMENT_DATE_TAG_NAMES,
+	_SORTING_DATE_TAG_NAMES,
         _EXPTIME_TAG_NAMES,
 	_EXPMODE_TAG_NAMES,
         _ISOSPEED_TAG_NAMES,
@@ -241,12 +257,12 @@
 
 
 time_t
-get_metadata_time_from_fd (FileData *fd)
+get_metadata_time_from_fd (FileData *fd, const char *tagnames[])
 {
 	char   *date = NULL;
 	time_t  result = 0;
 
-	date = get_metadata_tagset_string (fd, TAG_NAME_SETS[DATE_TAG_NAMES]);
+	date = get_metadata_tagset_string (fd, tagnames);
 	if (date != NULL)
 		result = exif_string_to_time_t (date);
 	
@@ -523,7 +539,7 @@
            override this sorting, if position is non-zero. */ 
         fd->metadata = g_list_sort (fd->metadata, (GCompareFunc) sort_by_tag_name); 
  	fd->exif_data_loaded = TRUE;
-	fd->exif_time = get_metadata_time_from_fd (fd);
+	fd->exif_time = get_metadata_time_from_fd (fd, TAG_NAME_SETS[SORTING_DATE_TAG_NAMES]);
 
 	g_free (local_file);
 

Modified: trunk/libgthumb/gth-exif-utils.h
==============================================================================
--- trunk/libgthumb/gth-exif-utils.h	(original)
+++ trunk/libgthumb/gth-exif-utils.h	Wed Feb  6 13:38:22 2008
@@ -61,7 +61,8 @@
 extern const char **TAG_NAME_SETS[];
 
 enum {
-	DATE_TAG_NAMES,
+	COMMENT_DATE_TAG_NAMES,
+	SORTING_DATE_TAG_NAMES,
 	EXPTIME_TAG_NAMES,
 	EXPMODE_TAG_NAMES,
 	ISOSPEED_TAG_NAMES,
@@ -82,7 +83,8 @@
 GthTransform  get_orientation_from_fd     (FileData     *fd);
 time_t        get_exif_time               (FileData     *fd);
 time_t        get_exif_time_or_mtime      (FileData     *fd);
-time_t        get_metadata_time_from_fd   (FileData     *fd);
+time_t        get_metadata_time_from_fd   (FileData     *fd,
+					   const char   *tagnames[]);
 time_t        get_metadata_time           (const char   *mime_type,
 					   const char   *uri,
 					   GList        *md);



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