#!/bin/sh
#
# Decode is a cmdline tool to decode all kinds of files such as audio or video.
# Lets you decode a single file, many files on cmdline or a full directory.
#
# Copyright (C) 2012-2015 SliTaz GNU/Linux - BSD License
#
# Author: Christophe Lincoln <pankso@slitaz.org>
#

. /lib/libtaz.sh
export TEXTDOMAIN='slitaz-tools' #i18n


# NOTES:
#	Do we need a --out=/output/path option ?
#	Use convert for [.png|.jpg] --> .raw ?
#	Use separators and give decoded file size ?
#	Use mencoder for flash video files (and other format) ?


#
# Functions
#


# Small help and usage.

usage() {
	cat << EOT

$(_n 'Decode audio and video files')

$(boldify "$(_ 'Usage:')")
  $(basename $0) [$(_n 'option')] [$(_n 'file')|$(_n 'URL')] ...

$(boldify "$(_ 'Examples:')")
  $(basename $0) audio.mp3 audio.ogg
  $(basename $0) $(_n '/path/to/files/*')
  $(basename $0) http://www.myurl/$(_n 'file').avi

EOT
}


# Check if a tool is installed. Don't force users and auto install package
# Decode is a cmdline line tool, let's have auto install option in GUI.

check_tool() {
	dec=$1
	name="$(basename "$file")"
	if [ ! -x /usr/bin/$1 ]; then
		_ 'Missing decoder: %s' "$dec"
		_ 'Skipping file: %s' "$name"
		continue
	else
		_ 'Decoding: %s' "$name"
		newline
	fi
}


# Decode a file.

decoder() {
	newline; separator; newline
	if [ ! -f "$file" ]; then
		_ 'No file: %s' "$file"
		continue
	fi
	ext=$(echo ${file##*.} | tr '[A-Z]' '[a-z]')
	case $ext in
		mp3)
			check_tool "mpg123"
			mpg123 --rate 44100 --stereo --buffer 3072 --resync \
				-w "${file%.*}.wav" "$file" ;;
		ogg)
			check_tool "oggdec"
			oggdec "$file" ;;
		avi|wmv|mov|flv)
			check_tool "ffmpeg"
			# *.flv --> mencoder file.flv -ovc lavc -oac mp3lame -o file.avi
			ffmpeg -y -i "$file" "${file%.*}.mpg"
			du -sh "${file%.*}.mpg" ;;
		wav|mpg|--*)
			# Skip decoded files and --options.
			name="$(basename "$file")"
			_ 'Skipping file: %s' "$name"
			continue ;;
		*) _ 'Unsupported file: %s' "$file" ;;
	esac
}


#
# Commands
#

case "$1" in
	-h|--help|"") usage ;;
	*)
		for file in "$@"; do
			debug "$file"
			case "$file" in
				http://*)
					busybox wget "$file"
					file="$(basename "$file")"
					decoder && rm "$file" ;;
				*.*)
					decoder ;;
			esac
		done
		newline ;;
esac

exit 0
