mediabox annotate index.cgi @ rev 8

Tiny edit
author Paul Issott <paul@slitaz.org>
date Fri Feb 24 19:47:21 2017 +0000 (2017-02-24)
parents 7572f9f6a649
children
rev   line source
pankso@6 1 #!/bin/sh
pankso@6 2 #
pankso@6 3 # CGI/SHell MediaBox using HTML5 features. Coded with lightness and
paul@8 4 # elegance in mind.
pankso@6 5 #
pankso@6 6 # Copyright (C) 2017 SliTaz GNU/Linux - BSD License
pankso@6 7 #
pankso@6 8 . /usr/lib/slitaz/httphelper.sh
pankso@6 9 header
pankso@6 10
pankso@6 11 #
pankso@6 12 # Internal variables
pankso@6 13 #
pankso@6 14 version="beta"
pankso@6 15 cache="$PWD/cache"
pankso@6 16 script="$SCRIPT_NAME"
pankso@6 17
pankso@6 18 # Set $home - Cache user ID and source configs
pankso@6 19 if [ "$(GET home)" ]; then
pankso@6 20 echo $(GET home) > ${cache}/home
pankso@6 21 rm -f ${cache}/audio ${cache}/videos
pankso@6 22 fi
pankso@6 23 home=$(cat $cache/home)
pankso@6 24 config="$home/.config/mediabox"
pankso@6 25 if [ -f "${config}/mediabox.conf" ]; then
pankso@6 26 . ${config}/mediabox.conf
pankso@6 27 else
pankso@6 28 gettext "Missing config file:"; echo " $config"; exit 1
pankso@6 29 fi
pankso@6 30
pankso@6 31 # i18n
pankso@6 32 export LANG=${LOCALE} LC_ALL=${LOCALE}
pankso@6 33 . /usr/bin/gettext.sh
pankso@6 34 export TEXTDOMAIN='mediabox'
pankso@6 35
pankso@6 36 #
pankso@6 37 # Functions
pankso@6 38 #
pankso@6 39
pankso@6 40 # Usage: html_header "Page Title"
pankso@6 41 html_header() {
pankso@6 42 cat lib/header.html | sed s"/%TITLE%/$1/"
pankso@6 43 cat << EOT
pankso@6 44 <header>
pankso@6 45 <h1>$1</h1>
pankso@6 46 EOT
pankso@6 47 }
pankso@6 48
pankso@6 49 html_footer() {
pankso@6 50 cat << EOT
pankso@6 51 <footer>
pankso@6 52 &hearts;
pankso@6 53 </footer>
pankso@6 54 </body>
pankso@6 55 </html>
pankso@6 56 EOT
pankso@6 57 }
pankso@6 58
pankso@6 59 # Header navigation
pankso@6 60 nav_menu() {
pankso@6 61 cat << EOT
pankso@6 62 <nav>
pankso@6 63 <a href="$script">$(gettext "Home")</a>
pankso@6 64 <a href="$script?music">$(gettext "Music")</a>
pankso@6 65 <a href="$script?videos">$(gettext "Videos")</a>
pankso@6 66 <a href="$script?playlists">$(gettext "Playlists")</a>
pankso@6 67 <a href="$script?radio">$(gettext "Radio")</a>
pankso@6 68 </nav>
pankso@6 69 </header>
pankso@6 70 EOT
pankso@6 71 }
pankso@6 72
pankso@6 73 # Page navigation
pankso@6 74 nav_page() {
pankso@6 75 cat << EOT
pankso@6 76 </header>
pankso@6 77 <div id="home">
pankso@6 78 <nav >
pankso@6 79 <a href="$script?music">$(gettext "Music")</a>
pankso@6 80 <a href="$script?videos">$(gettext "Videos")</a>
pankso@6 81 <a href="$script?playlists">$(gettext "Playlists")</a>
pankso@6 82 <a href="$script?radio">$(gettext "Radio")</a>
pankso@6 83 <a href="$script?settings">$(gettext "Settings")</a>
pankso@6 84 </nav>
pankso@6 85 </div>
pankso@6 86 EOT
pankso@6 87 }
pankso@6 88
pankso@6 89 # Find and list audio/videos files.
pankso@6 90 find_audio() {
pankso@6 91 [ ! -f "${cache}/audio" ] && find "${MUSIC}" \
pankso@6 92 -regex '.*\.\(mp3\|ogg\|wav\)' > ${cache}/audio
pankso@6 93 cat ${cache}/audio
pankso@6 94 }
pankso@6 95 find_videos() {
pankso@6 96 find "${VIDEOS}" -regex '.*\.\(mp4\|ogv\|avi\)' > ${cache}/videos
pankso@6 97 cat ${cache}/videos
pankso@6 98 }
pankso@6 99
pankso@6 100 list_audio() {
pankso@6 101 count="$(wc -l ${cache}/audio | cut -d " " -f 1)"
pankso@6 102 echo "<ul id='audio-list'>"
pankso@6 103 cat << EOT
pankso@6 104 <li><span>&#9835 &#9835 &#9835 $count $(gettext "Tracks found")</span></li>
pankso@6 105 EOT
pankso@6 106 find_audio | while read a
pankso@6 107 do
pankso@6 108 filename="$(basename "${a}")"
pankso@6 109 echo " <li><a href='$script?music&amp;play=${a}'>${filename%.*}</a></li>"
pankso@6 110 done
pankso@6 111 echo "</ul>"
pankso@6 112 }
pankso@6 113
pankso@6 114 list_videos() {
pankso@6 115 count="$(wc -l ${cache}/videos | cut -d " " -f 1)"
pankso@6 116 cat << EOT
pankso@6 117 <ul id='videos-list'>
pankso@6 118 <li><span>$count $(gettext "Videos found")</span></li>
pankso@6 119 EOT
pankso@6 120 find_videos | while read v
pankso@6 121 do
pankso@6 122 filename="$(basename "${v}")"
pankso@6 123 echo " <li><a href='$script?videos&amp;play=${v}'>${filename%.*}</a></li>"
pankso@6 124 done
pankso@6 125 echo "</ul>"
pankso@6 126 }
pankso@6 127
pankso@6 128 list_radio() {
pankso@6 129 if [ ! -f "$config/radio.list" ]; then
pankso@6 130 cp lib/radio.list ${config} && chmod 0666 ${config}/radio.list
pankso@6 131 fi
pankso@6 132 echo "<ul id='radio-list'>"
pankso@6 133 IFS="|"
pankso@6 134 cat ${config}/radio.list | while read url info
pankso@6 135 do
pankso@6 136 [ "$info" ] || info="N/A"
pankso@6 137 cat << EOT
pankso@6 138 <li><a href='$script?radio&amp;play=${url}&info=$info'>${url#http://}<span>$info</span></a></li>
pankso@6 139 EOT
pankso@6 140 done
pankso@6 141 unset IFS info
pankso@6 142 echo "</ul>"
pankso@6 143 }
pankso@6 144
pankso@6 145 list_playlists() {
pankso@6 146 echo "<ul id='radio-list'>"
pankso@6 147 IFS="|"
pankso@6 148 cat ${config}/playlists.list | while read file info
pankso@6 149 do
pankso@6 150 [ "$info" ] || info="N/A"
pankso@6 151 cat << EOT
pankso@6 152 <li><a href='$script?playlists&amp;play=${file}&info=$info'>$info</a></li>
pankso@6 153 EOT
pankso@6 154 done
pankso@6 155 unset IFS info
pankso@6 156 echo "</ul>"
pankso@6 157 }
pankso@6 158
pankso@6 159 # HTML5 audio/video attributes: autoplay loop controls preload="auto"
pankso@6 160 #
pankso@6 161 # Usage: audio_player [/path/audio.ogg|http://url]
pankso@6 162 audio_player() {
pankso@6 163 case "$1" in
pankso@6 164 http://*)
pankso@6 165 source="$1" title="$2" ;;
pankso@6 166 *)
pankso@6 167 filepath="$1"
pankso@6 168 filename="$(basename "$1")"
pankso@6 169 title="$(gettext "No track playing")"
pankso@6 170 [ "$1" ] && title="${filename%.*}"
pankso@6 171 # We need to get file via http url
pankso@6 172 source="cache/play/$filename"
pankso@6 173 rm -rf ${cache}/play && mkdir ${cache}/play
pankso@6 174 [ "$filename" ] && ln -s "$filepath" "$cache/play/$filename" ;;
pankso@6 175 esac
pankso@6 176 cat << EOT
pankso@6 177 <div id="audio-player">
pankso@6 178 <div id="audio-title">$title</div>
pankso@6 179 <audio controls autoplay="true" preload="auto">
pankso@6 180 <source src="$source">
pankso@6 181 <div>Your browser does not support audio</div>
pankso@6 182 </audio>
pankso@6 183 </div>
pankso@6 184 EOT
pankso@6 185 }
pankso@6 186
pankso@6 187 playlist_player() {
pankso@6 188 playlist="$1"
pankso@6 189 }
pankso@6 190
pankso@6 191 # Usage: video_player "/path/video.mp4"
pankso@6 192 video_player() {
pankso@6 193 filepath="$1"
pankso@6 194 filename="$(basename "$1")"
pankso@6 195 title="$(gettext "No video playing")"
pankso@6 196 [ "$1" ] && title="${filename%.*}"
pankso@6 197 # We need to get file via http url
pankso@6 198 rm -rf ${cache}/play && mkdir ${cache}/play
pankso@6 199 [ "$filename" ] && ln -s "$filepath" "$cache/play/$filename"
pankso@6 200 cat << EOT
pankso@6 201 <div id="video-player">
pankso@6 202 <video width="560px" height="315px"
pankso@6 203 controls autoplay="true" poster="images/poster.png">
pankso@6 204 <source src="cache/play/$filename">
pankso@6 205 <div>Unsupported video file format</div>
pankso@6 206 </video>
pankso@6 207 <div id="video-title">$title</div>
pankso@6 208 </div>
pankso@6 209 EOT
pankso@6 210 }
pankso@6 211
pankso@6 212 #
pankso@6 213 # Media Box Tools
pankso@6 214 #
pankso@6 215
pankso@6 216 case " $(GET) " in
pankso@6 217 *\ music\ *)
pankso@6 218 html_header "$(gettext "Music")"
pankso@6 219 nav_menu
pankso@6 220 audio_player "$(GET play)"
pankso@6 221 list_audio
pankso@6 222 html_footer ;;
pankso@6 223
pankso@6 224 *\ videos\ *)
pankso@6 225 html_header "$(gettext "Videos")"
pankso@6 226 nav_menu
pankso@6 227 video_player "$(GET play)"
pankso@6 228 list_videos
pankso@6 229 html_footer ;;
pankso@6 230
pankso@6 231 *\ playlists\ *)
pankso@6 232 html_header "$(gettext "Playlists")"
pankso@6 233 nav_menu
pankso@6 234 playlist_player "$(GET play)" "$(GET info)"
pankso@6 235 list_playlists
pankso@6 236 html_footer ;;
pankso@6 237
pankso@6 238 *\ radio\ *)
pankso@6 239 html_header "$(gettext "Radio")"
pankso@6 240 nav_menu
pankso@6 241 audio_player "$(GET play)" "$(GET info)"
pankso@6 242 list_radio
pankso@6 243 html_footer ;;
pankso@6 244
pankso@6 245 *\ settings\ *)
pankso@6 246 html_header "$(gettext "Settings")"
pankso@6 247 nav_menu
pankso@6 248 cat << EOT
pankso@6 249 <div id="settings">
pankso@6 250 <pre>
pankso@6 251 Version : $version
pankso@6 252 Cache : $(du -sh $cache | cut -d " " -f 1)
pankso@6 253 Language : $LOCALE
pankso@6 254 Config : $config
pankso@6 255 Music : $MUSIC
pankso@6 256 Videos : $VIDEOS
pankso@6 257 EOT
pankso@6 258 echo -n "Tools : "
paul@8 259 # Only small and light tools!
pankso@6 260 for tool in mediainfo normalize sox
pankso@6 261 do
pankso@6 262 if [ -x "/usr/bin/$tool" ]; then
pankso@6 263 echo -n "$tool "
pankso@6 264 fi
pankso@6 265 done
pankso@6 266 cat << EOT
pankso@6 267
pankso@6 268
pankso@6 269 $(cat README)
pankso@6 270 </pre>
pankso@6 271 EOT
pankso@6 272 # End of <div id="settings">
pankso@6 273 echo "</div>"
pankso@6 274 html_footer ;;
pankso@6 275
pankso@6 276 *)
pankso@6 277 # Home page
pankso@6 278 html_header "MediaBox"
pankso@6 279 nav_page
pankso@6 280 html_footer ;;
pankso@6 281 esac && exit 0