diff src/metadata.c @ 1214:31402ecb2aed

write metadata after timeout, image change or dir change
author nadvornik
date Mon, 22 Dec 2008 18:29:25 +0000
parents e2bbe90b0dcd
children 46e4fda574dd
line wrap: on
line diff
--- a/src/metadata.c	Mon Dec 22 18:15:26 2008 +0000
+++ b/src/metadata.c	Mon Dec 22 18:29:25 2008 +0000
@@ -123,7 +123,16 @@
 	metadata_write_queue = g_list_prepend(metadata_write_queue, fd);
 	file_data_ref(fd);
 
-	if (metadata_write_idle_id == -1) metadata_write_idle_id = g_idle_add(metadata_write_queue_idle_cb, NULL);
+	if (metadata_write_idle_id != -1) 
+		{
+		g_source_remove(metadata_write_idle_id);
+		metadata_write_idle_id = -1;
+		}
+	
+	if (options->metadata.confirm_timeout > 0)
+		{
+		metadata_write_idle_id = g_timeout_add(options->metadata.confirm_timeout * 1000, metadata_write_queue_idle_cb, NULL);
+		}
 }
 
 
@@ -161,7 +170,7 @@
 }
 
 
-static gboolean metadata_write_queue_idle_cb(gpointer data)
+gboolean metadata_write_queue_confirm()
 {
 	GList *work;
 	GList *to_approve = NULL;
@@ -184,11 +193,18 @@
 	file_util_write_metadata(NULL, to_approve, NULL);
 	
 	filelist_free(to_approve);
+	
+	return (metadata_write_queue != NULL);
+}
 
+static gboolean metadata_write_queue_idle_cb(gpointer data)
+{
+	metadata_write_queue_confirm();
 	metadata_write_idle_id = -1;
 	return FALSE;
 }
 
+
 gboolean metadata_write_exif(FileData *fd, FileData *sfd)
 {
 	gboolean success;