Updated utils.
[utils.git] / planime
... / ...
CommitLineData
1#!/bin/bash
2
3isnum() {
4 grep -xq '[0-9]\+' <<<"$1"
5}
6
7findfile() {
8 local file tail eq eqt m
9 for file in "$1"*; do
10 tail="${file#$1}"
11 eq="${tail%.*}"
12 m=n
13 if [ "${eq%% *}" -eq "$2" ] 2>/dev/null; then
14 if [[ "$eq" == *\ * ]]; then
15 eqt="${eq#* }"
16 else
17 eqt=
18 fi
19 m=y
20 elif [ "${eq:0:${#2}}" = "$2" ]; then
21 eqt="${eq:${#2}}"
22 if [ "${eqt:0:1}" = " " -o -z "$eqt" ]; then
23 eqt="${eqt# }"
24 m=y
25 fi
26 fi
27 if [ "$m" = y ]; then
28 if [ "$eqt" = "$3" -o "$eqt" = "($3)" ]; then
29 echo "$file"
30 return 0
31 fi
32 fi
33 done
34 return 1
35}
36
37origargs=("$0" "$@")
38cmdline=(mplayer -fs -ass)
39
40while [ "${1:0:1}" = - ]; do
41 a="$1"
42 shift
43 case "$a" in
44 -h)
45 echo "usage: planime [-ht] [-s PAR VAL] [NAME-QUAL] [EP|.] [TYPE-QUAL]" >&2
46 exit 0
47 ;;
48 -t)
49 cmdline=("${cmdline[@]}" -ao oss:/dev/dsp1)
50 ;;
51 -A)
52 while :; do
53 a="$1"
54 shift
55 if [ "$a" = \; ]; then
56 break;
57 fi
58 cmdline=("${cmdline[@]}" "$a")
59 done
60 ;;
61 -s)
62 savepar="$1"
63 shift
64 saveval="$1"
65 shift
66 ;;
67 esac
68done
69
70base="$(basename "$(pwd)")"
71nextep=n
72file=
73tqual=
74if [ $# -eq 0 ]; then
75 nextep=y
76 if [ -r curser ]; then
77 base="$base $(<curser)"
78 fi
79elif [ $# -eq 1 ]; then
80 if [ -r "$1" ]; then
81 file="$1"
82 else
83 if findfile "$base - " "$1" >/dev/null; then
84 ep="$1"
85 else
86 nextep=y
87 base="$base $1"
88 fi
89 fi
90elif [ $# -eq 2 ]; then
91 if findfile "$base - " "$1" "$2" >/dev/null; then
92 ep="$1"
93 tqual="$2"
94 else
95 if [ "$1" = . -a -r curser ]; then
96 base="$base $(<curser)"
97 else
98 base="$base $1"
99 fi
100 ep="$2"
101 fi
102else
103 if [ "$1" = . -a -r curser ]; then
104 base="$base $(<curser)"
105 else
106 base="$base $1"
107 fi
108 ep="$2"
109 tqual="$3"
110fi
111if [ "$ep" = . ]; then nextep=y; fi
112if [ "$nextep" = y -a -r nextep ]; then
113 ep="$(<nextep)"
114 if ! isnum "$ep"; then
115 echo "planime: nextep is non-numeric" >&2
116 exit 1
117 fi
118fi
119if [ -z "$file" ]; then
120 file="$(findfile "$base - " "$ep" "$tqual")"
121fi
122
123if [ -z "$file" -o ! -r "$file" ]; then
124 echo "planime: no matching file found" >&2
125 exit 1
126fi
127
128case "${file##*.}" in
129 ogm)
130 aid=1
131 sid=0
132 ;;
133 mkv)
134 alang=jpn
135 slang=eng
136 ;;
137esac
138
139ifile=".${file}.info"
140
141if [ -n "$savepar" ]; then
142 if [ -r "$ifile" ]; then
143 egrep -v "^${savepar} " "$ifile" >"$ifile.new"
144 mv -f "$ifile.new" "$ifile"
145 fi
146 echo "$savepar $saveval" >>"$ifile"
147 exit 0
148fi
149
150unset delay
151
152if [ -r "$ifile" ]; then
153 exec 3<&0
154 exec 0<"$ifile"
155 while read par arg; do
156 if [ "$par" = delay ]; then
157 cmdline=("${cmdline[@]}" -delay "$arg")
158 elif [ "$par" = aspect ]; then
159 cmdline=("${cmdline[@]}" -aspect "$arg")
160 elif [ "$par" = volmod ]; then
161 cmdline=("${cmdline[@]}" -af volume="$arg")
162 elif [ "$par" = alang ]; then
163 unset alang aid
164 alang="$arg"
165 elif [ "$par" = aid ]; then
166 unset alang aid
167 aid="$arg"
168 elif [ "$par" = slang ]; then
169 unset slang sid
170 slang="$arg"
171 elif [ "$par" = sid ]; then
172 unset slang sid
173 sid="$arg"
174 fi
175 done
176 exec 0<&3
177 exec 3<&-
178fi
179
180if [ -n "$alang" ]; then
181 cmdline=("${cmdline[@]}" -alang "$alang")
182elif [ -n "$aid" ]; then
183 cmdline=("${cmdline[@]}" -aid "$aid")
184fi
185if [ -n "$slang" ]; then
186 cmdline=("${cmdline[@]}" -slang "$slang")
187elif [ -n "$sid" ]; then
188 cmdline=("${cmdline[@]}" -sid "$sid")
189fi
190
191if [ "`hostname`" = pc6 -o "`hostname`" = pc7 -a "$DISPLAY" = :1 ]; then chwp=y; fi
192
193if [ "$chwp" = y ]; then (sleep 2; randomwp) & fi
194"${cmdline[@]}" "$file"
195
196if [ "$nextep" = y ]; then
197 echo "0. Save and continue (or Space)"
198 echo "1. Continue without saving"
199 echo "2. Save and exit (or Enter)"
200 echo "3. Exit without saving (or any key)"
201 IFS= read -sn1 c
202 save=n
203 cont=n
204 case "$c" in
205 0|" ")
206 save=y
207 cont=y
208 ;;
209 1)
210 cont=y
211 ;;
212 2|"")
213 save=y
214 ;;
215 esac
216 if [ "$save" = y ]; then
217 let ep++
218 echo "$ep" >nextep
219 fi
220 if [ "$cont" = y ]; then
221 exec "${origargs[@]}"
222 else
223 echo "nextep is $ep"
224 fi
225fi