CD lookup code cleanup.

This commit is contained in:
Lukáš Lalinský
2007-06-15 23:02:39 +02:00
parent 8158e2614e
commit 547c2e3fc7
2 changed files with 34 additions and 22 deletions

View File

@@ -24,6 +24,9 @@ from PyQt4 import QtCore
from picard.ui.cdlookup import CDLookupDialog
_libdiscid = None
class DiscError(IOError):
pass
@@ -36,16 +39,17 @@ class Disc(QtCore.QObject):
self.submission_url = None
def read(self, device):
libdiscid = _openLibrary()
handle = libdiscid.discid_new()
global _libdiscid
if _libdiscid is None:
_libdiscid = _openLibrary()
handle = _libdiscid.discid_new()
assert handle != 0, "libdiscid: discid_new() returned NULL"
res = libdiscid.discid_read(handle, device)
res = _libdiscid.discid_read(handle, device)
if res == 0:
raise DiscError(libdiscid.discid_get_error_msg(handle))
self.id = libdiscid.discid_get_id(handle)
self.submission_url = libdiscid.discid_get_submission_url(handle)
print self.submission_url
libdiscid.discid_free(handle)
raise DiscError(_libdiscid.discid_get_error_msg(handle))
self.id = _libdiscid.discid_get_id(handle)
self.submission_url = _libdiscid.discid_get_submission_url(handle)
_libdiscid.discid_free(handle)
def lookup(self):
self.tagger.xmlws.find_releases(self._lookup_finished, discid=self.id)

View File

@@ -58,6 +58,7 @@ from picard.browser.browser import BrowserIntegration
from picard.browser.filelookup import FileLookup
from picard.cluster import Cluster, ClusterList, UnmatchedFiles
from picard.config import Config
from picard.disc import Disc, DiscError
from picard.file import File
from picard.formats import open as open_file
from picard.metadata import Metadata
@@ -551,6 +552,7 @@ class Tagger(QtGui.QApplication):
return album
return None
def remove_files(self, files):
"""Remove files from the tagger."""
for file in files:
@@ -588,28 +590,34 @@ class Tagger(QtGui.QApplication):
if files:
self.remove_files(files)
def lookup_cd(self, action=None):
from picard.disc import Disc
"""Reads CD from the selected drive and tries to lookup the DiscID on MusicBrainz."""
if action is None:
device = self.config.setting["cd_lookup_device"].split(",", 1)[0]
else:
device = unicode(action.text())
def read_disc_error(self, error):
self.restore_cursor()
QtGui.QMessageBox.critical(self.window, _(u"CD Lookup Error"), _(u"Error while reading CD:\n\n%s") % error)
def read_disc_finished(self, disc):
self.restore_cursor()
disc.lookup()
def read_disc_thread(self, disc, device):
try:
disc.read(encode_filename(device))
except (NotImplementedError, DiscError), e:
self.thread_assist.proxy_to_main(read_disc_error, self, str(e))
else:
self.thread_assist.proxy_to_main(read_disc_finished, self, disc)
disc = Disc()
self.set_wait_cursor()
self.util_thread.add_task(self._read_disc_thread, disc, device)
self.util_thread.add_task(read_disc_thread, self, disc, device)
def _read_disc_thread(self, disc, device):
from picard.disc import DiscError
try:
disc.read(encode_filename(device))
except (NotImplementedError, DiscError), e:
self.thread_assist.proxy_to_main(self._read_disc_error, str(e))
return
self.thread_assist.proxy_to_main(disc.lookup)
def _read_disc_error(self, error):
self.restore_cursor()
QtGui.QMessageBox.critical(self.window, _(u"CD Lookup Error"), _("Error while reading CD:\n\n%s") % error)
def analyze(self, objs):
"""Analyze the file(s)."""