X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/92b70429f40867f36e8fc843f1ecabb7734252dc..47d39442b35fe1d44133693f95e81c03cab69a9f:/fa-rip diff --git a/fa-rip b/fa-rip index af19f82..1fe5bbd 100755 --- a/fa-rip +++ b/fa-rip @@ -1,4 +1,4 @@ -#! /usr/bin/env python2.4 +#!/usr/bin/python """ =head1 NAME @@ -7,7 +7,7 @@ B - rip a CD for B =head1 SYNOPSIS -B [B<-d> I] [B<-p> I [B<-t> I] +B [B<--artist> I B<--title> I] [B<-d> I<device>] [B<-m>] [B<-p> I<post-processor>] [B<-s>] [B<-t> I<track-count>] =head1 DESCRIPTION @@ -38,7 +38,7 @@ just need to set things up for B<fa-flacd>. Use I<device> as the CD-ROM device, instead of the default "/dev/cdrom" or the environment variable CDDEV. -B<-m> [B<--no-musicbrainz>] +=item B<-m> [B<--no-musicbrainz>] Don't connect to MusicBrainz, just write candidate-tags-0. @@ -48,7 +48,7 @@ Create a "post-processor" file in the temporary directory containing the line 'I<post-processor> "$@"'. See B<fa-flacd>'s man page for information about this hook. -B<-s> [B<--single-file>] +=item B<-s> [B<--single-file>] Rip whole disc to one wav file and configure B<fa-flacd> to encode it to one FLAC file with embedded cuesheet. @@ -128,7 +128,10 @@ def mkcue(disc, trackcount=None): def tags_file(fn, trackcount, various, artist=None, album=None, release_dates={}, tracks=[]): fp = c(file, fn, 'w') - c(fp.write, 'ARTIST=') + if various: + c(fp.write, 'ALBUMARTIST=') + else: + c(fp.write, 'ARTIST=') if artist != None: c(fp.write, artist.encode('utf-8')) c(fp.write, '\nALBUM=') @@ -170,23 +173,30 @@ def tags(q, releases, trackcount): tags_file('candidate-tags-0', trackcount, False) - include = musicbrainz2.webservice.ReleaseIncludes(tracks=True) + include = musicbrainz2.webservice.ReleaseIncludes(artist=True, tracks=True) i = 0 - for album in releases: + for rel_id in releases: i += 1 - various = not album.release.isSingleArtistRelease() + release = q.getReleaseById(rel_id, include) + various = not release.isSingleArtistRelease() if various and not seen_various: seen_various = True - tags_file('candidate-tags-0v', trackcount, True) + tags_file('candidate-tags-0v', trackcount, various) tags_file('candidate-tags-' + str(i), trackcount, various, - album.release.artist.name, album.release.title, - album.release.getReleaseEventsAsDict(), - q.getReleaseById(album.release.id, include).tracks) - - cover_art(str(i), album.release.asin) + release.artist.name, release.title, + release.getReleaseEventsAsDict(), + release.tracks) + + # XXX Not sure if .asin is here after my change above; may need to + # include urlRelations=True. See also: + # for i in release.getRelations(): print i.type + # http://musicbrainz.org/ns/rel-1.0#Wikipedia + # ... + # http://musicbrainz.org/ns/rel-1.0#AmazonAsin + cover_art(str(i), release.asin) def rip(device, trackcount, single_file): if device == None: @@ -212,7 +222,9 @@ def make_post_processor(command): def releases_by_disc(q, disc): filter = musicbrainz2.webservice.ReleaseFilter(discId=disc.getId()) - return q.getReleases(filter) + # XXX had to change x.getId to x.release.getId on 10.04; is that an API + # change in a newer version (handle both) or is this code I never tested? + return (x.release.getId() for x in q.getReleases(filter)) def releases_by(q, title, artist=None): r = q.getReleases(musicbrainz2.webservice.ReleaseFilter(title=title)) @@ -220,8 +232,8 @@ def releases_by(q, title, artist=None): return r artist = re.sub(r'\s+', r'\s+', artist.strip()) - return [x for x in r if re.match(artist, x.release.artist.name, - re.IGNORECASE) != None] + return (x.getId() for x in r if re.match(artist, x.release.artist.name, + re.IGNORECASE) != None) def main(argv): # Control the exit code for any uncaught exceptions.