diff --git a/morituri/common/program.py b/morituri/common/program.py index 4bdced7..a65b9c0 100644 --- a/morituri/common/program.py +++ b/morituri/common/program.py @@ -33,6 +33,7 @@ from morituri.program import cdrdao, cdparanoia from morituri.image import image from morituri.extern.task import task, gstreamer +from morituri.extern.musicbrainzngs import musicbrainz # FIXME: should Program have a runner ? @@ -297,10 +298,18 @@ class Program(log.Loggable): """ # FIXME: convert to nonblocking? import CDDB - code, md = CDDB.query(cddbdiscid) - self.debug('CDDB query result: %r, %r', code, md) - if code == 200: - return md['title'] + try: + code, md = CDDB.query(cddbdiscid) + self.debug('CDDB query result: %r, %r', code, md) + if code == 200: + return md['title'] + + except IOError, e: + # FIXME: for some reason errno is a str ? + if e.errno == 'socket error': + self._stdout.write("Warning: network error: %r\n" % (e, )) + else: + raise return None @@ -325,6 +334,9 @@ class Program(log.Loggable): record=self._record) except mbngs.NotFoundException, e: break + except musicbrainz.NetworkError, e: + self._stdout.write("Warning: network error: %r\n" % (e, )) + break except mbngs.MusicBrainzException, e: self._stdout.write("Warning: %r\n" % (e, )) time.sleep(5) diff --git a/morituri/rip/cd.py b/morituri/rip/cd.py index c2c1a94..1689ae0 100644 --- a/morituri/rip/cd.py +++ b/morituri/rip/cd.py @@ -23,6 +23,8 @@ import os import math import glob +import urllib2 +import socket import gobject gobject.threads_init() @@ -97,8 +99,9 @@ class _CD(logcommand.LogCommand): self.stdout.write('FreeDB identifies disc as %s\n' % cddbmd) # also used by rip cd info - if not getattr(self.options, 'unknown', False) and self.eject: - self.program.ejectDevice(self.device) + if not getattr(self.options, 'unknown', False): + if self.eject: + self.program.ejectDevice(self.device) return -1 # now, read the complete index table, which is slower @@ -478,7 +481,18 @@ Install pycdio and run 'rip offset find' to detect your drive's offset. self.stdout.write("AccurateRip URL %s\n" % url) accucache = accurip.AccuCache() - responses = accucache.retrieve(url) + try: + responses = accucache.retrieve(url) + except urllib2.URLError, e: + if isinstance(e.args[0], socket.gaierror): + if e.args[0].errno == -2: + self.stdout.write("Warning: network error: %r\n" % ( + e.args[0], )) + responses = None + else: + raise + else: + raise if not responses: self.stdout.write('Album not found in AccurateRip database\n')