From f21d9dc8f3e76abd74c936249997765588ffcc9d Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Wed, 15 Jan 2014 08:28:10 +0000 Subject: [PATCH] Reads from CD and lists matching releases to choose from. --- bin/rippr | 23 +++++++++++++++++------ lib/rippr.rb | 24 ++++++++++++++++-------- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/bin/rippr b/bin/rippr index a2dacc3..2f2349e 100755 --- a/bin/rippr +++ b/bin/rippr @@ -3,19 +3,30 @@ require 'bundler' Bundler.setup -require 'ostruct' require 'thor' -require 'musicbrainz' require 'rippr' class Cli < Thor desc "rip", "Rip the CD currently in the drive." def rip - disc = 'pmzhT6ZlFiwSRCdVwV0eqire5_Y-' - puts "Getting metadata from MusicBrainz..." - metadata = Rippr::MetaData.new(disc) - print metadata.releases + begin + disc = DiscId.read('/dev/rdisk2') + rescue DiscId::DiscError + puts "Disc not present." + exit + end + + puts "Searching MusicBrainz..." + metadata = Rippr::MetaData.new(disc.id) + + release = metadata.choose_release + + if release.nil? + puts "No release selected." + exit + end + puts release.id end end diff --git a/lib/rippr.rb b/lib/rippr.rb index 1ef48b8..7242284 100644 --- a/lib/rippr.rb +++ b/lib/rippr.rb @@ -1,5 +1,8 @@ -require "musicbrainz_discid" -require "rippr/version" +require 'ostruct' +require 'discid' +require 'musicbrainz' +require 'musicbrainz_discid' +require 'rippr/version' module Rippr class MetaData @@ -14,14 +17,19 @@ module Rippr @discid = discid end + def choose_release + return releases[0] if releases.count == 1 + puts "There are multiple matches, please choose:" + releases.to_enum.with_index(1) do |release, index| + puts "#{index}: #{release.title} (#{release.country})" + end + print "Choose a release: " + index = STDIN.gets.chomp.to_i + releases[index - 1] unless index.zero? + end + def releases @releases ||= MusicBrainz::Release.find_by_discid(@discid) end end end - -class DiscId - def self.read(dev) - OpenStruct.new(id: 'pmzhT6ZlFiwSRCdVwV0eqire5_Y-') # Stubbed for initial testing - end -end