[svn-upgrade] Integrating new upstream version, teleschorsch (0.0.5)
[debian/teleschorsch.git] / teleschorsch.sh
1 #!/bin/bash
2
3 # Copyright and License:
4 #
5 # Copyright (C) 2007 
6 # gregor herrmann <gregor+debian@comodo.priv.at>,
7 # Philipp Spitzer <philipp@spitzer.priv.at>
8 #
9 # This program is free software; you can redistribute it and/or modify it   
10 # under the terms of the GNU General Public License version 2 as published
11 # by the Free Software Foundation.
12 # This program is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with this program; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, or point
19 # your browser to http://www.gnu.org/licenses/gpl.html
20
21 # Changes:
22 #
23 # 0.1.1
24 #       add command line options "-xdialog" (default) and "-dialog"
25 #
26 # 0.1.0
27 #       use the new configuration file
28 #
29 # 0.0.6
30 #       move mplayer start options down
31 #
32 # 0.0.5
33 #       implement some more error checks
34 #
35 # 0.0.4
36 #       set default date to yesterday if current time < noon
37 #
38 # 0.0.3:
39 #               clarify description of "start time", i.e. "offset"
40 #
41 # 0.0.2:
42 #       check for required binaries
43 #
44 # 0.0.1:
45 #       first release
46
47 # functions
48
49 error() {
50         echo "$(basename $0) aborting with error:"
51         echo $1
52         exit 1
53 }
54
55 # parameters
56
57 UI="xdialog"
58 if [ -n "$1" ] ; then
59         case "$1" in
60                 "-xdialog")
61                         UI="xdialog"
62                         ;;
63                 "-dialog")
64                         UI="dialog"
65                         ;;
66         esac
67 fi
68
69 # checks
70
71 case "$UI" in
72         "xdialog")
73                 which Xdialog > /dev/null || error "Please install Xdialog or try -dialog."
74                 ;;
75         "dialog")
76                 which dialog > /dev/null || error "Please install dialog or try -xdialog."
77                 ;;
78 esac            
79
80 which vlc > /dev/null || error "Please install vlc."
81 which gmplayer > /dev/null || error "Please install (g)mplayer."
82
83 # some variables
84
85 if [ -r $HOME/.teleschorschrc ] ; then
86         CONFIG=$HOME/.teleschorschrc
87 elif [ -r /etc/teleschorschrc ] ; then
88         CONFIG=/etc/teleschorschrc
89 else
90         error "Neiter /etc/teleschorschrc nor $HOME/.teleschorschrc found"
91 fi
92
93 if [ $(date +"%H") -lt 12 ] ; then
94         DEFAULT_DATE=$(date --date "yesterday" +"%d %m %Y")
95 else
96         DEFAULT_DATE=$(date +"%d %m %Y")
97 fi
98
99 OUTFILE="/tmp/$(basename $0).tmp.$$"
100
101 # start the fun
102
103 # read config
104
105 while read LINE ; do
106         if [ -z "$LINE" ] ; then continue; fi
107         if echo $LINE | egrep "^[#;]" > /dev/null ; then continue; fi
108         if echo $LINE | egrep "^\[" > /dev/null; then
109                 if [ -n "$C" ] ; then CHANNELS+=("$C") ; fi
110                 C="$LINE"
111         else
112                 C+="~$LINE"
113         fi
114 done < $CONFIG
115 CHANNELS+=("$C")
116
117 COUNT="${#CHANNELS[*]}"
118
119 # create channel list for (x)dialog
120
121 for ((i=0; i < COUNT; i++)) ; do # bashism
122         LIST+=$(echo ${CHANNELS[$i]} | sed -e "s/\[\(.\+\)\]/$i/" -e 's/FULLNAME=//' -e 's/ /\xa0/g' | awk -F '~' '{printf "%s\t%s\toff ", $1, $2}')
123 done
124
125 # call (x)dialog
126 case "$UI" in
127         "xdialog")
128                 Xdialog --title "TeleSchorsch" \
129                         --no-tags \
130                         --radiolist "Choose your preferred stream:" 0 0 0 \
131                         $LIST \
132                         --calendar "Date" 0 0 $DEFAULT_DATE \
133                         --timebox "Offset\n(Start at beginning of stream: 0:0:0, start at position 3 minutes: 0:3:0, ...)" 0 0 0 0 0 \
134                         2>$OUTFILE
135                 ;;
136         "dialog")
137                 dialog --title "TeleSchorsch" \
138                  --radiolist "Choose your preferred stream" 0 0 0 \
139                         $LIST \
140                         --calendar "Date" 0 0 $DEFAULT_DATE \
141                         --timebox "Offset\n(Start at beginning of stream: 0:0:0, start at position 3 minutes: 0:3:0, ...)" 0 0 0 0 0 \
142                         2>$OUTFILE
143                 ;;
144 esac
145
146 RETVAL=$?
147
148 case $RETVAL in
149         0)
150                 ;;
151         *)
152                 echo "$(basename $0) exiting (user abort, error, whatnot) with return value: $RETVAL"
153                 exit $RETVAL
154                 ;;
155 esac
156
157 [ -e "$OUTFILE" ] && perl -pi -e 's;\n; ;' $OUTFILE \
158         || error "$OUTFILE not found"
159 read STREAM DATE OFFSET < $OUTFILE
160 [ -n "$STREAM" ] && [ -n "$DATE" ] && [ -n "$OFFSET" ] && rm -f $OUTFILE \
161         || error "Problem with variables, check contents of $OUTFILE"
162
163 DATE=$(echo $DATE | perl -p -e 's;(.+)/(.+)/(.+);$3-$2-$1;')
164 SECONDS=$(echo $OFFSET | perl -n -e '($h,$m,$s) = split(/:/); print $h*3600 + $m*60 + $s;')
165 y=$(date --date "$DATE" +"%y")
166 Y=$(date --date "$DATE" +"%Y")
167 m=$(date --date "$DATE" +"%m")
168 d=$(date --date "$DATE" +"%d")
169 dow_DE=$(LANG=$(locale -a | grep ^de_ | head -n 1) date --date "$DATE" +"%A")
170
171 URL=$(echo "${CHANNELS[$STREAM]}" | perl -pe 's/^.*STATICURL=(.+?)(~.*|$)/$1/')
172 PLAYER=$(echo "${CHANNELS[$STREAM]}" | perl -pe 's/^.*PLAYER=(.+?)(~.*|$)/$1/')
173
174 case $PLAYER in
175         gmplayer)
176                 STARTOPTION="-cache 512 -ss"
177                 ;;
178         vlc)
179                 STARTOPTION="--start-time"
180                 ;;
181         *)
182                 error "Unknown PLAYER: $PLAYER"
183                 ;;
184 esac
185
186 $PLAYER $(eval echo $URL) $STARTOPTION $SECONDS