]> diplodocus.org Git - flac-archive/blobdiff - fa-rip
tidy and test epg::flac::archive::tags::disc_tags
[flac-archive] / fa-rip
diff --git a/fa-rip b/fa-rip
index ac35baed59841846a512fa750ecac13fa4db2b1f..6b729804149f3927e592a7045b42b043c278b49b 100755 (executable)
--- a/fa-rip
+++ b/fa-rip
@@ -86,26 +86,31 @@ import os, re, sys, tempfile, time, traceback
 from optparse import OptionParser
 import urllib
 
-import musicbrainz2.disc
-import musicbrainz2.webservice
+import discid.disc
+import musicbrainzngs.musicbrainz
 
 from org.diplodocus.util import catch_EnvironmentError as c
 
+musicbrainzngs.musicbrainz.set_useragent(
+    'flac-archive', '0.1', 'https://diplodocus.org/git/flac-archive')
+
+#import logging
+#logging.basicConfig(level=logging.DEBUG)
+
 # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=439790
 MSF_OFFSET = 150
 
-def mkcue(disc, trackcount=None):
-    fp = c(file, 'cue', 'w')
+def mkcue(fp, disc, trackcount=None):
     c(fp.write, 'FILE "dummy.wav" WAVE\n')
 
     if trackcount == None:
-        trackcount = disc.lastTrackNum
+        trackcount = len(disc.tracks)
     else:
-        trackcount = min(trackcount, disc.lastTrackNum)
+        trackcount = min(trackcount, len(disc.tracks))
 
-    for i in xrange(disc.firstTrackNum, trackcount+1):
-        offset = disc.tracks[i-1][0]
-        offset -= MSF_OFFSET
+    for i in xrange(1, trackcount+1):
+        track = disc.tracks[i-1]
+        offset = track.offset - MSF_OFFSET
 
         minutes = seconds = 0
         sectors = offset % 75
@@ -115,14 +120,12 @@ def mkcue(disc, trackcount=None):
                 minutes = seconds / 60
                 seconds = seconds % 60
 
-        c(fp.write, '  TRACK %02d AUDIO\n' % (i,))
+        c(fp.write, '  TRACK %02d AUDIO\n' % (track.number,))
         if i == 1 and offset > 0:
             c(fp.write, '    INDEX 00 00:00:00\n')
         c(fp.write,
           '    INDEX 01 %02d:%02d:%02d\n' % (minutes, seconds, sectors))
 
-    c(fp.close)
-
     return trackcount
 
 def tags_file(fn, trackcount, various, artist=None, album=None,
@@ -168,12 +171,11 @@ def cover_art(i, asin):
 
 def tags(releases, trackcount):
     results = []
+    seen_asins = set()
     seen_various = False
 
     tags_file('candidate-tags-0', trackcount, False)
 
-    include = musicbrainz2.webservice.ReleaseIncludes(artist=True, tracks=True)
-
     i = 0
     for release in releases:
         i += 1
@@ -193,7 +195,10 @@ def tags(releases, trackcount):
             # http://musicbrainz.org/ns/rel-1.0#Wikipedia
             # ...
             # http://musicbrainz.org/ns/rel-1.0#AmazonAsin
-            cover_art(str(i), release.asin)
+            asin = release.asin
+            if asin not in seen_asins:
+                seen_asins.add(asin)
+                cover_art(str(i), asin)
 
 def rip(device, trackcount, single_file):
     if device == None:
@@ -236,8 +241,11 @@ def get_releases(filter_, tries=5):
             time.sleep(sleep)
 
 def releases_by_disc(disc_id):
-    filter_ = musicbrainz2.webservice.ReleaseFilter(discId=disc_id)
-    return (result.release for result in get_releases(filter_))
+    try:
+        musicbrainzngs.musicbrainz.get_releases_by_discid(disc_id)
+    except musicbrainzngs.musicbrainz.ResponseError:
+        return []
+    raise 'what now'
 
 def releases_by(q, title, artist=None):
     filter_ = musicbrainz2.webservice.ReleaseFilter(title=title)
@@ -257,6 +265,7 @@ def main(argv):
         parser.add_option('--artist')
         parser.add_option('--discid')
         parser.add_option('--title')
+        parser.add_option('--print-discid', action='store_true', default=False)
         parser.add_option('-d', '--device')
         parser.add_option('-m', '--no-musicbrainz',
                           action='store_true', default=False)
@@ -293,12 +302,17 @@ def main(argv):
         elif options.discid != None:
             tags(releases_by_disc(options.discid), trackcount)
         else:
-            disc = musicbrainz2.disc.readDisc(device)
-            trackcount = mkcue(disc, trackcount)
+            disc = discid.disc.read(device)
+            if options.print_discid:
+                print disc.id
+                return 0
+            fp = c(file, 'cue', 'w')
+            trackcount = mkcue(fp, disc, trackcount)
+            c(fp.close)
             if options.no_musicbrainz:
                 releases = []
             else:
-                releases = releases_by_disc(disc.getId())
+                releases = releases_by_disc(disc.id)
             tags(releases, trackcount)
             rip(device, trackcount, options.single_file)
     except Exception, error: