# HG changeset patch # User Colin Clark # Date 1516555615 0 # Node ID beda48f55142a623edffde5badbf9d56e3830012 # Parent fe3d652a8b5b10038b88e323e680cf2c03c8ce16 Fix #577: give user warning/error when it is impossible to update EXIF orientation https://github.com/BestImageViewer/geeqie/issues/577 Insert [ $? != 0 ] after all calls to exiv2, exiftran and mogrify diff -r fe3d652a8b5b -r beda48f55142 plugins/rotate/geeqie-rotate --- a/plugins/rotate/geeqie-rotate Wed Jan 17 16:42:48 2018 +0000 +++ b/plugins/rotate/geeqie-rotate Sun Jan 21 17:26:55 2018 +0000 @@ -11,38 +11,57 @@ [ "x$ext" = "x" ] && return 1 #no extension gq_metadata="$GQ_METADATA_DIR/$1.gq.xmp" - if [ -f "$gq_metadata" ]; then - gq_orientation=`exiv2 -PXkv "$gq_metadata"|grep Xmp.tiff.Orientation|sed -e "s|Xmp.tiff.Orientation *||"` + if [ -f "$gq_metadata" ] ; then + gq_orientation=`exiv2 -PXkv "$gq_metadata"|grep Xmp.tiff.Orientation|sed -e "s|Xmp.tiff.Orientation *||"` + [ $? != 0 ] && exit 1 else - gq_orientation= + gq_orientation= fi case "$ext" in jpg|jpeg) - [ -n "$gq_orientation" ] && exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1" + if [ -n "$gq_orientaqtion" ] ; then + exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1" + [ $? != 0 ] && exit 1 + fi if exiftran -aip "$1" ; then # exiftran ignores xmp, set it manually exiv2 -M "set Xmp.tiff.Orientation 1" "$1" + [ $? != 0 ] && exit 1 #http://dev.exiv2.org/issues/show/639 - [ -n "$gq_orientation" ] && exiv2 -M "set Xmp.tiff.Orientation 1" \ - -M "set Exif.Image.Orientation 1" "$gq_metadata" + if [ -n "$gq_orientation" ] ; then + exiv2 -M "set Xmp.tiff.Orientation 1" \ + -M "set Exif.Image.Orientation 1" "$gq_metadata" + [ $? != 0 ] && exit 1 + fi return 0 + else + exit 1 fi ;; tif|tiff|png) - [ -n "$gq_orientation" ] && exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1" + if [ -n "$gq_orientation" ] ; then + exiv2 -M "set Exif.Image.Orientation $gq_orientation" "$1" + [ $? != 0 ] && exit 1 + fi if mogrify -auto-orient "$1" ; then # mogrify ignores xmp, set it manually exiv2 -M "set Xmp.tiff.Orientation 1" "$1" + [ $? != 0 ] && exit 1 #http://dev.exiv2.org/issues/show/639 - [ -n "$gq_orientation" ] && exiv2 -M "set Xmp.tiff.Orientation 1" \ - -M "set Exif.Image.Orientation 1" "$gq_metadata" + if [ -n "$gq_orientation" ] ; then + exiv2 -M "set Xmp.tiff.Orientation 1" \ + -M "set Exif.Image.Orientation 1" "$gq_metadata" + [ $? != 0 ] && exit 1 + fi return 0 + else + exit 1 fi ;; *) #not supported - return 0 + return 4 ;; esac } @@ -50,17 +69,19 @@ rotate_image_file() { ext=`echo "${3##*.}" |tr "[:upper:]" "[:lower:]"` - [ "x$ext" = "x" ] && return 4 #no extension + [ "x$ext" = "x" ] && return 1 #no extension case "$ext" in jpg|jpeg) exiftran -i "$1" "$3" - return 0 + [ $? != 0 ] && return 6 + return 0; ;; tif|tiff|png) mogrify $2 "$3" - return 0 + [ $? != 0 ] && return 7 + return 0; ;; *) #not supported @@ -131,9 +152,15 @@ # get the sidecars: geeqie -r --get-sidecars:"$file" |while read sidecar ; do # the main file is included in the sidecar file list, no special handling is required + [ ! -w "$sidecar" ] && exit 5 rotate "$sidecar" + ret=$? done + # Bourne shell runs DO loops in a sub-shell + ret=$? + [ $ret != 0 ] && exit $ret else + [ ! -w "$file" ] && exit 5 if [ -n "$rotate_image_file" ] ; then if [ -n "$preserve_mtime" ] ; then mtime=`mktemp /tmp/geeqie-rotate.XXXXXXXXXX` || exit 3 @@ -147,12 +174,13 @@ touch --reference="$mtime" "$file" rm "$mtime" fi - if [ $ret -eq 4 ] ; then - exit 4 - fi + [ $ret != 0 ] && exit $ret else rotate "$file" + ret=$? + [ $ret != 0 ] && exit $ret fi fi done +exit 0 diff -r fe3d652a8b5b -r beda48f55142 src/layout_util.c --- a/src/layout_util.c Wed Jan 17 16:42:48 2018 +0000 +++ b/src/layout_util.c Sun Jan 21 17:26:55 2018 +0000 @@ -521,13 +521,20 @@ message = g_string_new(""); message = g_string_append(message, _("Operation failed:\n")); - if (run_result == 3) - message = g_string_append(message, _("Cannot create tmp file")); - else - { - message = g_string_append(message, _("File: ")); - message = g_string_append(message, fd_n->name); - } + if (run_result == 1) + message = g_string_append(message, _("No file extension\n")); + else if (run_result == 3) + message = g_string_append(message, _("Cannot create tmp file\n")); + else if (run_result == 4) + message = g_string_append(message, _("Operation not supported for filetype\n")); + else if (run_result == 5) + message = g_string_append(message, _("File is not writable\n")); + else if (run_result == 6) + message = g_string_append(message, _("Exiftran error\n")); + else if (run_result == 7) + message = g_string_append(message, _("Mogrify error\n")); + + message = g_string_append(message, fd_n->name); gd = generic_dialog_new(_("Image orientation"), "Image orientation", NULL, TRUE, NULL, NULL);