fix for fail thumbs being used when the failed thumbnail image is older then the...
authorCampbell Barton <ideasman42@gmail.com>
Mon, 16 Apr 2012 15:13:21 +0000 (15:13 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 16 Apr 2012 15:13:21 +0000 (15:13 +0000)
source/blender/blenlib/intern/storage.c
source/blender/imbuf/intern/thumbs.c

index 9bcbdcce12e44ddddf54651dd7288614b981cd6a..f4070f765198edb733d7821487060ba3a64dcf01 100644 (file)
@@ -551,6 +551,7 @@ void BLI_file_free_lines(LinkNode *lines)
        BLI_linklist_free(lines, (void(*)(void*)) MEM_freeN);
 }
 
+/** is file1 older then file2 */
 int BLI_file_older(const char *file1, const char *file2)
 {
 #ifdef WIN32
index 5c54fbab0cf1acc0e0481784d475251aae7d911e..5d64e1b2aecb29eaa21751c22d63edaaebfe1190 100644 (file)
@@ -223,6 +223,8 @@ static void thumbname_from_uri(const char* uri, char* thumb, const int thumb_len
        to_hex_char(hexdigest, digest, 16);
        hexdigest[32] = '\0';
        BLI_snprintf(thumb, thumb_len, "%s.png", hexdigest);
+
+       // printf("%s: '%s' --> '%s'\n", __func__, uri, thumb);
 }
 
 static int thumbpath_from_uri(const char* uri, char* path, const int path_len, ThumbSize size)
@@ -378,7 +380,9 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
                if (IMB_saveiff(img, temp, IB_rect | IB_metadata)) {
 #ifndef WIN32
                        chmod(temp, S_IRUSR | S_IWUSR);
-#endif 
+#endif
+                       // printf("%s saving thumb: '%s'\n", __func__, tpath);
+
                        BLI_rename(temp, tpath);
                }
 
@@ -441,7 +445,13 @@ ImBuf* IMB_thumb_manage(const char* path, ThumbSize size, ThumbSource source)
        if (thumbpath_from_uri(uri, thumb, sizeof(thumb), THB_FAIL)) {
                /* failure thumb exists, don't try recreating */
                if (BLI_exists(thumb)) {
-                       return NULL;
+                       /* clear out of date fail case */
+                       if (BLI_file_older(thumb, path)) {
+                               BLI_delete(thumb, 0, 0);
+                       }
+                       else {
+                               return NULL;
+                       }
                }
        }