mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-07 00:54:14 +00:00
Add a menu to the CD lookup button.
This commit is contained in:
@@ -88,8 +88,11 @@ MUSICDNS_KEY = "80eaa76658f99dbac1c58cc06aa44779"
|
||||
|
||||
class Tagger(QtGui.QApplication):
|
||||
|
||||
__instance = None
|
||||
|
||||
def __init__(self, localedir):
|
||||
QtGui.QApplication.__init__(self, sys.argv)
|
||||
self.__class__.__instance = self
|
||||
|
||||
self.config = Config()
|
||||
|
||||
@@ -697,15 +700,18 @@ class Tagger(QtGui.QApplication):
|
||||
return CachedWebService(cachedir=self.cachedir, force=not cached,
|
||||
**kwargs)
|
||||
|
||||
def lookup_cd(self):
|
||||
def lookup_cd(self, action=None):
|
||||
if action is None:
|
||||
drive = self.config.setting["cd_lookup_device"]
|
||||
else:
|
||||
drive = unicode(action.text())
|
||||
self.set_wait_cursor()
|
||||
self.thread_assist.spawn(self.__lookup_cd_thread)
|
||||
self.thread_assist.spawn(self.__lookup_cd_thread, drive)
|
||||
|
||||
def __lookup_cd_thread(self):
|
||||
def __lookup_cd_thread(self, drive):
|
||||
from musicbrainz2.disc import readDisc, getSubmissionUrl, DiscError
|
||||
try:
|
||||
disc = readDisc(
|
||||
encode_filename(self.config.setting["cd_lookup_device"]))
|
||||
disc = readDisc(encode_filename(drive))
|
||||
except (NotImplementedError, DiscError), e:
|
||||
self.thread_assist.proxy_to_main(self.__lookup_cd_error, e)
|
||||
return
|
||||
@@ -717,20 +723,15 @@ class Tagger(QtGui.QApplication):
|
||||
self.thread_assist.proxy_to_main(self.__lookup_cd_error, e)
|
||||
return
|
||||
|
||||
url = getSubmissionUrl(disc, self.config.setting["server_host"],
|
||||
self.config.setting["server_port"])
|
||||
self.thread_assist.proxy_to_main(self.__lookup_cd_finished,
|
||||
releases, url)
|
||||
url = getSubmissionUrl(disc, self.config.setting["server_host"], self.config.setting["server_port"])
|
||||
self.thread_assist.proxy_to_main(self.__lookup_cd_finished, releases, url)
|
||||
|
||||
def __lookup_cd_error(self, exception):
|
||||
self.restore_cursor()
|
||||
if isinstance(exception, NotImplementedError):
|
||||
QtGui.QMessageBox.critical(self.window, _(u"CD Lookup Error"),
|
||||
_(u"CD lookup not implemented. You need to have ctypes and "
|
||||
u"libdiscid installed."))
|
||||
QtGui.QMessageBox.critical(self.window, _("CD Lookup Error"), _("You need to install libdiscid and ctypes to use CD lookups."))
|
||||
else:
|
||||
QtGui.QMessageBox.critical(self.window, _(u"CD Lookup Error"),
|
||||
_(u"Error while reading CD. Is there a CD in the drive?"))
|
||||
QtGui.QMessageBox.critical(self.window, _(u"CD Lookup Error"), _("Error while reading CD. Is there a CD in the drive?"))
|
||||
|
||||
def __lookup_cd_finished(self, releases, url):
|
||||
self.restore_cursor()
|
||||
@@ -885,9 +886,10 @@ class Tagger(QtGui.QApplication):
|
||||
for album in albums:
|
||||
self.reload_album(album)
|
||||
|
||||
tagger = None
|
||||
@classmethod
|
||||
def instance(cls):
|
||||
return cls.__instance
|
||||
|
||||
def main(localedir=None):
|
||||
global tagger
|
||||
tagger = Tagger(localedir)
|
||||
sys.exit(tagger.run())
|
||||
|
||||
@@ -36,6 +36,7 @@ from picard.ui.filebrowser import FileBrowser
|
||||
from picard.ui.options.dialog import OptionsDialog
|
||||
from picard.ui.tageditor import TagEditor
|
||||
from picard.util import icontheme, webbrowser2
|
||||
from picard.util.cdrom import get_cdrom_drives
|
||||
|
||||
class MainWindow(QtGui.QMainWindow):
|
||||
|
||||
@@ -315,7 +316,18 @@ class MainWindow(QtGui.QMainWindow):
|
||||
toolbar.addAction(self.save_action)
|
||||
toolbar.addAction(self.submit_action)
|
||||
toolbar.addSeparator()
|
||||
|
||||
toolbar.addAction(self.cd_lookup_action)
|
||||
drives = get_cdrom_drives()
|
||||
if len(drives) > 1:
|
||||
self.cd_lookup_menu = QtGui.QMenu()
|
||||
for drive in drives:
|
||||
self.cd_lookup_menu.addAction(drive)
|
||||
self.connect(self.cd_lookup_menu, QtCore.SIGNAL("triggered(QAction*)"), self.tagger.lookup_cd)
|
||||
button = toolbar.widgetForAction(self.cd_lookup_action)
|
||||
button.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
|
||||
button.setMenu(self.cd_lookup_menu)
|
||||
|
||||
toolbar.addAction(self.autotag_action)
|
||||
toolbar.addAction(self.analyze_action)
|
||||
toolbar.addAction(self.cluster_action)
|
||||
|
||||
@@ -22,8 +22,8 @@ import sys
|
||||
from PyQt4 import QtGui
|
||||
from picard.config import TextOption
|
||||
from picard.ui.options import OptionsPage, register_options_page
|
||||
from picard.util.cdrom import get_cdrom_drives
|
||||
if sys.platform == "win32":
|
||||
import win32file
|
||||
from picard.ui.ui_options_cdlookup_win32 import Ui_CDLookupOptionsPage
|
||||
else:
|
||||
from picard.ui.ui_options_cdlookup import Ui_CDLookupOptionsPage
|
||||
@@ -46,7 +46,7 @@ class CDLookupOptionsPage(OptionsPage):
|
||||
self.ui = Ui_CDLookupOptionsPage()
|
||||
self.ui.setupUi(self)
|
||||
if sys.platform == "win32":
|
||||
self.drives = self.__get_cdrom_drives()
|
||||
self.drives = get_cdrom_drives()
|
||||
self.ui.cd_lookup_device.addItems(self.drives)
|
||||
|
||||
def load(self):
|
||||
@@ -64,15 +64,5 @@ class CDLookupOptionsPage(OptionsPage):
|
||||
else:
|
||||
self.config.setting["cd_lookup_device"] = unicode(self.ui.cd_lookup_device.text())
|
||||
|
||||
def __get_cdrom_drives(self):
|
||||
drives = []
|
||||
mask = win32file.GetLogicalDrives()
|
||||
for i in range(26):
|
||||
if mask >> i & 1:
|
||||
drive = unicode(chr(i + ord("A"))) + u":\\"
|
||||
if win32file.GetDriveType(drive) == win32file.DRIVE_CDROM:
|
||||
drives.append(drive)
|
||||
return drives
|
||||
|
||||
|
||||
register_options_page(CDLookupOptionsPage)
|
||||
|
||||
37
picard/util/cdrom.py
Normal file
37
picard/util/cdrom.py
Normal file
@@ -0,0 +1,37 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Picard, the next-generation MusicBrainz tagger
|
||||
# Copyright (c) 2004 Robert Kaye
|
||||
# Copyright (C) 2007 Lukáš Lalinský
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
try:
|
||||
import win32file
|
||||
except ImportError:
|
||||
def get_cdrom_drives():
|
||||
from picard.tagger import Tagger
|
||||
tagger = Tagger.instance()
|
||||
return [d.strip() for d in tagger.config.setting["cd_lookup_device"].split(",")]
|
||||
else:
|
||||
def get_cdrom_drives():
|
||||
drives = []
|
||||
mask = win32file.GetLogicalDrives()
|
||||
for i in range(26):
|
||||
if mask >> i & 1:
|
||||
drive = unicode(chr(i + ord("A"))) + u":\\"
|
||||
if win32file.GetDriveType(drive) == win32file.DRIVE_CDROM:
|
||||
drives.append(drive)
|
||||
return drives
|
||||
Reference in New Issue
Block a user