Class: MusicBox::Importer
- Inherits:
-
Object
- Object
- MusicBox::Importer
- Defined in:
- lib/musicbox/importer.rb
Instance Method Summary collapse
- #copy_files ⇒ Object
- #determine_disc ⇒ Object
- #find_release ⇒ Object
- #find_track_for_title(title) ⇒ Object
- #import_album ⇒ Object
- #import_dir(source_dir) ⇒ Object
-
#initialize(catalog:) ⇒ Importer
constructor
A new instance of Importer.
- #make_album ⇒ Object
- #make_album_track(file) ⇒ Object
- #make_copy_plan ⇒ Object
- #make_cover ⇒ Object
- #make_label ⇒ Object
Constructor Details
#initialize(catalog:) ⇒ Importer
Returns a new instance of Importer.
5 6 7 8 |
# File 'lib/musicbox/importer.rb', line 5 def initialize(catalog:) @catalog = catalog @prompt = TTY::Prompt.new end |
Instance Method Details
#copy_files ⇒ Object
113 114 115 116 117 118 119 |
# File 'lib/musicbox/importer.rb', line 113 def copy_files @copy_plan.each do |source_file, dest_file| source_file.cp(dest_file) end @catalog.import_done_dir.mkpath unless @catalog.import_done_dir.exist? @source_dir.rename(@catalog.import_done_dir / @source_dir.basename) end |
#determine_disc ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/musicbox/importer.rb', line 24 def determine_disc @disc = nil if @album raise Error, "Album already exists" if @release.format_quantity.nil? || @release.format_quantity == 1 puts "Release has multiple discs." n = @prompt.ask?('Which disc is this?', required: true, convert: :int) raise Error, "Disc number out of range" unless n >= 1 && n <= @release.format_quantity @disc = n end end |
#find_release ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/musicbox/importer.rb', line 35 def find_release releases = @catalog.find(@source_dir.basename.to_s, group: :releases, prompt: true, multiple: false) @release = releases.first @tracklist_flattened = @release.tracklist_flattened print @release.details_to_s end |
#find_track_for_title(title) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/musicbox/importer.rb', line 81 def find_track_for_title(title) release_track = @tracklist_flattened.find { |t| t.title.downcase == title.downcase } unless release_track puts "Can't find release track with title #{title.inspect}" choices = @tracklist_flattened.map { |t| [t.title, t] }.to_h release_track = @prompt.select('Track?', choices, per_page: 100) end release_track end |
#import_album ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/musicbox/importer.rb', line 91 def import_album raise Error, "No tracks were added to album" if @album.tracks.empty? @album.save copy_files @album. extract_cover end |
#import_dir(source_dir) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/musicbox/importer.rb', line 10 def import_dir(source_dir) @source_dir = Path.new(source_dir).realpath puts; puts "Importing from #{@source_dir}" find_release determine_disc make_album make_copy_plan if @prompt.yes?('Add?') import_album make_label if @prompt.yes?('Make label?') make_cover if @prompt.yes?('Make cover?') end end |
#make_album ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/musicbox/importer.rb', line 45 def make_album @album = Catalog::Album.new( id: @release.id, title: @release.title, artist: @release.artist, year: @release.original_release_year, discs: @release.format_quantity, dir: @catalog.albums.dir_for_id(@release.id)) @release.album = @album end |
#make_album_track(file) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/musicbox/importer.rb', line 56 def make_album_track(file) = Catalog::Tags.load(file) release_track = find_track_for_title([:title]) name = '%s%02d - %s' % [ @disc ? ('%1d-' % @disc) : '', [:track], release_track.title.gsub(%r{[/:]}, '_'), ] album_track = Catalog::AlbumTrack.new( title: release_track.title, artist: release_track.artist || @release.artist, track: [:track], disc: @disc || [:disc], file: Path.new(name).add_extension(file.extname), tags: , album: @album) puts "%-50s ==> %6s - %-50s ==> %-50s" % [ file.basename, release_track.position, release_track.title, album_track.file, ] album_track end |
#make_copy_plan ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/musicbox/importer.rb', line 99 def make_copy_plan @copy_plan = @source_dir.children.select(&:file?).sort.map do |source_file| dest_file = case source_file.extname.downcase when '.m4a' album_track = make_album_track(source_file) or next @album.tracks << album_track album_track.file else source_file.basename end [source_file, @album.dir / dest_file] end.to_h end |
#make_cover ⇒ Object
127 128 129 |
# File 'lib/musicbox/importer.rb', line 127 def make_cover #FIXME end |
#make_label ⇒ Object
121 122 123 124 125 |
# File 'lib/musicbox/importer.rb', line 121 def make_label output_file = '/tmp/labels.pdf' LabelMaker.make_labels(@release.to_label, output_file: output_file) run_command('open', output_file) end |