Home

Archivos

Buscar

Categorías

Feeds:

RSS / Atom

Playlists para Blackberry· 2. August 2008, 04:53

El sístema 4.5 de BB permite playlists y cuando analicé el archivo que genera ví que es simplemente una lista con los nombres de los archivos, el detalle es que las generadas por la BB tienen antes la dirección local, por lo que no se puede usar la misma playlist cuando está conectada a la compu. Simplemente fue cuestion de quitarle la informacion de file:// y hacer una playlist con direcciones relativas. No hay problema.

Después llegué al siguiente issue: Tengo varios podcasts en mi blackberry que se tienen que escuchar en orden. El detalle es que para el sistema operativo el del “Archivo 10.mp3” sigue el “Archivo 100.mp3”. La solución está en generar la playlist ordenando de acuerdo al número; y no al código ASCII. Ya entrado en gastos en el proceso puede ser útil renombrar los archivos en masa, así que de una vez agregué esa función aquí va mi programita. (Este es un excelente candidato para agregarle una GUI con shoes, así que ya tengo dos)

#Clases para generador de playlists y renombrar archivos
class M3u
  def initialize(dir,selector,lista_archivos=nil,real=false,verbose=true)
    if lista_archivos
      @archivos=lista_archivos
    else
      @dir=dir
      @selector=selector
      genera_lista_archivos
    end
    @real=real
    @verbose=verbose
  end
  def genera_lista_archivos
    Dir.chdir(@dir)
    @archivos=Dir.glob(@selector)
  end
  def renombra(original,reemplazo)
    @archivos.map! do |filename|
      newfilename=filename.gsub(original,reemplazo)
      puts "#{filename}->#{newfilename}" if @verbose
      File.rename(filename,newfilename) if @real
      newfilename
    end
  end
  def ordena(regex)
    lista={}
    @archivos.each do |filename|
      filename.match(regex)
      lista[Regexp.last_match(1).to_i] = filename # después de cualquier uso de regexp, 
      #los grupos guardados entre parentesis quedan en last_match
    end
    @archivos=lista.sort.map {|a| a[1]} #como el hash quedó con el numero y luego
    #el nombre de archivo, queremos el segundo elemento. Lista sort genera un array
    puts "Ordenada", @archivos if @verbose
  end
  def genera_playlist(name)
    if File.exist?(name)
      puts "Ya existe" #Y??? dales opcion para reemplazarla
    else
      f = File.new(name,"w")
      @archivos.each {|a| f<<a.gsub("\ ","%20")+"\n"} #la playlist no puede tener espacios en el nombre los cambiamos por %20 como en la web
      f.close
    end
  end
end
if __FILE__==$0
  RENAME=false
  REAL=false
  VERBOSE=true
  directorio='H:\BlackBerry\music\podcasts\ '#el espacio final es para 
  #que no tome \' como escape y así evitamos usar " y tener que escapar todos los espacios y \
  directorio='H:\Blackberry\music\podcasts\Chinese '
  selector_archivos="*.mp3"
  original=Regexp.new("Starting Out in Chinese ")
  replacement="chinese "
  #~ orden=Regexp.new("([0-9]{2})") #exactamente 2 dígitos
  #~ orden=Regexp.new(/e(\d)/) #una e seguida de un dígito y solo tomamos el dígito para ordenar
  orden=Regexp.new("([0-9]{2,3})") #entre 2 y 3 dígitos
  a=M3u.new(directorio,selector_archivos,nil,REAL,VERBOSE)
  a.renombra(original,replacement) if RENAME
  a.ordena(orden)
  a.genera_playlist(replacement.chop+".m3u") #este chop es un horror, mejorar
end