# File lib/cddb_parser.rb, line 99 def initialize(files) @files = [] self.build_file_list(files) pp "Files: #{@files}" @files.sort! end
# 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
# 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
# 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
# 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
# File lib/cddb_parser.rb, line 106 def readable_file?(arg) File::file?(arg) && File.readable?(arg) end
# 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
# File lib/cddb_parser.rb, line 236 def store_files(db, user, pw) puts "Here in parsecddb store! (#{db}, #{user}, #{pw})" end