diff src/metadata.c @ 1288:10073464e6aa

use metadata_read_* functions where possible switch exiv2 to utf8 charset support for exiv2 formatting that depends on other tags: http://dev.robotbattle.com/bugs/view.php?id=0000516
author nadvornik
date Sat, 07 Feb 2009 19:01:21 +0000
parents 8b89e3ff286b
children 361120a66609
line wrap: on
line diff
--- a/src/metadata.c	Fri Feb 06 23:49:03 2009 +0000
+++ b/src/metadata.c	Sat Feb 07 19:01:21 2009 +0000
@@ -447,14 +447,14 @@
 	return g_list_reverse(newlist);
 }
 
-GList *metadata_read_list(FileData *fd, const gchar *key)
+GList *metadata_read_list(FileData *fd, const gchar *key, MetadataFormat format)
 {
 	ExifData *exif;
 	GList *list = NULL;
 	if (!fd) return NULL;
 
 	/* unwritten data overide everything */
-	if (fd->modified_xmp)
+	if (fd->modified_xmp && format == METADATA_PLAIN)
 		{
 	        list = g_hash_table_lookup(fd->modified_xmp, key);
 		if (list) return string_list_copy(list);
@@ -480,14 +480,14 @@
 	
 	exif = exif_read_fd(fd); /* this is cached, thus inexpensive */
 	if (!exif) return NULL;
-	list = exif_get_metadata(exif, key);
+	list = exif_get_metadata(exif, key, format);
 	exif_free_fd(fd, exif);
 	return list;
 }
 
-gchar *metadata_read_string(FileData *fd, const gchar *key)
+gchar *metadata_read_string(FileData *fd, const gchar *key, MetadataFormat format)
 {
-	GList *string_list = metadata_read_list(fd, key);
+	GList *string_list = metadata_read_list(fd, key, format);
 	if (string_list)
 		{
 		gchar *str = string_list->data;
@@ -497,10 +497,23 @@
 		}
 	return NULL;
 }
+
+guint64 metadata_read_int(FileData *fd, const gchar *key, guint64 fallback)
+{
+	guint64 ret;
+	gchar *endptr;
+	gchar *string = metadata_read_string(fd, key, METADATA_PLAIN);
+	if (!string) return fallback;
+	
+	ret = g_ascii_strtoull(string, &endptr, 10);
+	if (string == endptr) ret = fallback;
+	g_free(string);
+	return ret;
+}
 	
 gboolean metadata_append_string(FileData *fd, const gchar *key, const char *value)
 {
-	gchar *str = metadata_read_string(fd, key);
+	gchar *str = metadata_read_string(fd, key, METADATA_PLAIN);
 	
 	if (!str) 
 		{
@@ -518,7 +531,7 @@
 
 gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *values)
 {
-	GList *list = metadata_read_list(fd, key);
+	GList *list = metadata_read_list(fd, key, METADATA_PLAIN);
 	
 	if (!list) 
 		{
@@ -598,7 +611,7 @@
 {
 	GList *keywords;
 	gboolean found = FALSE;
-	keywords = metadata_read_list(fd, KEYWORD_KEY);
+	keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
 	if (keywords)
 		{
 		GList *work = keywords;
@@ -625,7 +638,7 @@
 	gboolean found = FALSE;
 	gboolean changed = FALSE;
 	GList *work;
-	keywords = metadata_read_list(fd, KEYWORD_KEY);
+	keywords = metadata_read_list(fd, KEYWORD_KEY, METADATA_PLAIN);
 
 	work = keywords;