Class: MusicBox::Extractor

Inherits:
Object
  • Object
show all
Defined in:
lib/musicbox/extractor.rb

Instance Method Summary collapse

Constructor Details

#initialize(catalog:) ⇒ Extractor

Returns a new instance of Extractor.



5
6
7
# File 'lib/musicbox/extractor.rb', line 5

def initialize(catalog:)
  @catalog = catalog
end

Instance Method Details

#extract_dir(source_dir) ⇒ Object

Raises:



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/musicbox/extractor.rb', line 9

def extract_dir(source_dir)
  puts "Extracting #{source_dir}"
  files = @catalog.categorize_files(source_dir)
  cue_file = files[:cue]&.shift or raise Error, "No cue file found"
  bin_file = files[:audio]&.shift or raise Error, "No bin file found"
  dest_dir = @catalog.import_dir / source_dir.basename
  raise Error, "Extraction directory already exists: #{dest_dir}" if dest_dir.exist?
  dest_dir.mkpath
  xld_extract(cue_file: cue_file, bin_file: bin_file, dest_dir: dest_dir)
  files.values.flatten.each { |p| p.cp_r(dest_dir) }
  @catalog.extract_done_dir.mkpath unless @catalog.extract_done_dir.exist?
  source_dir.rename(@catalog.extract_done_dir / source_dir.basename)
end

#xld_extract(cue_file:, bin_file:, dest_dir:) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/musicbox/extractor.rb', line 23

def xld_extract(cue_file:, bin_file:, dest_dir:)
  dest_dir.chdir do
    run_command('xld',
      '-c', cue_file,
      '-f', 'alac',
      '--filename-format', '%D-%n - %t',
      bin_file)
  end
end