Disable thumbnail generation when the thumbnail view is not enabled,

was slowing down browsing on NFS.
This commit is contained in:
Campbell Barton 2010-05-14 07:21:29 +00:00
parent 0524fc1df6
commit 02b8d3ca0f
3 changed files with 24 additions and 16 deletions

@ -105,6 +105,7 @@ typedef struct ThumbnailJob {
short *stop; short *stop;
short *do_update; short *do_update;
struct FileList* filelist; struct FileList* filelist;
FileSelectParams *params;
ReportList reports; ReportList reports;
} ThumbnailJob; } ThumbnailJob;
@ -1278,19 +1279,25 @@ static void thumbnails_startjob(void *tjv, short *stop, short *do_update)
tj->do_update= do_update; tj->do_update= do_update;
while ( (*stop==0) && (limg) ) { while ( (*stop==0) && (limg) ) {
if ( limg->flags & IMAGEFILE ) { /* skip if thumbnail view is not enabled, makes network filesystems browse faster */
limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_IMAGE); if(tj->params->display != FILE_IMGDISPLAY) {
} else if ( limg->flags & MOVIEFILE ) { PIL_sleep_ms(100); /* 10th of a sec should be enough */
limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_MOVIE); }
if (!limg->img) { else {
/* remember that file can't be loaded via IMB_open_anim */ if ( limg->flags & IMAGEFILE ) {
limg->flags &= ~MOVIEFILE; limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_IMAGE);
limg->flags |= MOVIEFILE_ICON; } else if ( limg->flags & MOVIEFILE ) {
} limg->img = IMB_thumb_manage(limg->path, THB_NORMAL, THB_SOURCE_MOVIE);
if (!limg->img) {
/* remember that file can't be loaded via IMB_open_anim */
limg->flags &= ~MOVIEFILE;
limg->flags |= MOVIEFILE_ICON;
}
}
*do_update = 1;
PIL_sleep_ms(10);
limg = limg->next;
} }
*do_update = 1;
PIL_sleep_ms(10);
limg = limg->next;
} }
} }
@ -1323,7 +1330,7 @@ static void thumbnails_free(void *tjv)
} }
void thumbnails_start(struct FileList* filelist, const struct bContext* C) void thumbnails_start(struct FileList* filelist, FileSelectParams *params, const struct bContext* C)
{ {
wmJob *steve; wmJob *steve;
ThumbnailJob *tj; ThumbnailJob *tj;
@ -1332,6 +1339,7 @@ void thumbnails_start(struct FileList* filelist, const struct bContext* C)
/* prepare job data */ /* prepare job data */
tj= MEM_callocN(sizeof(ThumbnailJob), "thumbnails\n"); tj= MEM_callocN(sizeof(ThumbnailJob), "thumbnails\n");
tj->filelist = filelist; tj->filelist = filelist;
tj->params = params;
for (idx = 0; idx < filelist->numfiles;idx++) { for (idx = 0; idx < filelist->numfiles;idx++) {
if (!filelist->filelist[idx].image) { if (!filelist->filelist[idx].image) {
if ( (filelist->filelist[idx].flags & IMAGEFILE) || (filelist->filelist[idx].flags & MOVIEFILE) ) { if ( (filelist->filelist[idx].flags & IMAGEFILE) || (filelist->filelist[idx].flags & MOVIEFILE) ) {

@ -85,7 +85,7 @@ void folderlist_pushdir(struct ListBase* folderlist, const char *dir);
int folderlist_clear_next(struct SpaceFile* sfile); int folderlist_clear_next(struct SpaceFile* sfile);
void thumbnails_stop(struct FileList* filelist, const struct bContext* C); void thumbnails_stop(struct FileList* filelist, const struct bContext* C);
void thumbnails_start(struct FileList* filelist, const struct bContext* C); void thumbnails_start(struct FileList* filelist, FileSelectParams *params, const struct bContext* C);
#ifdef __cplusplus #ifdef __cplusplus
} }

@ -201,13 +201,13 @@ static void file_refresh(const bContext *C, ScrArea *sa)
filelist_sort(sfile->files, params->sort); filelist_sort(sfile->files, params->sort);
} }
BLI_strncpy(params->dir, filelist_dir(sfile->files), FILE_MAX); BLI_strncpy(params->dir, filelist_dir(sfile->files), FILE_MAX);
thumbnails_start(sfile->files, C); thumbnails_start(sfile->files, params, C);
} else { } else {
filelist_filter(sfile->files); filelist_filter(sfile->files);
if(params->sort!=FILE_SORT_NONE) { if(params->sort!=FILE_SORT_NONE) {
thumbnails_stop(sfile->files, C); thumbnails_stop(sfile->files, C);
filelist_sort(sfile->files, params->sort); filelist_sort(sfile->files, params->sort);
thumbnails_start(sfile->files, C); thumbnails_start(sfile->files, params, C);
} else { } else {
filelist_filter(sfile->files); filelist_filter(sfile->files);
} }