class MusicBox
Constants
- VERSION
Attributes
catalog[RW]
Public Class Methods
info_to_s(info, indent: 0)
click to toggle source
# File lib/musicbox/info_to_s.rb, line 3 def self.info_to_s(info, indent: 0) io = StringIO.new width = info.map { |i| i.first.length }.max info.each do |label, value, sub_info| io.puts '%s%*s: %s' % [ ' ' * indent, width, label, value, ] io.print info_to_s(sub_info, indent: indent + width + 2) if sub_info end io.string end
new(root:)
click to toggle source
# File lib/musicbox.rb, line 53 def initialize(root:) @catalog = Catalog.new(root: root) @prompt = TTY::Prompt.new end
Public Instance Methods
artist_keys(args)
click to toggle source
# File lib/musicbox.rb, line 225 def artist_keys(args) if args.empty? args = @catalog.releases.items.map { |r| r.artists.map(&:name) }.flatten end ;;pp @catalog.artist_keys(args) end
cover(args, prompt: false, output_file: '/tmp/cover.pdf')
click to toggle source
# File lib/musicbox.rb, line 124 def cover(args, prompt: false, output_file: '/tmp/cover.pdf') releases = [] @catalog.find(args, group: :releases, prompt: prompt).select(&:album).each do |release| release.select_cover unless release.album.has_cover? releases << release if release.album.has_cover? end CoverMaker.make_covers(*releases, output_file: output_file) run_command('open', output_file) end
csv(args)
click to toggle source
# File lib/musicbox.rb, line 206 def csv(args) print Catalog::Release.csv_header @catalog.find(args, group: :releases).each do |release| print release.to_csv end end
dir(args, group: nil)
click to toggle source
# File lib/musicbox.rb, line 160 def dir(args, group: nil) @catalog.find(args, group: group).each do |release| puts "%-10s %s" % [release.id, release.dir] end end
download_images(args)
click to toggle source
# File lib/musicbox.rb, line 118 def download_images(args) @catalog.find(args, group: :releases).select(&:cd?).each do |release| release.download_images end end
dups(args)
click to toggle source
# File lib/musicbox.rb, line 213 def dups(args) dups = @catalog.find_dups(@catalog.find(args, group: :releases)) dups.each do |id, formats| formats.each do |format, releases| if releases.length > 1 puts releases.each { |r| puts r } end end end end
export(args, **params)
click to toggle source
# File lib/musicbox.rb, line 58 def export(args, **params) exporter = Exporter.new(catalog: @catalog, **params) @catalog.find(args, group: :releases).each do |release| album = release.album or raise Error, "Album does not exist for release #{release.id}" exporter.export_album(album) end end
extract(args)
click to toggle source
# File lib/musicbox.rb, line 66 def extract(args) extractor = Extractor.new(catalog: @catalog) @catalog.dirs_for_args(@catalog.extract_dir, args).each do |dir| extractor.extract_dir(dir) end end
extract_cover(args)
click to toggle source
# File lib/musicbox.rb, line 112 def extract_cover(args) @catalog.find(args, group: :releases).select(&:album).each do |release| release.album.extract_cover end end
fix(args)
click to toggle source
# File lib/musicbox.rb, line 73 def fix(args) # key_map = { # :title => :title, # :artist => :artist, # :original_release_year => :year, # :format_quantity => :discs, # } # find(args, group: :releases).select(&:cd?).each do |release| # diffs = {} # key_map.each do |release_key, album_key| # release_value = release.send(release_key) # album_value = release.album.send(album_key) # if album_value && release_value != album_value # diffs[release_key] = [release_value, album_value] # end # end # unless diffs.empty? # puts release # diffs.each do |key, values| # puts "\t" + '%s: %p => %p' % [key, *values] # end # puts # end # end end
formats(args)
click to toggle source
# File lib/musicbox.rb, line 99 def formats(args) formats = {} @catalog.find(args, group: :releases).each do |release| release.formats.each do |format| formats[format.name] ||= 0 formats[format.name] += 1 end end formats.each do |name, count| puts '%5d %s' % [count, name] end end
import(args)
click to toggle source
# File lib/musicbox.rb, line 140 def import(args) importer = Importer.new(catalog: @catalog) @catalog.dirs_for_args(@catalog.import_dir, args).each do |dir| begin importer.import_dir(dir) rescue Error => e warn "Error: #{e}" end end end
label(args)
click to toggle source
# File lib/musicbox.rb, line 151 def label(args) labels = @catalog.find(args, group: :releases, prompt: true).map(&:to_label) output_file = '/tmp/labels.pdf' label_maker = LabelMaker.new label_maker.make_labels(labels) label_maker.write(output_file) run_command('open', output_file) end
open(args, group: nil)
click to toggle source
# File lib/musicbox.rb, line 166 def open(args, group: nil) @catalog.find(args, group: group).each do |release| run_command('open', release.dir) end end
orphaned()
click to toggle source
# File lib/musicbox.rb, line 172 def orphaned @catalog.orphaned.each do |group, items| unless items.empty? puts "#{group}:" items.sort.each do |item| puts item end puts end end images = @catalog.orphaned_images unless images.empty? puts "Images:" images.sort.each do |image| puts "\t" + image.to_s end puts end end
play(args, prompt: false, equalizer_name: nil, **params)
click to toggle source
# File lib/musicbox.rb, line 232 def play(args, prompt: false, equalizer_name: nil, **params) albums = @catalog.find(args, prompt: prompt).map(&:album).compact if equalizer_name equalizers = Equalizer.load_equalizers( dir: Path.new(@catalog.config['equalizers_dir']), name: equalizer_name) else equalizers = nil end player = MusicBox::Player.new( albums: albums, equalizers: equalizers, **params) player.play end
select(args)
click to toggle source
# File lib/musicbox.rb, line 248 def select(args) ids = [] loop do releases = @catalog.find(args, group: :releases, prompt: true) or break ids += releases.map(&:id) puts ids.join(' ') end end
select_cover(args, prompt: false)
click to toggle source
# File lib/musicbox.rb, line 134 def select_cover(args, prompt: false) @catalog.find(args, group: :releases, prompt: prompt).select(&:album).each do |release| release.select_cover end end
show(args, group: nil, mode: :summary, prompt: false)
click to toggle source
# File lib/musicbox.rb, line 192 def show(args, group: nil, mode: :summary, prompt: false) @catalog.find(args, group: group, prompt: prompt).each do |release| case mode when :cover release.album.show_cover if release.album&.has_cover? when :details puts release.details_to_s puts when :summary puts release end end end
update()
click to toggle source
# File lib/musicbox.rb, line 257 def update Discogs.new(catalog: @catalog).update end