# HG changeset patch
# User nadvornik
# Date 1245357993 0
# Node ID 8966e72ae99a00072ac8e3db44934592ddf0f082
# Parent c16f499ea1ce5a759583ea393d4dfc07b061f488
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 -r c16f499ea1ce -r 8966e72ae99a configure.in
--- a/configure.in Wed Jun 17 18:41:10 2009 +0000
+++ b/configure.in Thu Jun 18 20:46:33 2009 +0000
@@ -412,6 +412,7 @@
plugins/Makefile
plugins/symlink/Makefile
plugins/rotate/Makefile
+ plugins/ufraw/Makefile
geeqie.spec
])
diff -r c16f499ea1ce -r 8966e72ae99a plugins/Makefile.am
--- a/plugins/Makefile.am Wed Jun 17 18:41:10 2009 +0000
+++ b/plugins/Makefile.am Thu Jun 18 20:46:33 2009 +0000
@@ -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 -r c16f499ea1ce -r 8966e72ae99a plugins/ufraw/Makefile.am
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/ufraw/Makefile.am Thu Jun 18 20:46:33 2009 +0000
@@ -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 -r c16f499ea1ce -r 8966e72ae99a plugins/ufraw/geeqie-ufraw
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/ufraw/geeqie-ufraw Thu Jun 18 20:46:33 2009 +0000
@@ -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 -r c16f499ea1ce -r 8966e72ae99a plugins/ufraw/geeqie-ufraw-recursive.desktop.in
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/ufraw/geeqie-ufraw-recursive.desktop.in Thu Jun 18 20:46:33 2009 +0000
@@ -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 -r c16f499ea1ce -r 8966e72ae99a plugins/ufraw/geeqie-ufraw.desktop.in
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/ufraw/geeqie-ufraw.desktop.in Thu Jun 18 20:46:33 2009 +0000
@@ -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;