diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/feh.h | 10 | ||||
| -rw-r--r-- | src/imlib.c | 70 | ||||
| -rw-r--r-- | src/index.c | 2 | ||||
| -rw-r--r-- | src/slideshow.c | 2 | ||||
| -rw-r--r-- | src/thumbnail.c | 2 | 
5 files changed, 59 insertions, 27 deletions
| @@ -115,6 +115,14 @@ enum slide_change { SLIDE_NEXT, SLIDE_PREV, SLIDE_RAND, SLIDE_FIRST, SLIDE_LAST,  	SLIDE_JUMP_PREV_DIR  }; +enum feh_load_error { +	LOAD_ERROR_IMLIB = 0, +	LOAD_ERROR_IMAGEMAGICK, +	LOAD_ERROR_CURL, +	LOAD_ERROR_DCRAW, +	LOAD_ERROR_MAGICBYTES +}; +  #define INPLACE_EDIT_FLIP   -1  #define INPLACE_EDIT_MIRROR -2 @@ -172,7 +180,7 @@ void feh_display_status(char stat);  void real_loadables_mode(int loadable);  void feh_reload_image(winwidget w, int resize, int force_new);  void feh_filelist_image_remove(winwidget winwid, char do_delete); -void feh_imlib_print_load_error(char *file, winwidget w, Imlib_Load_Error err); +void feh_print_load_error(char *file, winwidget w, Imlib_Load_Error err, enum feh_load_error feh_err);  void slideshow_save_image(winwidget win);  void feh_edit_inplace(winwidget w, int orientation);  void feh_edit_inplace_lossless(winwidget w, int orientation); diff --git a/src/imlib.c b/src/imlib.c index 35b9bd0..9ee4c08 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -164,11 +164,31 @@ int feh_load_image_char(Imlib_Image * im, char *filename)  	return(i);  } -void feh_imlib_print_load_error(char *file, winwidget w, Imlib_Load_Error err) +void feh_print_load_error(char *file, winwidget w, Imlib_Load_Error err, enum feh_load_error feh_err)  {  	if (err == IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS)  		eprintf("%s - Out of file descriptors while loading", file);  	else if (!opt.quiet || w) { +		switch (feh_err) { +			case LOAD_ERROR_IMLIB: +				// handled in the next switch/case statement +				break; +			case LOAD_ERROR_IMAGEMAGICK: +				im_weprintf(w, "%s - No ImageMagick loader for that file format", file); +				break; +			case LOAD_ERROR_CURL: +				im_weprintf(w, "%s - libcurl was unable to retrieve the file", file); +				break; +			case LOAD_ERROR_DCRAW: +				im_weprintf(w, "%s - Unable to open preview via dcraw", file); +				break; +			case LOAD_ERROR_MAGICBYTES: +				im_weprintf(w, "%s - Does not look like an image (magic bytes missing)", file); +				break; +		} +		if (feh_err != LOAD_ERROR_IMLIB) { +			return; +		}  		switch (err) {  		case IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST:  			im_weprintf(w, "%s - File does not exist", file); @@ -181,11 +201,7 @@ void feh_imlib_print_load_error(char *file, winwidget w, Imlib_Load_Error err)  			break;  		case IMLIB_LOAD_ERROR_UNKNOWN:  		case IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT: -			if (getenv("FEH_SKIP_MAGIC")) { -				im_weprintf(w, "%s - No Imlib2 loader for that file format", file); -			} else { -				im_weprintf(w, "%s - Does not look like an image (magic bytes missing)", file); -			} +			im_weprintf(w, "%s - No Imlib2 loader for that file format", file);  			break;  		case IMLIB_LOAD_ERROR_PATH_TOO_LONG:  			im_weprintf(w, "%s - Path specified is too long", file); @@ -316,6 +332,7 @@ int feh_is_image(feh_file * file)  int feh_load_image(Imlib_Image * im, feh_file * file)  {  	Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; +	enum feh_load_error feh_err = LOAD_ERROR_IMLIB;  	enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK, SRC_DCRAW } image_source = SRC_IMLIB;  	char *tmpname = NULL;  	char *real_filename = NULL; @@ -328,19 +345,16 @@ int feh_load_image(Imlib_Image * im, feh_file * file)  	if (path_is_url(file->filename)) {  		image_source = SRC_HTTP; -		if ((tmpname = feh_http_load_image(file->filename)) == NULL) +		if ((tmpname = feh_http_load_image(file->filename)) == NULL) { +			feh_err = LOAD_ERROR_CURL;  			err = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST; -	} -	else if (opt.conversion_timeout >= 0 && feh_file_is_raw(file->filename)) { -		image_source = SRC_DCRAW; -		tmpname = feh_dcraw_load_image(file->filename); -		if (!tmpname) -			err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT; +		}  	}  	else {  		if (feh_is_image(file)) {  			*im = imlib_load_image_with_error_return(file->filename, &err);  		} else { +			feh_err = LOAD_ERROR_MAGICBYTES;  			err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT;  		}  	} @@ -348,8 +362,20 @@ int feh_load_image(Imlib_Image * im, feh_file * file)  	if (opt.conversion_timeout >= 0 && (  			(err == IMLIB_LOAD_ERROR_UNKNOWN) ||  			(err == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT))) { -		image_source = SRC_MAGICK; -		tmpname = feh_magick_load_image(file->filename); +		if (feh_file_is_raw(file->filename)) { +			image_source = SRC_DCRAW; +			tmpname = feh_dcraw_load_image(file->filename); +			if (!tmpname) { +				feh_err = LOAD_ERROR_DCRAW; +			} +		} else { +			image_source = SRC_MAGICK; +			feh_err = LOAD_ERROR_IMLIB; +			tmpname = feh_magick_load_image(file->filename); +			if (!tmpname) { +				feh_err = LOAD_ERROR_IMAGEMAGICK; +			} +		}  	}  	if (tmpname) { @@ -409,7 +435,7 @@ int feh_load_image(Imlib_Image * im, feh_file * file)  			fputs("\n", stderr);  			reset_output = 1;  		} -		feh_imlib_print_load_error(file->filename, NULL, err); +		feh_print_load_error(file->filename, NULL, err, feh_err);  		D(("Load *failed*\n"));  		return(0);  	} @@ -549,11 +575,9 @@ static int feh_file_is_raw(char *filename)  	}  	if (childpid == 0) { -		if (opt.quiet) { -			int devnull = open("/dev/null", O_WRONLY); -			dup2(devnull, 1); -			dup2(devnull, 2); -		} +		int devnull = open("/dev/null", O_WRONLY); +		dup2(devnull, 1); +		dup2(devnull, 2);  		execlp("dcraw", "dcraw", "-i", filename, NULL);  		_exit(1);  	} else { @@ -1537,8 +1561,8 @@ void feh_edit_inplace(winwidget w, int op)  			FEH_FILE(w->file->data)->filename, &err);  		gib_imlib_free_image(old);  		if (err) -			feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename, -				w, err); +			feh_print_load_error(FEH_FILE(w->file->data)->filename, +				w, err, LOAD_ERROR_IMLIB);  		feh_reload_image(w, 1, 1);  	} else {  		/* diff --git a/src/index.c b/src/index.c index 3633c96..85a3ee8 100644 --- a/src/index.c +++ b/src/index.c @@ -332,7 +332,7 @@ void init_index_mode(void)  		gib_imlib_save_image_with_error_return(im_main, output_buf, &err);  		if (err) { -			feh_imlib_print_load_error(output_buf, im_main, err); +			feh_print_load_error(output_buf, im_main, err, LOAD_ERROR_IMLIB);  		}  		else if (opt.verbose) {  			int tw, th; diff --git a/src/slideshow.c b/src/slideshow.c index 2eb10da..3a3cd0a 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -638,7 +638,7 @@ void slideshow_save_image(winwidget win)  	gib_imlib_save_image_with_error_return(win->im, tmpname, &err);  	if (err) -		feh_imlib_print_load_error(tmpname, win, err); +		feh_print_load_error(tmpname, win, err, LOAD_ERROR_IMLIB);  	free(tmpname);  	return; diff --git a/src/thumbnail.c b/src/thumbnail.c index 41bd1a0..e7b05a8 100644 --- a/src/thumbnail.c +++ b/src/thumbnail.c @@ -392,7 +392,7 @@ void init_thumbnail_mode(void)  		}  		gib_imlib_save_image_with_error_return(td.im_main, output_buf, &err);  		if (err) { -			feh_imlib_print_load_error(output_buf, td.im_main, err); +			feh_print_load_error(output_buf, td.im_main, err, LOAD_ERROR_IMLIB);  		}  		else if (opt.verbose) {  			int tw, th; | 
