diff src/filedata.c @ 1662:7a4034d32503

warn if another operation is performed on a file with unsaved metadata
author nadvornik
date Sun, 28 Jun 2009 09:08:25 +0000
parents 8b2ba0e1fc09
children ece97f3f2305
line wrap: on
line diff
--- a/src/filedata.c	Sat Jun 27 22:58:20 2009 +0000
+++ b/src/filedata.c	Sun Jun 28 09:08:25 2009 +0000
@@ -1855,6 +1855,16 @@
 	dir = remove_level_from_path(fd->path);
 	
 	if (fd->change->type != FILEDATA_CHANGE_DELETE &&
+	    fd->change->type != FILEDATA_CHANGE_MOVE && /* the unsaved metadata should survive move and rename operations */
+	    fd->change->type != FILEDATA_CHANGE_RENAME &&
+	    fd->change->type != FILEDATA_CHANGE_WRITE_METADATA &&
+	    fd->modified_xmp)
+		{
+		ret |= CHANGE_WARN_UNSAVED_META;
+		DEBUG_1("Change checked: unsaved metadata: %s", fd->path);
+		}
+	
+	if (fd->change->type != FILEDATA_CHANGE_DELETE &&
 	    fd->change->type != FILEDATA_CHANGE_WRITE_METADATA &&
 	    !access_file(fd->path, R_OK))
 		{
@@ -2129,6 +2139,12 @@
 		g_string_append(result, _("source and destination have different extension"));
 		}
 
+	if (error & CHANGE_WARN_UNSAVED_META)
+		{
+		if (result->len > 0) g_string_append(result, ", ");
+		g_string_append(result, _("there are unsaved metadata changes for the file"));
+		}
+
 	return g_string_free(result, FALSE);
 }