changeset 1713:30d649102a9f

fixes sidecar file grouping files with a number in extension were listed twice, it caused problems later
author nadvornik
date Mon, 07 Sep 2009 19:48:05 +0000
parents 7f91f906f9c2
children ae8f35af9301
files src/filedata.c
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/filedata.c	Mon Sep 07 08:24:09 2009 +0000
+++ b/src/filedata.c	Mon Sep 07 19:48:05 2009 +0000
@@ -367,7 +367,7 @@
 		
 			file_data_disconnect_sidecar_file(fd, sfd);
 			}
-		if (sfd) file_data_check_sidecars(sfd, FALSE); /* this will group the sidecars back together */
+		if (sfd) file_data_check_sidecars(sfd, NULL); /* this will group the sidecars back together */
 		file_data_send_notification(fd, NOTIFY_REREAD);
 		}
 	else
@@ -444,7 +444,7 @@
 	GList *list = NULL;
 
 	sl = path_from_utf8(path);
-	
+
 	extl = strrchr(sl, '.');
 	if (extl)
 		{
@@ -455,13 +455,25 @@
 		for (i = 0; i < (1 << ext_len); i++)
 			{
 			struct stat st;
+			gboolean skip = FALSE;
 			for (j = 0; j < ext_len; j++)
 				{
 				if (i & (1 << (ext_len - 1 - j))) 
+					{
 					extl[j] = g_ascii_tolower(extl[j]);
+					/* make sure the result does not contain duplicates */
+					if (extl[j] == g_ascii_toupper(extl[j]))
+						{
+						/* no change, probably a number, we have already tested this combination */
+						skip = TRUE;
+						break;
+						}
+					}
 				else
 					extl[j] = g_ascii_toupper(extl[j]);
 				}
+			if (skip) continue;
+
 			if (stat(sl, &st) == 0)
 				{
 				list = g_list_prepend(list, file_data_new_local(sl, &st, FALSE, FALSE));