Mercurial > geeqie
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;