slitaz-tools annotate boxes/burn-box @ rev 754

Add new burn-box (let burn ISO and audio in a GUI and cmdline)
author Christophe Lincoln <pankso@slitaz.org>
date Mon Apr 30 21:09:45 2012 +0200 (2012-04-30)
parents
children 75e873df3022
rev   line source
pankso@754 1 #!/bin/sh
pankso@754 2 #
pankso@754 3 # Burn-box a small front end to cdrkit powered by Yad/GTK. Keep the main
pankso@754 4 # window uncluttered and use a wizard to create audio/video/data cd/dvd.
pankso@754 5 # The main box let user burn an ISO, audio files from a single directory.
pankso@754 6 #
pankso@754 7 # Copyright (C) 2012 SliTaz GNU/Linux - BSD License
pankso@754 8 #
pankso@754 9 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@754 10 #
pankso@754 11 . /lib/libtaz.sh
pankso@754 12
pankso@754 13 # LibTaz parser and store options. Burn-box can be used with an ISO image
pankso@754 14 # or an audio directory in option: burn-box --iso=/path/to/image.iso
pankso@754 15 [ "$iso" ] || iso=" "
pankso@754 16 [ "$audio" ] || audio="$HOME"
pankso@754 17
pankso@754 18 # Internal variables (we need a space before options).
pankso@754 19 boxopts="--height=300 --width=520 --window-icon=drive-cdrom"
pankso@754 20 options=" -eject -multi"
pankso@754 21 speed=$(fgrep "drive speed" /proc/sys/dev/cdrom/info | cut -f 3)
pankso@754 22 tmpdir=/tmp/$(basename $0)
pankso@754 23
pankso@754 24 # Internationalization
pankso@754 25 . /usr/bin/gettext.sh
pankso@754 26 TEXTDOMAIN='slitaz-boxes'
pankso@754 27 export TEXTDOMAIN
pankso@754 28
pankso@754 29 #
pankso@754 30 # Functions
pankso@754 31 #
pankso@754 32
pankso@754 33 # Help and usage
pankso@754 34 usage() {
pankso@754 35 cat << EOT
pankso@754 36
pankso@754 37 $(gettext "Usage:") $(basename $0) [command|option] [file]
pankso@754 38
pankso@754 39 $(gettext "Commands:")
pankso@754 40 wodim-help|-wh $(gettext "Show all Wodim options")
pankso@754 41 iso|-i $(gettext "Burn an ISO image")
pankso@754 42 audio|-a $(gettext "Create and burn an audio CD")
pankso@754 43
pankso@754 44 $(gettext "Options:")
pankso@754 45 --iso=/path/to/image.iso
pankso@754 46 --audio=/path/to/directory
pankso@754 47
pankso@754 48 $(gettext "Examples:")
pankso@754 49 $(basename $0) iso /path/to/image.iso
pankso@754 50 $(basename $0) --iso=/path/to/image.iso
pankso@754 51
pankso@754 52 EOT
pankso@754 53 }
pankso@754 54
pankso@754 55 # Ouput a command to a Yad/GTK box. Usage: cmd | out --title="Title" --tail
pankso@754 56 gtkout() {
pankso@754 57 yad --text-info $boxopts "$@" --margins=4 --button="gtk-close":1
pankso@754 58 }
pankso@754 59
pankso@754 60 # Decode audio files with: decode [file]
pankso@754 61 decode_audio() {
pankso@754 62 gettext "Decoding files from:"; echo " $audio"
pankso@754 63 rm -rf $tmpdir && mkdir -p $tmpdir
pankso@754 64 for f in "$audio"/*.*
pankso@754 65 do
pankso@754 66 [ "$debug" ] && echo "DEBUG: handling $f"
pankso@754 67 case "$f" in
pankso@754 68 *.wav)
pankso@754 69 cp -f "$f" $tmpdir ;;
pankso@754 70 *.mp3|*.MP3|*.ogg)
pankso@754 71 ext=${f##*.}
pankso@754 72 if [ ! -f "${f%.$ext}.wav" ]; then
pankso@754 73 decode "$f"
pankso@754 74 mv ${f%.$ext}.wav $tmpdir
pankso@754 75 fi ;;
pankso@754 76 esac
pankso@754 77 done
pankso@754 78 }
pankso@754 79
pankso@754 80 # Burn an ISO image.
pankso@754 81 burn_iso() {
pankso@754 82 [ "${iso##*.}" != "iso" ] && \
pankso@754 83 (gettext "Not an ISO image:"; echo " $iso") && exit 1
pankso@754 84 wodim -v speed=$speed $options "$iso"
pankso@754 85 }
pankso@754 86
pankso@754 87 # Burn some audio tracks from a directory.
pankso@754 88 burn_audio() {
pankso@754 89 decode_audio
pankso@754 90 echo "TODO: check_size"
pankso@754 91 du -sh $tmpdir
pankso@754 92 wodim -v speed=$speed $options -pad -dao -audio $tmpdir/*.wav
pankso@754 93 rm -rf $tmpdir
pankso@754 94 }
pankso@754 95
pankso@754 96 # Main GUI box function with pure Yad spec
pankso@754 97 burn_main() {
pankso@754 98 text="$(gettext "Burn ISO images and audio files [data in next releases]")"
pankso@754 99 yad --form $boxopts --title="Burn-box" \
pankso@754 100 --image=application-x-cd-image --image-on-top \
pankso@754 101 --text="<b>$text</b>" \
pankso@754 102 --field="$(gettext "Drive speed:")":NUM \
pankso@754 103 --field="$(gettext "Wodim options:")" \
pankso@754 104 --field="$(gettext "ISO image:")":FL \
pankso@754 105 --field="$(gettext "Audio files:")":DIR \
pankso@754 106 --button="$(gettext "Wodim help")":"$0 wodim-help" \
pankso@754 107 --button="$(gettext "Blank CD")":"$0 blank" \
pankso@754 108 --button="$(gettext "Burn")":0 \
pankso@754 109 --button="gtk-close":1 \
pankso@754 110 "$speed" "$options" "$iso" "$audio"
pankso@754 111 }
pankso@754 112
pankso@754 113 # Main function
pankso@754 114 burn() {
pankso@754 115 # Store box results
pankso@754 116 main=$(burn_main)
pankso@754 117
pankso@754 118 # Deal with --button values
pankso@754 119 case $? in
pankso@754 120 0) continue ;;
pankso@754 121 *) exit 0 ;;
pankso@754 122 esac
pankso@754 123
pankso@754 124 # Get value from $main
pankso@754 125 speed=$(echo $main | cut -d "|" -f 1 | cut -d "," -f 1)
pankso@754 126 options=$(echo $main | cut -d "|" -f 2)
pankso@754 127 iso=$(echo $main | cut -d "|" -f 3)
pankso@754 128 audio=$(echo $main | cut -d "|" -f 4)
pankso@754 129
pankso@754 130 # Handle ISO image
pankso@754 131 if [ "$iso" != "(null)" ]; then
pankso@754 132 burn_iso 2>&1 | gtkout --title="Burning ISO" --tail
pankso@754 133 fi
pankso@754 134
pankso@754 135 # Handle Audio files.
pankso@754 136 if [ "$audio" != "$HOME" ]; then
pankso@754 137 burn_audio 2>&1 | gtkout --title="Burning Audio" --tail
pankso@754 138 fi
pankso@754 139 }
pankso@754 140
pankso@754 141 #
pankso@754 142 # Commands
pankso@754 143 #
pankso@754 144
pankso@754 145 case "$1" in
pankso@754 146 wodim-help|-wh)
pankso@754 147 wodim --help 2>&1 | gtkout --title="Wodim Help" ;;
pankso@754 148 iso|-i)
pankso@754 149 # Let burn an ISO from cmdline: burn-box -i /path/to/image.iso
pankso@754 150 [ "$iso" == " " ] && iso="$2"
pankso@754 151 if [ ! -f "$iso" ]; then
pankso@754 152 gettext "Missing ISO image"; echo " $iso" && exit 1
pankso@754 153 fi
pankso@754 154 burn_iso ;;
pankso@754 155 audio|-a)
pankso@754 156 # Let create an audio CD from cmdline: burn-box -a /path/to/audio
pankso@754 157 [ "$2" ] && audio="$2"
pankso@754 158 [ "$audio" == "$HOME" ] && unset audio
pankso@754 159 if [ ! -d "$audio" ]; then
pankso@754 160 gettext "Missing audio directory"; echo " $audio" && exit 1
pankso@754 161 fi
pankso@754 162 burn_audio ;;
pankso@754 163 blank)
pankso@754 164 wodim -v -blank=all 2>&1 | gtkout --title="Wodim Blank" --tail ;;
pankso@754 165 ""|--*)
pankso@754 166 burn ;;
pankso@754 167 *)
pankso@754 168 usage ;;
pankso@754 169 esac
pankso@754 170
pankso@754 171 exit 0