From: Vladimir Nadvornik Date: Thu, 18 Jun 2009 20:46:33 +0000 (+0000) Subject: ufraw-batch script X-Git-Tag: v1.0.0~152 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=6b90e03b1485fc0bb2c97369c9b78e520fa6d641 ufraw-batch script added a more complicated script that demonstrates advanced features of external editors: - create a jpeg + ufraw id file for each raw file - update the jpeg if the id file was modified --- diff --git a/configure.in b/configure.in index e52de57c..c696ab43 100644 --- a/configure.in +++ b/configure.in @@ -412,6 +412,7 @@ AC_CONFIG_FILES([ plugins/Makefile plugins/symlink/Makefile plugins/rotate/Makefile + plugins/ufraw/Makefile geeqie.spec ]) diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 1c0682c0..01553480 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -1,4 +1,6 @@ -SUBDIRS = rotate symlink +#FIXME enable or disable individual plugins from configure + +SUBDIRS = rotate symlink ufraw qq_desktoptemplatedir = $(pkgdatadir) qq_desktoptemplate_DATA = template.desktop diff --git a/plugins/ufraw/Makefile.am b/plugins/ufraw/Makefile.am new file mode 100644 index 00000000..bde8f6b0 --- /dev/null +++ b/plugins/ufraw/Makefile.am @@ -0,0 +1,9 @@ +dist_pkglib_SCRIPTS = geeqie-ufraw + +gq_desktopdir = $(pkgdatadir)/applications +gq_desktop_in_files = geeqie-ufraw-recursive.desktop.in geeqie-ufraw.desktop.in +gq_desktop_DATA = $(gq_desktop_in_files:.desktop.in=.desktop) +@INTLTOOL_DESKTOP_RULE@ + +EXTRA_DIST = $(qq_desktop_DATA) + diff --git a/plugins/ufraw/geeqie-ufraw b/plugins/ufraw/geeqie-ufraw new file mode 100755 index 00000000..924fb0ee --- /dev/null +++ b/plugins/ufraw/geeqie-ufraw @@ -0,0 +1,132 @@ +#!/bin/bash + +# FIXME TODO: +# restore XMP in output files from input sidecars +# getopt, verbosity levels +# improve the default ufraw configuration +# localization? +# help + + +# matches raw file names, used as case insensitive +RAW_REGEX='.*\.\(arw\)\|\(srf\)\|\(sr2\)\|\(crw\)\|\(cr2\)\|\(kdc\)\|\(dcr\)\|\(k25\)\|\(raf\)\|\(mef\)\|\(mos\)\|\(mrw\)\|\(nef\)\|\(orf\)\|\(pef\)\|\(ptx\)\|\(dng\)\|\(x3f\)\|\(raw\)\|\(r3d\)\|\(3fr\)\|\(erf\)$' + +# matches ufraw id file names, used as case sensitive +ID_REGEX='.*\.ufraw$' + +get_output_from_id () +{ + grep ".*" "$1" |sed -e 's|.*\(.*\).*|\1|' +} + +# test if the id file has changed and the output needs to be refreshed +id_file_changed () +{ + idfile=$1 + output=`get_output_from_id "$idfile"` + [ ! -f "$output" -o "$idfile" -nt "$output" ] +} + +# refresh the output file specified by given id file, if necessary +process_ufraw_id_file () +{ + idfile=$1 + if id_file_changed "$idfile" ; then + ufraw-batch --overwrite "$idfile" + fi +} + +# test for newly added raw files that were never processed +raw_file_not_processed () +{ + rawfile=$1 + basename=${rawfile%.*} + [ ! -f "$basename.ufraw" ] +} + +# process raw file for the first time +process_raw_file_default () +{ + rawfile=$1 + if raw_file_not_processed "$rawfile" ; then + ufraw-batch --create-id=also \ + --wb=camera \ + --exposure=auto \ + --out-type=jpeg \ + --compression=96 \ + "$rawfile" + fi +} + +# process all files listed in file $1 +# if $2 is not empty, produce output for zenity --progress +process_list () +{ + list=$1 + use_zenity=$2 + + count=`wc -l <$list` + n=0 + [ -n "$use_zenity" ] && echo 0 + + if [ "$count" -gt 0 ] ; then + while read file; do + [ -f "$file" ] || continue + if echo "$file"|grep -q -i "$RAW_REGEX" ; then + process_raw_file_default "$file" + elif echo "$file"|grep -q "$ID_REGEX" ; then + process_ufraw_id_file "$file" + + fi + + n=$((n + 1)) + + # the function can end at the 'echo' command with broken pipe + # if it is cancelled via zenity + [ -n "$use_zenity" ] && echo $((n * 100 / count)) + + done <$list + fi + [ -n "$use_zenity" ] && echo 100 +} + +# process all files in directory $1, including subdirectories +# processing is controlled by zenity dialogs if $DISPLAY is set +process_tree () +{ + list=`mktemp /tmp/geeqie-ufraw-list.XXXXXXXXXX` || exit 1 + + find "$1" -iregex "$RAW_REGEX" -print | while read rawfile ; do + raw_file_not_processed "$rawfile" && echo "$rawfile" + done >>$list + + #refresh output from changed id files + find "$1" -regex "$ID_REGEX" -print | while read idfile ; do + id_file_changed "$idfile" && echo "$idfile" + done >>$list + + if [ -n "$DISPLAY" ] ; then + if [ -s $list ] && \ + zenity --list --title "Files to proceed" --text "Files to proceed" --column "Files" <$list ; then + process_list $list with_zenity | zenity --progress --auto-close + fi + else + # no DISPLAY + process_list $list + fi + rm $list +} + + + +if [ -d "$1" ] ; then + # $1 is a directory + process_tree "$1" +else + list=`mktemp /tmp/geeqie-ufraw-list.XXXXXXXXXX` || exit 1 + for file in "$@" ; do + echo $file + done >>$list + process_list $list + rm $list +fi diff --git a/plugins/ufraw/geeqie-ufraw-recursive.desktop.in b/plugins/ufraw/geeqie-ufraw-recursive.desktop.in new file mode 100644 index 00000000..0a02e83b --- /dev/null +++ b/plugins/ufraw/geeqie-ufraw-recursive.desktop.in @@ -0,0 +1,18 @@ +[Desktop Entry] +Version=1.0 +Type=Application +_Name=Process folder with UFRaw Batch + +# call the helper script with current directory as an argument +Exec=geeqie-ufraw . + +# Desktop files that are usable only in Geeqie should be marked like this: +Categories=X-Geeqie; +OnlyShowIn=X-Geeqie; + +# Show in menu "Edit" +X-Geeqie-Menu-Path=EditMenu + +# It can be made verbose +# X-Geeqie-Verbose=true + diff --git a/plugins/ufraw/geeqie-ufraw.desktop.in b/plugins/ufraw/geeqie-ufraw.desktop.in new file mode 100644 index 00000000..35c76cdc --- /dev/null +++ b/plugins/ufraw/geeqie-ufraw.desktop.in @@ -0,0 +1,20 @@ +[Desktop Entry] +Version=1.0 +Type=Application +_Name=UFRaw Batch + +# call the helper script on each file individually +# - this allows a better controll over processing +Exec=geeqie-ufraw %f + +# Desktop files that are usable only in Geeqie should be marked like this: +Categories=X-Geeqie; +OnlyShowIn=X-Geeqie; + +# Show in menu "Edit" +X-Geeqie-Menu-Path=EditMenu + +# It can be made verbose +X-Geeqie-Verbose=true + +MimeType=application/x-ufraw;image/x-dcraw;