changeset 1804:2cc889b20a9e

Unifying the datetime output The output of %date% and %formatted.DateTime% should be equivalent.
author mow
date Sat, 27 Feb 2010 20:34:54 +0000
parents a0f7dcd47c7f
children fccac8fde6c0
files src/exif-common.c src/filedata.c
diffstat 2 files changed, 30 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/exif-common.c	Wed Feb 17 21:05:10 2010 +0000
+++ b/src/exif-common.c	Sat Feb 27 20:34:54 2010 +0000
@@ -9,6 +9,8 @@
 #  include "config.h"
 #endif
 
+#define _XOPEN_SOURCE
+
 #include <stdio.h>
 #include <string.h>
 #include <fcntl.h>
@@ -188,6 +190,11 @@
 {
 	gchar *text = exif_get_data_as_text(exif, "Exif.Photo.DateTimeOriginal");
 	gchar *subsec = NULL;
+	gchar buf[128];
+	gchar *tmp;
+	gint buflen;
+	struct tm tm;
+	GError *error = NULL;
 
 	if (text)
 		{
@@ -198,9 +205,30 @@
 		text = exif_get_data_as_text(exif, "Exif.Image.DateTime");
 		if (text) subsec = exif_get_data_as_text(exif, "Exif.Photo.SubSecTime");
 		}
+
+	/* Convert the stuff into a tm struct */
+	if (text && strptime(text, "%Y:%m:%d %H:%M:%S", &tm))
+		{
+		buflen = strftime(buf, sizeof(buf), "%x %X", &tm);
+		if (buflen > 0)
+			{
+			tmp = g_locale_to_utf8(buf, buflen, NULL, NULL, &error);
+			if (error)
+				{
+				log_printf("Error converting locale strftime to UTF-8: %s\n", error->message);
+				g_error_free(error);
+				}
+			else
+				{
+				g_free(text);
+				text = g_strdup(tmp);
+				}
+			}
+		}
+
 	if (subsec)
 		{
-		gchar *tmp = text;
+		tmp = text;
 		text = g_strconcat(tmp, ".", subsec, NULL);
 		g_free(tmp);
 		g_free(subsec);
--- a/src/filedata.c	Wed Feb 17 21:05:10 2010 +0000
+++ b/src/filedata.c	Sat Feb 27 20:34:54 2010 +0000
@@ -116,7 +116,7 @@
 	btime = localtime(&t);
 
 	/* the %x warning about 2 digit years is not an error */
-	buflen = strftime(buf, sizeof(buf), "%x %H:%M", btime);
+	buflen = strftime(buf, sizeof(buf), "%x %X", btime);
 	if (buflen < 1) return "";
 
 	g_free(ret);