Make rbtadd work outside of the LAN.
[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 defopts=(-aid 1 -sid 0)
131 ;;
132 mkv)
133 defopts=(-slang eng -alang jpn)
134 ;;
135esac
136
137ifile=".${file}.info"
138
139if [ -n "$savepar" ]; then
140 if [ -r "$ifile" ]; then
141 egrep -v "^${savepar} " "$ifile" >"$ifile.new"
142 mv -f "$ifile.new" "$ifile"
143 fi
144 echo "$savepar $saveval" >>"$ifile"
145 exit 0
146fi
147
148unset delay
149
150if [ -r "$ifile" ]; then
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<&-
162else
163 cmdline=("${cmdline[@]}" "${defopts[@]}")
164fi
165
166if [ "`hostname`" = pc6 ]; then chwp=y; fi
167
168if [ "$chwp" = y ]; then (sleep 2; randomwp) & fi
169"${cmdline[@]}" "$file"
170
171if [ "$nextep" = y ]; then
172 echo "0. Save and continue (or Space)"
173 echo "1. Continue without saving"
174 echo "2. Save and exit (or Enter)"
175 echo "3. Exit without saving (or any key)"
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 ;;
187 2|"")
188 save=y
189 ;;
190 esac
191 if [ "$save" = y ]; then
192 let ep++
193 echo "$ep" >nextep
194 fi
195 if [ "$cont" = y ]; then
196 exec "${origargs[@]}"
197 else
198 echo "nextep is $ep"
199 fi
200fi