Mercurial > geeqie.yaz
comparison plugins/ufraw/geeqie-ufraw @ 1645:8efd65465de5
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
author | nadvornik |
---|---|
date | Thu, 18 Jun 2009 20:46:33 +0000 |
parents | |
children | 70277ff12cfc |
comparison
equal
deleted
inserted
replaced
1644:5d66965165f2 | 1645:8efd65465de5 |
---|---|
1 #!/bin/bash | |
2 | |
3 # FIXME TODO: | |
4 # restore XMP in output files from input sidecars | |
5 # getopt, verbosity levels | |
6 # improve the default ufraw configuration | |
7 # localization? | |
8 # help | |
9 | |
10 | |
11 # matches raw file names, used as case insensitive | |
12 RAW_REGEX='.*\.\(arw\)\|\(srf\)\|\(sr2\)\|\(crw\)\|\(cr2\)\|\(kdc\)\|\(dcr\)\|\(k25\)\|\(raf\)\|\(mef\)\|\(mos\)\|\(mrw\)\|\(nef\)\|\(orf\)\|\(pef\)\|\(ptx\)\|\(dng\)\|\(x3f\)\|\(raw\)\|\(r3d\)\|\(3fr\)\|\(erf\)$' | |
13 | |
14 # matches ufraw id file names, used as case sensitive | |
15 ID_REGEX='.*\.ufraw$' | |
16 | |
17 get_output_from_id () | |
18 { | |
19 grep "<OutputFilename>.*</OutputFilename>" "$1" |sed -e 's|.*<OutputFilename>\(.*\)</OutputFilename>.*|\1|' | |
20 } | |
21 | |
22 # test if the id file has changed and the output needs to be refreshed | |
23 id_file_changed () | |
24 { | |
25 idfile=$1 | |
26 output=`get_output_from_id "$idfile"` | |
27 [ ! -f "$output" -o "$idfile" -nt "$output" ] | |
28 } | |
29 | |
30 # refresh the output file specified by given id file, if necessary | |
31 process_ufraw_id_file () | |
32 { | |
33 idfile=$1 | |
34 if id_file_changed "$idfile" ; then | |
35 ufraw-batch --overwrite "$idfile" | |
36 fi | |
37 } | |
38 | |
39 # test for newly added raw files that were never processed | |
40 raw_file_not_processed () | |
41 { | |
42 rawfile=$1 | |
43 basename=${rawfile%.*} | |
44 [ ! -f "$basename.ufraw" ] | |
45 } | |
46 | |
47 # process raw file for the first time | |
48 process_raw_file_default () | |
49 { | |
50 rawfile=$1 | |
51 if raw_file_not_processed "$rawfile" ; then | |
52 ufraw-batch --create-id=also \ | |
53 --wb=camera \ | |
54 --exposure=auto \ | |
55 --out-type=jpeg \ | |
56 --compression=96 \ | |
57 "$rawfile" | |
58 fi | |
59 } | |
60 | |
61 # process all files listed in file $1 | |
62 # if $2 is not empty, produce output for zenity --progress | |
63 process_list () | |
64 { | |
65 list=$1 | |
66 use_zenity=$2 | |
67 | |
68 count=`wc -l <$list` | |
69 n=0 | |
70 [ -n "$use_zenity" ] && echo 0 | |
71 | |
72 if [ "$count" -gt 0 ] ; then | |
73 while read file; do | |
74 [ -f "$file" ] || continue | |
75 if echo "$file"|grep -q -i "$RAW_REGEX" ; then | |
76 process_raw_file_default "$file" | |
77 elif echo "$file"|grep -q "$ID_REGEX" ; then | |
78 process_ufraw_id_file "$file" | |
79 | |
80 fi | |
81 | |
82 n=$((n + 1)) | |
83 | |
84 # the function can end at the 'echo' command with broken pipe | |
85 # if it is cancelled via zenity | |
86 [ -n "$use_zenity" ] && echo $((n * 100 / count)) | |
87 | |
88 done <$list | |
89 fi | |
90 [ -n "$use_zenity" ] && echo 100 | |
91 } | |
92 | |
93 # process all files in directory $1, including subdirectories | |
94 # processing is controlled by zenity dialogs if $DISPLAY is set | |
95 process_tree () | |
96 { | |
97 list=`mktemp /tmp/geeqie-ufraw-list.XXXXXXXXXX` || exit 1 | |
98 | |
99 find "$1" -iregex "$RAW_REGEX" -print | while read rawfile ; do | |
100 raw_file_not_processed "$rawfile" && echo "$rawfile" | |
101 done >>$list | |
102 | |
103 #refresh output from changed id files | |
104 find "$1" -regex "$ID_REGEX" -print | while read idfile ; do | |
105 id_file_changed "$idfile" && echo "$idfile" | |
106 done >>$list | |
107 | |
108 if [ -n "$DISPLAY" ] ; then | |
109 if [ -s $list ] && \ | |
110 zenity --list --title "Files to proceed" --text "Files to proceed" --column "Files" <$list ; then | |
111 process_list $list with_zenity | zenity --progress --auto-close | |
112 fi | |
113 else | |
114 # no DISPLAY | |
115 process_list $list | |
116 fi | |
117 rm $list | |
118 } | |
119 | |
120 | |
121 | |
122 if [ -d "$1" ] ; then | |
123 # $1 is a directory | |
124 process_tree "$1" | |
125 else | |
126 list=`mktemp /tmp/geeqie-ufraw-list.XXXXXXXXXX` || exit 1 | |
127 for file in "$@" ; do | |
128 echo $file | |
129 done >>$list | |
130 process_list $list | |
131 rm $list | |
132 fi |