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 |