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 ♥ |
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>♫ ♫ ♫ $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&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&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&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&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 |