changeset 1683:6a97ed4d2ba5

fixed writting to gqview legacy format
author nadvornik
date Mon, 29 Jun 2009 19:48:14 +0000
parents 45762bd3a1ed
children a14d7bfe666c
files src/metadata.c
diffstat 1 files changed, 23 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/metadata.c	Mon Jun 29 16:32:43 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);
 
 
 
@@ -284,12 +285,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;
@@ -318,17 +316,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;
 }