#!/usr/bin/ruby -w

#=========================================================
# mp32ogg.rb - convierte todos los .mp3 de un directorio
# a ogg usando FFmpeg.
# Usa el módulo Find
#=========================================================
# FJA - fja@neocipres.com 		Noviembre de 2015 
#=========================================================

require 'find'

def buscar_archivo(dir, patron)
 lista = []
 Find.find(dir) do |ruta|
 	lista << ruta if File.basename(ruta) =~ /#{patron}$/ && File.file?(ruta)
 end
 return lista.sort
end
 
 dirmp3 = ''
 op= ''
 tipo = '.mp3'
 
begin
 raise if ARGV.size == 0
 dirmp3 = ARGV[0].dup
 if ARGV.size == 2 then
   op = ARGV[1].dup 
   tipo = '.' + ARGV[1].dup if op != '-lm'   
 end
 if ARGV.size == 3 then
   op = ARGV[1].dup
   tipo = '.' + ARGV[2].dup 
 end
 system('clear')
 archivos = buscar_archivo(dirmp3, tipo)
 print "\n", "="*80
 print "\n Archivos de tipo #{tipo}: ", archivos.size, " archivo#{"s" unless archivos.size==1}"
 print "\n", "="*80, "\n"
 archivos.each do |archivo|
	if archivo.include? "'" then
	  archivoNew = archivo.gsub("'",'-')
	  File.rename(archivo, archivoNew)
	end
 end
 if op == '-lm' then 
 	  opcion = ' -acodec libvorbis -aq 6 -map_metadata -1 '
	else
	  opcion = ' -acodec libvorbis -aq 6 '
	end
 archivos = buscar_archivo(dirmp3, tipo)
 archivos.each do |archivo|
	cmd = ''
 	aout = archivo.sub(tipo, '') << '.ogg'
	
	archivo = "'" + archivo + "'"
	aout = "'" + aout + "'"
	
	cmd << 'ffmpeg' << ' -i ' << archivo << opcion << aout 
 	system(cmd)
	puts "\t #{archivo} "
 end	
 archivos = buscar_archivo(dirmp3, '.ogg')
 print "="*80
 print "\n\t => ",archivos.size," archivo#{"s" unless archivos.size==1} convertidos a ogg \n"
 print "\n\t Opcion de FFmpeg: #{opcion} \n"
 print "="*80, "\n"
  
rescue
 if ARGV.size == 0
 	print "\n\t", "="*70
  	print "\n\t Uso: mp32ogg <directorio> [-lm] [tipo]"
	print "\n\t", "-"*70
	print "\n\t -lm: limpia los metadatos \n"
	print "\n\t tipo: los formatos de audio a convertir a ogg --> mp3 flac ... \n"
	print "\n\t", "-"*70
	print "\n\t mp32ogg es un enlace simbólico a mp32ogg.rb "
	print "\n\t", "="*70, "\n\n"
	
 else
	puts "\n\t Error-> #{$!} \n\n"
 end
end
