class CddbParser::ParseCddbFile

Public Class Methods

new(files) click to toggle source
# File lib/cddb_parser.rb, line 99
def initialize(files)
  @files = []
  self.build_file_list(files)
  pp "Files: #{@files}"
  @files.sort!
end

Public Instance Methods

build_file_list(targets) click to toggle source
# File lib/cddb_parser.rb, line 110
def build_file_list(targets)
  targets.each do |t|
    puts "file: #{t}"
    if File::directory?(t)
      puts "Expanding directory #{t}"
      self.expand_directory(t)
    elsif readable_file?(t)
      @files << t
    else
      STDERR.puts "File #{t} is invalid"
    end
  end
end
check_files() click to toggle source
# File lib/cddb_parser.rb, line 136
def check_files
  puts "Here in parsecddb check!"
  @files.each do |f|
    self.scan_file f
    exit 0
  end
end
expand_directory(dir) click to toggle source
# File lib/cddb_parser.rb, line 124
def expand_directory(dir)
  #Dir.glob("dir/*").each do |f|
  Dir.entries(dir).select do |f|
    file = [dir,f].join('/')
    puts "dir: #{file}"
    if readable_file?(file)
      puts "readalbe #{file}"
      @files << file
    end
  end
end
list_files(option) click to toggle source
# File lib/cddb_parser.rb, line 210
  def list_files(option)
    puts "Here in parsecddb list! (#{option})"
    @files.each do |f|
      discid, ref = self.scan_file(f)
      print "discid:    #{discid}
artist:    #{ref[:artist]}
album:     #{ref[:album]}
year:      #{ref[:year]}
genre:     #{ref[:genre]}
playorder: #{ref[:playorder]}
tracks:
"
      ref[:tracks].each do |t,k|
        print "  #{t}:
    title:  "#{k[:title]}"
    artist: "#{k[:artist]}"
    offset: #{k[:offset].to_s}
    ext:    "#{k[:ext]}"
"
      end
      exit 0
    end
  end
readable_file?(arg) click to toggle source
# File lib/cddb_parser.rb, line 106
def readable_file?(arg)
    File::file?(arg) && File.readable?(arg)
end
scan_file(file) click to toggle source
# File lib/cddb_parser.rb, line 144
def scan_file(file)
  year = ''
  genre = ''
  discid = ''
  artist_album = ''
  extd = ''
  compilation = 0
  trackmap = {'TTITLE'=>:title, 'TARTIST'=>:artist,'EXTT'=>:ext}
  tracks = Hash.new {|h,k| h[k] = {}}
  playorder = []
  trkct = 0

  File.open(file).each do |line|
    line.chomp
    case line
      when %r^#\s+(\d+)\s*$/
        tracks[trkct][:offset] = $1.to_i
        trkct += 1
      when %r^#\s+Disc\s+length:?\s+(\d+)\s+sec/
        disk_secs = $1
      when %r^DTITLE=(.*)/
        artist_album << $1
      when %r^DYEAR=(.*)/
        year = $1
        #puts "year: #{year}"
      when %r^DGENRE=(.*)/
        genre = $1
        #puts "genre: #{genre}"
      when %r^DID3=(\d+)/
        did = $1
      when %r^DISCID=(.*)/
        discid = $1
      when %r^EXTD=(.*)/
        extd << $1
      when %r^(#{trackmap.keys.join("|")})(\d+)=(.*)/
        field, trackno, value = $1, $2, $3
        field = trackmap[field]
        compilation = 1 if field == 'artist'
        tracks[trackno.to_i][field] = "" if tracks[trackno.to_i][field].nil?
        tracks[trackno.to_i][field] << value
      when %r^PLAYORDER=(.*)/
        playorder << $1 if $1 !~ %r^\s*$/
      end
    end
    disk_artist, disk_album = artist_album.split(%r\s+\/\s+/)
    if compilation == 1
      disk_artist = "Various Artists"
    else
      tracks.each do |k,v|
        if tracks[k][:artist].nil?
          tracks[k][:artist] = disk_artist
        end
      end
    end
    ref = {
      artist: disk_artist,
      album: disk_album,
      year: year,
      genre: genre,
      playorder: playorder,
      tracks: tracks
    }
    pp ref
    [discid, ref]
end
store_files(db, user, pw) click to toggle source
# File lib/cddb_parser.rb, line 236
def store_files(db, user, pw)
  puts "Here in parsecddb store! (#{db}, #{user}, #{pw})"
end