And here's a decent fix for correctly recognizing the the
authorTon Roosendaal <ton@blender.org>
Sun, 30 Jan 2011 13:12:03 +0000 (13:12 +0000)
committerTon Roosendaal <ton@blender.org>
Sun, 30 Jan 2011 13:12:03 +0000 (13:12 +0000)
.blend1 etc backups.
Proves again that lazy coders only make bad code :)

Implementation note:
The filewindow now recoginizes .blend version backups as
a special type, so filtering for .blend files themselves
ignores it. However, they're recognized correctly as valid
.blend files, and draw an icon as .blend file when filtering
is off. Can become a distinct icon if we want...

source/blender/blenlib/intern/path_util.c
source/blender/blenloader/intern/readfile.c
source/blender/editors/space_file/file_draw.c
source/blender/editors/space_file/filelist.c
source/blender/makesdna/DNA_space_types.h

index 06dfd62..aa5a775 100644 (file)
@@ -1315,24 +1315,20 @@ void BLI_make_file_string(const char *relabase, char *string,  const char *dir,
        BLI_clean(string);
 }
 
-/* if ext is .blend*, it doesn't compare last char */
 int BLI_testextensie(const char *str, const char *ext)
 {
        short a, b;
-       int retval= 0;
+       int retval;
        
        a= strlen(str);
        b= strlen(ext);
        
        if(a==0 || b==0 || b>=a) {
                retval = 0;
-       }
-       else {
-               /* allow .blend1 .blend2 */
-               char *loc= BLI_strcasestr(str+a-b-1, ext);
-               
-               if(loc)
-                       retval= 1;
+       } else if (BLI_strcasecmp(ext, str + a - b)) {
+               retval = 0;     
+       } else {
+               retval = 1;
        }
        
        return (retval);
index 7723063..b56ab4a 100644 (file)
@@ -1039,7 +1039,7 @@ void blo_freefiledata(FileData *fd)
 
 int BLO_has_bfile_extension(char *str)
 {
-       return (BLI_testextensie(str, ".ble") || BLI_testextensie(str, ".blend")||BLI_testextensie(str, ".blend.gz"));
+       return (BLI_testextensie(str, ".ble") || BLI_testextensie(str, ".blend") || BLI_testextensie(str, ".blend.gz"));
 }
 
 int BLO_is_a_library(const char *path, char *dir, char *group)
index e9e036a..54a462a 100644 (file)
@@ -256,6 +256,8 @@ static int get_file_icon(struct direntry *file)
        }
        else if (file->flags & BLENDERFILE)
                return ICON_FILE_BLEND;
+       else if (file->flags & BLENDERFILE_BACKUP)
+               return ICON_FILE_BLEND;
        else if (file->flags & IMAGEFILE)
                return ICON_FILE_IMAGE;
        else if (file->flags & MOVIEFILE)
index e16b2f6..ec4733c 100644 (file)
@@ -722,10 +722,38 @@ void filelist_setfilter_types(struct FileList* filelist, const char *filter_glob
        BLI_strncpy(filelist->filter_glob, filter_glob, sizeof(filelist->filter_glob));
 }
 
+static int file_is_blend_backup(const char *str)
+{
+       short a, b;
+       int retval= 0;
+       
+       a= strlen(str);
+       b= 7;
+       
+       if(a==0 || b>=a);
+       else {
+               char *loc;
+               
+               if(a > b+1)
+                       b++;
+               
+               /* allow .blend1 .blend2 .blend32 */
+               loc= BLI_strcasestr(str+a-b, ".blend");
+               
+               if(loc)
+                       retval= 1;
+       }
+       
+       return (retval);
+}
+
+
 static int file_extension_type(char *relname)
 {
        if(BLO_has_bfile_extension(relname)) {
                return BLENDERFILE;
+       } else if(file_is_blend_backup(relname)) {
+               return BLENDERFILE_BACKUP;
        } else if(BLI_testextensie(relname, ".py")) {
                return PYSCRIPTFILE;
        } else if(BLI_testextensie(relname, ".txt")
@@ -757,7 +785,7 @@ int ED_file_extension_icon(char *relname)
 {
        int type= file_extension_type(relname);
        
-       if (type == BLENDERFILE)
+       if (type == BLENDERFILE || type==BLENDERFILE_BACKUP)
                return ICON_FILE_BLEND;
        else if (type ==  IMAGEFILE)
                return ICON_FILE_IMAGE;
index 8c681dc..9238f52 100644 (file)
@@ -698,7 +698,7 @@ enum FileSortTypeE {
 #define EDITING                                (1<<0)
 #define ACTIVEFILE                     (1<<1)
 #define BLENDERFILE                    (1<<2)
-#define PSXFILE                                (1<<3)
+#define BLENDERFILE_BACKUP     (1<<3)
 #define IMAGEFILE                      (1<<4)
 #define MOVIEFILE                      (1<<5)
 #define PYSCRIPTFILE           (1<<6)