Added icom utils.
[utils.git] / planime
CommitLineData
94bf9c94 1#!/bin/bash
40777a19 2
25378dd8 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
251d97ca 37origargs=("$0" "$@")
1c19e28f 38cmdline=(mplayer -fs -ass)
40777a19 39
40while [ "${1:0:1}" = - ]; do
41 a="$1"
42 shift
43 case "$a" in
529814da 44 -h)
45 echo "usage: planime [-ht] [-s PAR VAL] [NAME-QUAL] [EP|.] [TYPE-QUAL]" >&2
46 exit 0
47 ;;
40777a19 48 -t)
49 cmdline=("${cmdline[@]}" -ao oss:/dev/dsp1)
50 ;;
5f7e9143 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 ;;
40777a19 61 -s)
62 savepar="$1"
63 shift
64 saveval="$1"
65 shift
66 ;;
67 esac
68done
69
529814da 70base="$(basename "$(pwd)")"
71nextep=n
72file=
73tqual=
74if [ $# -eq 0 ]; then
75 nextep=y
e299213e 76 if [ -r curser ]; then
77 base="$base $(<curser)"
78 fi
529814da 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
40777a19 90elif [ $# -eq 2 ]; then
529814da 91 if findfile "$base - " "$1" "$2" >/dev/null; then
92 ep="$1"
93 tqual="$2"
94 else
e299213e 95 if [ "$1" = . -a -r curser ]; then
96 base="$base $(<curser)"
97 else
98 base="$base $1"
99 fi
529814da 100 ep="$2"
101 fi
102else
e299213e 103 if [ "$1" = . -a -r curser ]; then
104 base="$base $(<curser)"
105 else
106 base="$base $1"
107 fi
40777a19 108 ep="$2"
529814da 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
40777a19 118fi
90aff0d0 119if [ -z "$file" ]; then
b8882e5f 120 file="$(findfile "$base - " "$ep" "$tqual")"
90aff0d0 121fi
529814da 122
4c7a7e70 123if [ -z "$file" -o ! -r "$file" ]; then
529814da 124 echo "planime: no matching file found" >&2
125 exit 1
126fi
127
4c7a7e70 128case "${file##*.}" in
129 ogm)
40777a19 130 defopts=(-aid 1 -sid 0)
4c7a7e70 131 ;;
132 mkv)
40777a19 133 defopts=(-slang eng -alang jpn)
4c7a7e70 134 ;;
135esac
40777a19 136
b8882e5f 137ifile=".${file}.info"
40777a19 138
139if [ -n "$savepar" ]; then
140 if [ -r "$ifile" ]; then
b8882e5f 141 egrep -v "^${savepar} " "$ifile" >"$ifile.new"
081b510d 142 mv -f "$ifile.new" "$ifile"
40777a19 143 fi
b8882e5f 144 echo "$savepar $saveval" >>"$ifile"
40777a19 145 exit 0
146fi
147
148unset delay
149
150if [ -r "$ifile" ]; then
b8882e5f 151 exec 3<&0
152 exec 0<"$ifile"
153 while read par arg; do
154 if [ "$par" = delay ]; then
155 cmdline=("${cmdline[@]}" -delay "$arg")
156 elif [ "$par" = aspect ]; then
157 cmdline=("${cmdline[@]}" -aspect "$arg")
158 fi
159 done
160 exec 0<&3
161 exec 3<&-
40777a19 162else
163 cmdline=("${cmdline[@]}" "${defopts[@]}")
164fi
165
166if [ "`hostname`" = pc6 ]; then chwp=y; fi
167
168if [ "$chwp" = y ]; then (sleep 2; randomwp) & fi
4c7a7e70 169"${cmdline[@]}" "$file"
251d97ca 170
171if [ "$nextep" = y ]; then
1f6c2e48 172 echo "0. Save and continue (or Space)"
251d97ca 173 echo "1. Continue without saving"
1f6c2e48 174 echo "2. Save and exit (or Enter)"
175 echo "3. Exit without saving (or any key)"
251d97ca 176 IFS= read -sn1 c
177 save=n
178 cont=n
179 case "$c" in
180 0|" ")
181 save=y
182 cont=y
183 ;;
184 1)
185 cont=y
186 ;;
2d68de16 187 2|"")
251d97ca 188 save=y
189 ;;
190 esac
191 if [ "$save" = y ]; then
90aff0d0 192 let ep++
193 echo "$ep" >nextep
251d97ca 194 fi
195 if [ "$cont" = y ]; then
196 exec "${origargs[@]}"
90aff0d0 197 else
198 echo "nextep is $ep"
251d97ca 199 fi
200fi