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 06dfd6264200c37364263c39330377d5c04b9ad7..aa5a775c7461022ef1b20077dc448f03a26ed140 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 772306373424e127be89c7438c094206841dda3e..b56ab4a8e00c3894588ec8fe7e6497754d979f1c 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 e9e036a65cbdf21eec3bd037a656f54cf0b04f46..54a462ad84ae13fac0f1cf7d7286bf8c6d64cdbc 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 e16b2f650eb84b4d11cf187eee0c7df35698dd68..ec4733c171c30f0844831f7a77060dd6652213bc 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 8c681dc87b7abb65bd9c1df3dbbdf79da06eb5dd..9238f52a615f2d7e61a469923edf829b28995cc9 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)