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

tazbox: add logout menu handling, update pot/po files.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Sat Nov 12 12:54:13 2016 +0200 (2016-11-12)
parents 3be081525506
children 491239328786
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
al@813 4 # window uncluttered and use a wizard to create audio/video/data CD/DVD.
paul@763 5 # The main box lets users burn an ISO and audio files from a single directory.
pankso@754 6 #
al@939 7 # Copyright (C) 2012-2015 SliTaz GNU/Linux - BSD License
pankso@754 8 #
pankso@754 9 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@754 10 #
al@939 11
pankso@754 12 . /lib/libtaz.sh
al@813 13 export TEXTDOMAIN='slitaz-boxes' # i18n
pankso@754 14
al@939 15
pankso@754 16 # LibTaz parser and store options. Burn-box can be used with an ISO image
pankso@754 17 # or an audio directory in option: burn-box --iso=/path/to/image.iso
al@939 18
pankso@754 19 [ "$iso" ] || iso=" "
pankso@754 20 [ "$audio" ] || audio="$HOME"
pankso@754 21
al@939 22
al@813 23 # Internal variables
al@939 24
al@813 25 boxopts="--height=300 --width=620"
al@960 26 icon='drive-optical'
al@813 27 options="-eject -multi"
al@813 28 speed=$(fgrep "drive speed" /proc/sys/dev/cdrom/info | cut -f3)
al@813 29 tmpdir=$(mktemp -d)
pankso@754 30
al@939 31
pankso@754 32 #
pankso@754 33 # Functions
pankso@754 34 #
pankso@754 35
al@939 36
pankso@754 37 # Help and usage
al@939 38
pankso@754 39 usage() {
al@813 40 newline; _ 'Burn-box a small front end to cdrkit powered by Yad/GTK.'
al@813 41 newline; boldify $(_ 'Usage:')
al@813 42 echo " $(basename $0) [$(_n 'command')|$(_n 'option')] [$(_n 'file')]"
pankso@754 43
al@813 44 newline; boldify $(_ 'Commands:')
al@813 45 optlist "\
al@813 46 wodim-help|-wh $(_n 'Show all Wodim options')
al@813 47 iso|-i $(_n 'Burn an ISO image')
al@813 48 audio|-a $(_n 'Create and burn an audio CD')
al@813 49 blank $(_n 'Erase a RW disk')"
pankso@754 50
al@813 51 newline; boldify $(_ 'Options:')
al@813 52 echo "\
al@813 53 --iso=$(_n '/path/to/image.iso')
al@813 54 --audio=$(_n '/path/to/directory')"
pankso@754 55
al@813 56 newline; boldify $(_ 'Examples:')
al@813 57 echo "\
al@813 58 $(basename $0) iso $(_n '/path/to/image.iso')
al@813 59 $(basename $0) --iso=$(_n '/path/to/image.iso')"
al@813 60 newline
pankso@754 61 }
pankso@754 62
al@939 63
pankso@754 64 # Ouput a command to a Yad/GTK box. Usage: cmd | out --title="Title" --tail
al@939 65
pankso@754 66 gtkout() {
al@813 67 yad --window-icon=$icon $boxopts \
al@813 68 --margins=4 --fontname=monospace \
al@813 69 --text-info "$@" --button="gtk-close:1"
pankso@754 70 }
pankso@754 71
al@939 72
pankso@754 73 # Decode audio files with: decode [file]
al@939 74
pankso@754 75 decode_audio() {
al@943 76 _ 'Decoding files from: %s' "$audio"
pankso@754 77 for f in "$audio"/*.*
pankso@754 78 do
al@813 79 debug "handling $f"
pankso@754 80 case "$f" in
pankso@754 81 *.wav)
pankso@754 82 cp -f "$f" $tmpdir ;;
pankso@754 83 *.mp3|*.MP3|*.ogg)
pankso@754 84 ext=${f##*.}
pankso@754 85 if [ ! -f "${f%.$ext}.wav" ]; then
pankso@754 86 decode "$f"
pankso@754 87 mv ${f%.$ext}.wav $tmpdir
pankso@754 88 fi ;;
pankso@754 89 esac
pankso@754 90 done
pankso@754 91 }
pankso@754 92
al@939 93
pankso@754 94 # Burn an ISO image.
al@939 95
pankso@754 96 burn_iso() {
al@813 97 if [ "${iso##*.}" != "iso" ]; then
al@943 98 _ 'Not an ISO image: "%s"' "$iso"; exit 1
al@813 99 fi
pankso@754 100 wodim -v speed=$speed $options "$iso"
pankso@754 101 }
pankso@754 102
al@939 103
pankso@754 104 # Burn some audio tracks from a directory.
al@939 105
pankso@754 106 burn_audio() {
pankso@754 107 decode_audio
pankso@754 108 echo "TODO: check_size"
pankso@754 109 du -sh $tmpdir
pankso@754 110 wodim -v speed=$speed $options -pad -dao -audio $tmpdir/*.wav
pankso@754 111 rm -rf $tmpdir
pankso@754 112 }
pankso@754 113
al@939 114
pankso@754 115 # Main GUI box function with pure Yad spec
al@939 116
pankso@754 117 burn_main() {
al@813 118 yad --title="$(_ 'Burn-box')" --window-icon=$icon $boxopts \
al@813 119 --image=$icon --image-on-top \
al@813 120 --text="<b>$(_n 'Burn ISO images and audio files [data in next releases]')</b>" \
al@813 121 --form \
al@813 122 --field="$(_n 'Drive speed:')" "$speed" \
al@813 123 --field="$(_n 'Wodim options:')" " $options" \
al@813 124 --field="$(_n 'ISO image:'):FL" "$iso" \
al@813 125 --field="$(_n 'Audio files:'):DIR" "$audio" \
al@813 126 --button="$(_n 'Wodim help'):$0 wodim-help" \
al@813 127 --button="$(_n 'Blank CD'):$0 blank" \
al@813 128 --button="$(_n 'Burn'):0" \
al@813 129 --button="gtk-close:1"
pankso@754 130 }
pankso@754 131
al@939 132
pankso@754 133 # Main function
al@939 134
pankso@754 135 burn() {
pankso@754 136 # Store box results
pankso@754 137 main=$(burn_main)
pankso@754 138
pankso@754 139 # Deal with --button values
pankso@754 140 case $? in
pankso@754 141 0) continue ;;
pankso@754 142 *) exit 0 ;;
pankso@754 143 esac
pankso@754 144
al@813 145 # Get values from $main
al@813 146 eval $(echo $main | awk -F'|' \
al@813 147 '{printf "speed=\"%s\" options=\"%s\" iso=\"%s\" audio=\"%s\"", $1, $2, $3, $4}')
al@813 148 speed=${speed%%,*} # first from comma separated list
pankso@754 149
pankso@754 150 # Handle ISO image
pankso@754 151 if [ "$iso" != "(null)" ]; then
al@813 152 burn_iso 2>&1 | gtkout --title="$(_n 'Burning ISO')" --tail
pankso@754 153 fi
pankso@754 154
pankso@754 155 # Handle Audio files.
pankso@754 156 if [ "$audio" != "$HOME" ]; then
al@813 157 burn_audio 2>&1 | gtkout --title="$(_n 'Burning Audio')" --tail
pankso@754 158 fi
pankso@754 159 }
pankso@754 160
al@939 161
pankso@754 162 #
pankso@754 163 # Commands
pankso@754 164 #
pankso@754 165
pankso@754 166 case "$1" in
al@813 167 -h|--help)
al@813 168 usage ;;
pankso@754 169 wodim-help|-wh)
al@813 170 wodim --help 2>&1 | gtkout --title="$(_n 'Wodim Help')" ;;
pankso@754 171 iso|-i)
pankso@754 172 # Let burn an ISO from cmdline: burn-box -i /path/to/image.iso
pankso@754 173 [ "$iso" == " " ] && iso="$2"
pankso@754 174 if [ ! -f "$iso" ]; then
al@943 175 _ 'Missing ISO image "%s"' "$iso"; exit 1
pankso@754 176 fi
pankso@754 177 burn_iso ;;
pankso@754 178 audio|-a)
pankso@754 179 # Let create an audio CD from cmdline: burn-box -a /path/to/audio
pankso@754 180 [ "$2" ] && audio="$2"
pankso@754 181 [ "$audio" == "$HOME" ] && unset audio
pankso@754 182 if [ ! -d "$audio" ]; then
al@943 183 _ 'Missing audio directory "%s"' "$audio"; exit 1
pankso@754 184 fi
pankso@754 185 burn_audio ;;
pankso@754 186 blank)
al@813 187 wodim -v -blank=fast 2>&1 | gtkout --title="$(_n 'Blank disk')" --tail ;;
pankso@754 188 ""|--*)
pankso@754 189 burn ;;
pankso@754 190 *)
pankso@754 191 usage ;;
pankso@754 192 esac
pankso@754 193
pankso@754 194 exit 0