Mercurial > geeqie.yaz
changeset 1665:f7183cf53efa
fixed writting to gqview legacy format
author | nadvornik |
---|---|
date | Mon, 29 Jun 2009 19:48:14 +0000 |
parents | d8588968f611 |
children | de25b265ab64 |
files | src/metadata.c |
diffstat | 1 files changed, 23 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/metadata.c Sun Jun 28 13:41:51 2009 +0000 +++ b/src/metadata.c Mon Jun 29 19:48:14 2009 +0000 @@ -59,6 +59,7 @@ static gboolean metadata_write_queue_idle_cb(gpointer data); static gboolean metadata_legacy_write(FileData *fd); static void metadata_legacy_delete(FileData *fd, const gchar *except); +static gboolean metadata_file_read(gchar *path, GList **keywords, gchar **comment); @@ -286,12 +287,9 @@ *------------------------------------------------------------------- */ -static gboolean metadata_file_write(gchar *path, GHashTable *modified_xmp) +static gboolean metadata_file_write(gchar *path, const GList *keywords, const gchar *comment) { SecureSaveInfo *ssi; - GList *keywords = g_hash_table_lookup(modified_xmp, KEYWORD_KEY); - GList *comment_l = g_hash_table_lookup(modified_xmp, COMMENT_KEY); - gchar *comment = comment_l ? comment_l->data : NULL; ssi = secure_open(path); if (!ssi) return FALSE; @@ -320,17 +318,36 @@ { gboolean success = FALSE; gchar *metadata_pathl; + gpointer keywords; + gpointer comment_l; + gboolean have_keywords; + gboolean have_comment; + const gchar *comment; + GList *orig_keywords = NULL; + gchar *orig_comment = NULL; g_assert(fd->change && fd->change->dest); DEBUG_1("Saving comment: %s", fd->change->dest); + if (!fd->modified_xmp) return TRUE; + metadata_pathl = path_from_utf8(fd->change->dest); - success = metadata_file_write(metadata_pathl, fd->modified_xmp); + have_keywords = g_hash_table_lookup_extended(fd->modified_xmp, KEYWORD_KEY, NULL, &keywords); + have_comment = g_hash_table_lookup_extended(fd->modified_xmp, COMMENT_KEY, NULL, &comment_l); + comment = comment_l ? ((GList *)comment_l)->data : NULL; + + if (!have_keywords || !have_comment) metadata_file_read(metadata_pathl, &orig_keywords, &orig_comment); + + success = metadata_file_write(metadata_pathl, + have_keywords ? (GList *)keywords : orig_keywords, + have_comment ? comment : orig_comment); g_free(metadata_pathl); - + g_free(orig_comment); + string_list_free(orig_keywords); + return success; }