Nuke QVariant, QString in favor of Python types

This commit is contained in:
Michael Wiencek
2013-07-04 17:19:39 -05:00
parent 879fd9b5c7
commit 6ff1f5350f
19 changed files with 92 additions and 83 deletions

View File

@@ -22,7 +22,7 @@ import re
PICARD_APP_NAME = "Picard" PICARD_APP_NAME = "Picard"
PICARD_ORG_NAME = "MusicBrainz" PICARD_ORG_NAME = "MusicBrainz"
PICARD_VERSION = (1, 3, 0, 'dev', 2) PICARD_VERSION = (1, 3, 0, 'dev', 3)
class VersionError(Exception): class VersionError(Exception):

View File

@@ -139,10 +139,10 @@ class AcoustIDClient(QtCore.QObject):
def _on_fpcalc_finished(self, next, file, exit_code, exit_status): def _on_fpcalc_finished(self, next, file, exit_code, exit_status):
process = self.sender() process = self.sender()
finished = process.property('picard_finished').toBool() finished = process.property('picard_finished')
if finished: if finished:
return return
process.setProperty('picard_finished', QtCore.QVariant(True)) process.setProperty('picard_finished', True)
result = None result = None
try: try:
self._running -= 1 self._running -= 1
@@ -172,7 +172,7 @@ class AcoustIDClient(QtCore.QObject):
finished = process.property('picard_finished').toBool() finished = process.property('picard_finished').toBool()
if finished: if finished:
return return
process.setProperty('picard_finished', QtCore.QVariant(True)) process.setProperty('picard_finished', True)
try: try:
self._running -= 1 self._running -= 1
self._run_next_task() self._run_next_task()
@@ -188,7 +188,7 @@ class AcoustIDClient(QtCore.QObject):
fpcalc = config.setting["acoustid_fpcalc"] or "fpcalc" fpcalc = config.setting["acoustid_fpcalc"] or "fpcalc"
self._running += 1 self._running += 1
process = QtCore.QProcess(self) process = QtCore.QProcess(self)
process.setProperty('picard_finished', QtCore.QVariant(False)) process.setProperty('picard_finished', False)
process.finished.connect(partial(self._on_fpcalc_finished, next, file)) process.finished.connect(partial(self._on_fpcalc_finished, next, file))
process.error.connect(partial(self._on_fpcalc_error, next, file)) process.error.connect(partial(self._on_fpcalc_error, next, file))
process.start(fpcalc, ["-length", "120", file.filename]) process.start(fpcalc, ["-length", "120", file.filename])

View File

@@ -55,8 +55,7 @@ class ConfigSection(LockableObject):
def __setitem__(self, name, value): def __setitem__(self, name, value):
self.lock_for_write() self.lock_for_write()
try: try:
self.__config.setValue("%s/%s" % (self.__name, name), self.__config.setValue("%s/%s" % (self.__name, name), value)
QtCore.QVariant(value))
finally: finally:
self.unlock() self.unlock()
@@ -178,9 +177,7 @@ class TextOption(Option):
"""Option with a text value.""" """Option with a text value."""
def __init__(self, section, name, default): def __init__(self, section, name, default):
def convert(value): Option.__init__(self, section, name, default, unicode)
return unicode(value.toString())
Option.__init__(self, section, name, default, convert)
class BoolOption(Option): class BoolOption(Option):
@@ -188,7 +185,7 @@ class BoolOption(Option):
"""Option with a boolean value.""" """Option with a boolean value."""
def __init__(self, section, name, default): def __init__(self, section, name, default):
Option.__init__(self, section, name, default, QtCore.QVariant.toBool) Option.__init__(self, section, name, default, bool)
class IntOption(Option): class IntOption(Option):
@@ -196,9 +193,7 @@ class IntOption(Option):
"""Option with an integer value.""" """Option with an integer value."""
def __init__(self, section, name, default): def __init__(self, section, name, default):
def convert(value): Option.__init__(self, section, name, default, int)
return value.toInt()[0]
Option.__init__(self, section, name, default, convert)
class FloatOption(Option): class FloatOption(Option):
@@ -206,9 +201,7 @@ class FloatOption(Option):
"""Option with a float value.""" """Option with a float value."""
def __init__(self, section, name, default): def __init__(self, section, name, default):
def convert(value): Option.__init__(self, section, name, default, float)
return value.toDouble()[0]
Option.__init__(self, section, name, default, convert)
class PasswordOption(Option): class PasswordOption(Option):
@@ -216,9 +209,15 @@ class PasswordOption(Option):
"""Super l33t h3ckery!""" """Super l33t h3ckery!"""
def __init__(self, section, name, default): def __init__(self, section, name, default):
def convert(value): Option.__init__(self, section, name, default, rot13)
return rot13(unicode(value.toString()))
Option.__init__(self, section, name, default, convert)
class ListOption(Option):
"""Option with a list of values."""
def __init__(self, section, name, default):
Option.__init__(self, section, name, default, list)
_config = Config() _config = Config()

View File

@@ -43,16 +43,15 @@ def upgrade_to_v1_0_0_final_0():
_s["file_naming_format"] = ( _s["file_naming_format"] = (
"$if($eq(%%compilation%%,1),\n$noop(Various Artist " "$if($eq(%%compilation%%,1),\n$noop(Various Artist "
"albums)\n%s,\n$noop(Single Artist Albums)\n%s)" % ( "albums)\n%s,\n$noop(Single Artist Albums)\n%s)" % (
_s["va_file_naming_format"].toString(), _s["va_file_naming_format"],
_s["file_naming_format"] _s["file_naming_format"]
)) ))
_s.remove("va_file_naming_format") _s.remove("va_file_naming_format")
_s.remove("use_va_format") _s.remove("use_va_format")
if ("va_file_naming_format" in _s and if ("va_file_naming_format" in _s and "use_va_format" in _s):
"use_va_format" in _s):
msgbox = QtGui.QMessageBox() msgbox = QtGui.QMessageBox()
if _s["use_va_format"].toBool(): if _s["use_va_format"].toBool():
remove_va_file_naming_format() remove_va_file_naming_format()
msgbox.information(msgbox, msgbox.information(msgbox,
@@ -63,7 +62,7 @@ def upgrade_to_v1_0_0_final_0():
"merged with that of single artist albums."), "merged with that of single artist albums."),
QtGui.QMessageBox.Ok) QtGui.QMessageBox.Ok)
elif (_s["va_file_naming_format"].toString() != elif (_s["va_file_naming_format"] !=
r"$if2(%albumartist%,%artist%)/%album%/$if($gt(%totaldis" r"$if2(%albumartist%,%artist%)/%album%/$if($gt(%totaldis"
"cs%,1),%discnumber%-,)$num(%tracknumber%,2) %artist% - " "cs%,1),%discnumber%-,)$num(%tracknumber%,2) %artist% - "
"%title%"): "%title%"):
@@ -102,9 +101,20 @@ def upgrade_to_v1_3_0_dev_2():
'comma instead of spaces as tag separator (PICARD-536).')) 'comma instead of spaces as tag separator (PICARD-536).'))
def upgrade_to_v1_3_0_dev_3():
_s["preferred_release_countries"] = \
_s["preferred_release_countries"].split(" ")
_s["preferred_release_formats"] = \
_s["preferred_release_formats"].split(" ")
_s["enabled_plugins"] = _s["enabled_plugins"].split()
def upgrade_config(): def upgrade_config():
cfg = config._config cfg = config._config
cfg.register_upgrade_hook(upgrade_to_v1_0_0_final_0) cfg.register_upgrade_hook(upgrade_to_v1_0_0_final_0)
cfg.register_upgrade_hook(upgrade_to_v1_3_0_dev_1) cfg.register_upgrade_hook(upgrade_to_v1_3_0_dev_1)
cfg.register_upgrade_hook(upgrade_to_v1_3_0_dev_2) cfg.register_upgrade_hook(upgrade_to_v1_3_0_dev_2)
cfg.register_upgrade_hook(upgrade_to_v1_3_0_dev_3)
cfg.run_upgrade_hooks() cfg.run_upgrade_hooks()

View File

@@ -141,8 +141,8 @@ class Metadata(dict):
parts.append((score, weights["totaltracks"])) parts.append((score, weights["totaltracks"]))
total += weights["totaltracks"] total += weights["totaltracks"]
preferred_countries = config.setting["preferred_release_countries"].split(" ") preferred_countries = config.setting["preferred_release_countries"]
preferred_formats = config.setting["preferred_release_formats"].split(" ") preferred_formats = config.setting["preferred_release_formats"]
total_countries = len(preferred_countries) total_countries = len(preferred_countries)
if total_countries: if total_countries:

View File

@@ -71,7 +71,7 @@ class ExtensionPoint(object):
self.__items = filter(lambda i: i[0] != name, self.__items) self.__items = filter(lambda i: i[0] != name, self.__items)
def __iter__(self): def __iter__(self):
enabled_plugins = config.setting["enabled_plugins"].split() enabled_plugins = config.setting["enabled_plugins"]
for module, item in self.__items: for module, item in self.__items:
if module is None or module in enabled_plugins: if module is None or module in enabled_plugins:
yield item yield item

View File

@@ -47,7 +47,7 @@ class CDLookupDialog(QtGui.QDialog):
item.setText(4, ", ".join(labels)) item.setText(4, ", ".join(labels))
item.setText(5, ", ".join(catalog_numbers)) item.setText(5, ", ".join(catalog_numbers))
item.setText(6, barcode) item.setText(6, barcode)
item.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(release.id)) item.setData(0, QtCore.Qt.UserRole, release.id)
self.ui.release_list.setCurrentItem(self.ui.release_list.topLevelItem(0)) self.ui.release_list.setCurrentItem(self.ui.release_list.topLevelItem(0))
self.ui.ok_button.setEnabled(True) self.ui.ok_button.setEnabled(True)
for i in range(self.ui.release_list.columnCount() - 1): for i in range(self.ui.release_list.columnCount() - 1):
@@ -58,7 +58,7 @@ class CDLookupDialog(QtGui.QDialog):
self.ui.lookup_button.clicked.connect(self.lookup) self.ui.lookup_button.clicked.connect(self.lookup)
def accept(self): def accept(self):
release_id = str(self.ui.release_list.currentItem().data(0, QtCore.Qt.UserRole).toString()) release_id = self.ui.release_list.currentItem().data(0, QtCore.Qt.UserRole)
self.tagger.load_album(release_id, discid=self.disc.id) self.tagger.load_album(release_id, discid=self.disc.id)
QtGui.QDialog.accept(self) QtGui.QDialog.accept(self)

View File

@@ -165,7 +165,7 @@ class CoverArtBox(QtGui.QGroupBox):
self.load_remote_image(mime, data) self.load_remote_image(mime, data)
def on_remote_image_fetched(self, data, reply, error): def on_remote_image_fetched(self, data, reply, error):
mime = str(reply.header(QtNetwork.QNetworkRequest.ContentTypeHeader).toString()) mime = reply.header(QtNetwork.QNetworkRequest.ContentTypeHeader)
if mime not in ('image/jpeg', 'image/png'): if mime not in ('image/jpeg', 'image/png'):
log.warning("Can't load image with MIME-Type %s", mime) log.warning("Can't load image with MIME-Type %s", mime)
return return

View File

@@ -87,7 +87,7 @@ def get_match_color(similarity, basecolor):
class MainPanel(QtGui.QSplitter): class MainPanel(QtGui.QSplitter):
options = [ options = [
config.Option("persist", "splitter_state", QtCore.QByteArray(), QtCore.QVariant.toByteArray), config.Option("persist", "splitter_state", QtCore.QByteArray()),
] ]
columns = [ columns = [
@@ -202,10 +202,10 @@ class MainPanel(QtGui.QSplitter):
class BaseTreeView(QtGui.QTreeWidget): class BaseTreeView(QtGui.QTreeWidget):
options = [ options = [
config.Option("setting", "color_modified", QtGui.QColor(QtGui.QPalette.WindowText), QtGui.QColor), config.Option("setting", "color_modified", QtGui.QColor(QtGui.QPalette.WindowText)),
config.Option("setting", "color_saved", QtGui.QColor(0, 128, 0), QtGui.QColor), config.Option("setting", "color_saved", QtGui.QColor(0, 128, 0)),
config.Option("setting", "color_error", QtGui.QColor(200, 0, 0), QtGui.QColor), config.Option("setting", "color_error", QtGui.QColor(200, 0, 0)),
config.Option("setting", "color_pending", QtGui.QColor(128, 128, 128), QtGui.QColor), config.Option("setting", "color_pending", QtGui.QColor(128, 128, 128)),
] ]
def __init__(self, window, parent=None): def __init__(self, window, parent=None):
@@ -576,7 +576,7 @@ class TreeItem(QtGui.QTreeWidgetItem):
column = self.treeWidget().sortColumn() column = self.treeWidget().sortColumn()
if column == 1: if column == 1:
return (self.obj.metadata.length or 0) < (other.obj.metadata.length or 0) return (self.obj.metadata.length or 0) < (other.obj.metadata.length or 0)
return self.text(column).toLower() < other.text(column).toLower() return self.text(column).lower() < other.text(column).lower()
class ClusterItem(TreeItem): class ClusterItem(TreeItem):

View File

@@ -54,14 +54,10 @@ class MainWindow(QtGui.QMainWindow):
selection_updated = QtCore.pyqtSignal(object) selection_updated = QtCore.pyqtSignal(object)
options = [ options = [
config.Option("persist", "window_state", QtCore.QByteArray(), config.Option("persist", "window_state", QtCore.QByteArray()),
QtCore.QVariant.toByteArray), config.Option("persist", "window_position", QtCore.QPoint()),
config.Option("persist", "window_position", QtCore.QPoint(), config.Option("persist", "window_size", QtCore.QSize(780, 560)),
QtCore.QVariant.toPoint), config.Option("persist", "bottom_splitter_state", QtCore.QByteArray()),
config.Option("persist", "window_size", QtCore.QSize(780, 560),
QtCore.QVariant.toSize),
config.Option("persist", "bottom_splitter_state", QtCore.QByteArray(),
QtCore.QVariant.toByteArray),
config.BoolOption("persist", "window_maximized", False), config.BoolOption("persist", "window_maximized", False),
config.BoolOption("persist", "view_cover_art", False), config.BoolOption("persist", "view_cover_art", False),
config.BoolOption("persist", "view_file_browser", False), config.BoolOption("persist", "view_file_browser", False),
@@ -545,9 +541,9 @@ class MainWindow(QtGui.QMainWindow):
search_panel = QtGui.QWidget(toolbar) search_panel = QtGui.QWidget(toolbar)
hbox = QtGui.QHBoxLayout(search_panel) hbox = QtGui.QHBoxLayout(search_panel)
self.search_combo = QtGui.QComboBox(search_panel) self.search_combo = QtGui.QComboBox(search_panel)
self.search_combo.addItem(_(u"Album"), QtCore.QVariant("album")) self.search_combo.addItem(_(u"Album"), "album")
self.search_combo.addItem(_(u"Artist"), QtCore.QVariant("artist")) self.search_combo.addItem(_(u"Artist"), "artist")
self.search_combo.addItem(_(u"Track"), QtCore.QVariant("track")) self.search_combo.addItem(_(u"Track"), "track")
hbox.addWidget(self.search_combo, 0) hbox.addWidget(self.search_combo, 0)
self.search_edit = QtGui.QLineEdit(search_panel) self.search_edit = QtGui.QLineEdit(search_panel)
self.search_edit.returnPressed.connect(self.search) self.search_edit.returnPressed.connect(self.search)
@@ -594,9 +590,8 @@ class MainWindow(QtGui.QMainWindow):
def search(self): def search(self):
"""Search for album, artist or track on the MusicBrainz website.""" """Search for album, artist or track on the MusicBrainz website."""
text = unicode(self.search_edit.text()) text = self.search_edit.text()
type = unicode(self.search_combo.itemData( type = self.search_combo.itemData(self.search_combo.currentIndex())
self.search_combo.currentIndex()).toString())
self.tagger.search(text, type, config.setting["use_adv_search_syntax"]) self.tagger.search(text, type, config.setting["use_adv_search_syntax"])
def add_files(self): def add_files(self):

View File

@@ -47,9 +47,9 @@ from picard.ui.options import (
class OptionsDialog(QtGui.QDialog): class OptionsDialog(QtGui.QDialog):
options = [ options = [
config.Option("persist", "options_position", QtCore.QPoint(), QtCore.QVariant.toPoint), config.Option("persist", "options_position", QtCore.QPoint()),
config.Option("persist", "options_size", QtCore.QSize(560, 400), QtCore.QVariant.toSize), config.Option("persist", "options_size", QtCore.QSize(560, 400)),
config.Option("persist", "options_splitter", QtCore.QByteArray(), QtCore.QVariant.toByteArray), config.Option("persist", "options_splitter", QtCore.QByteArray()),
] ]
def add_pages(self, parent, default_page, parent_item): def add_pages(self, parent, default_page, parent_item):

View File

@@ -70,7 +70,7 @@ class FingerprintingOptionsPage(OptionsPage):
def update_groupboxes(self): def update_groupboxes(self):
if self.ui.use_acoustid.isChecked(): if self.ui.use_acoustid.isChecked():
self.ui.acoustid_settings.setEnabled(True) self.ui.acoustid_settings.setEnabled(True)
if self.ui.acoustid_fpcalc.text().isEmpty(): if not self.ui.acoustid_fpcalc.text():
fpcalc_path = find_executable(*FPCALC_NAMES) fpcalc_path = find_executable(*FPCALC_NAMES)
if fpcalc_path: if fpcalc_path:
self.ui.acoustid_fpcalc.setText(fpcalc_path) self.ui.acoustid_fpcalc.setText(fpcalc_path)

View File

@@ -51,7 +51,7 @@ class InterfaceOptionsPage(OptionsPage):
super(InterfaceOptionsPage, self).__init__(parent) super(InterfaceOptionsPage, self).__init__(parent)
self.ui = Ui_InterfaceOptionsPage() self.ui = Ui_InterfaceOptionsPage()
self.ui.setupUi(self) self.ui.setupUi(self)
self.ui.ui_language.addItem(_('System default'), QtCore.QVariant('')) self.ui.ui_language.addItem(_('System default'), '')
language_list = [(l[0], l[1], _(l[2])) for l in UI_LANGUAGES] language_list = [(l[0], l[1], _(l[2])) for l in UI_LANGUAGES]
for lang_code, native, translation in sorted(language_list, key=operator.itemgetter(2), for lang_code, native, translation in sorted(language_list, key=operator.itemgetter(2),
cmp=locale.strcoll): cmp=locale.strcoll):
@@ -59,7 +59,7 @@ class InterfaceOptionsPage(OptionsPage):
name = u'%s (%s)' % (translation, native) name = u'%s (%s)' % (translation, native)
else: else:
name = translation name = translation
self.ui.ui_language.addItem(name, QtCore.QVariant(lang_code)) self.ui.ui_language.addItem(name, lang_code)
self.ui.starting_directory.stateChanged.connect( self.ui.starting_directory.stateChanged.connect(
partial( partial(
enabledSlot, enabledSlot,
@@ -79,7 +79,7 @@ class InterfaceOptionsPage(OptionsPage):
self.ui.toolbar_multiselect.setChecked(config.setting["toolbar_multiselect"]) self.ui.toolbar_multiselect.setChecked(config.setting["toolbar_multiselect"])
self.ui.use_adv_search_syntax.setChecked(config.setting["use_adv_search_syntax"]) self.ui.use_adv_search_syntax.setChecked(config.setting["use_adv_search_syntax"])
self.ui.quit_confirmation.setChecked(config.setting["quit_confirmation"]) self.ui.quit_confirmation.setChecked(config.setting["quit_confirmation"])
current_ui_language = QtCore.QVariant(config.setting["ui_language"]) current_ui_language = config.setting["ui_language"]
self.ui.ui_language.setCurrentIndex(self.ui.ui_language.findData(current_ui_language)) self.ui.ui_language.setCurrentIndex(self.ui.ui_language.findData(current_ui_language))
self.ui.starting_directory.setChecked(config.setting["starting_directory"]) self.ui.starting_directory.setChecked(config.setting["starting_directory"])
self.ui.starting_directory_path.setText(config.setting["starting_directory_path"]) self.ui.starting_directory_path.setText(config.setting["starting_directory_path"])
@@ -90,9 +90,9 @@ class InterfaceOptionsPage(OptionsPage):
config.setting["use_adv_search_syntax"] = self.ui.use_adv_search_syntax.isChecked() config.setting["use_adv_search_syntax"] = self.ui.use_adv_search_syntax.isChecked()
config.setting["quit_confirmation"] = self.ui.quit_confirmation.isChecked() config.setting["quit_confirmation"] = self.ui.quit_confirmation.isChecked()
self.tagger.window.update_toolbar_style() self.tagger.window.update_toolbar_style()
new_language = self.ui.ui_language.itemData(self.ui.ui_language.currentIndex()).toString() new_language = self.ui.ui_language.itemData(self.ui.ui_language.currentIndex())
if new_language != config.setting["ui_language"]: if new_language != config.setting["ui_language"]:
config.setting["ui_language"] = self.ui.ui_language.itemData(self.ui.ui_language.currentIndex()).toString() config.setting["ui_language"] = self.ui.ui_language.itemData(self.ui.ui_language.currentIndex())
dialog = QtGui.QMessageBox(QtGui.QMessageBox.Information, _('Language changed'), _('You have changed the interface language. You have to restart Picard in order for the change to take effect.'), QtGui.QMessageBox.Ok, self) dialog = QtGui.QMessageBox(QtGui.QMessageBox.Information, _('Language changed'), _('You have changed the interface language. You have to restart Picard in order for the change to take effect.'), QtGui.QMessageBox.Ok, self)
dialog.exec_() dialog.exec_()
config.setting["starting_directory"] = self.ui.starting_directory.isChecked() config.setting["starting_directory"] = self.ui.starting_directory.isChecked()

View File

@@ -41,7 +41,7 @@ class PluginsOptionsPage(OptionsPage):
ACTIVE = True ACTIVE = True
options = [ options = [
config.TextOption("setting", "enabled_plugins", ""), config.ListOption("setting", "enabled_plugins", []),
] ]
def __init__(self, parent=None): def __init__(self, parent=None):
@@ -64,7 +64,7 @@ class PluginsOptionsPage(OptionsPage):
def load(self): def load(self):
plugins = sorted(self.tagger.pluginmanager.plugins, cmp=cmp_plugins) plugins = sorted(self.tagger.pluginmanager.plugins, cmp=cmp_plugins)
enabled_plugins = config.setting["enabled_plugins"].split() enabled_plugins = config.setting["enabled_plugins"]
firstitem = None firstitem = None
for plugin in plugins: for plugin in plugins:
enabled = plugin.module_name in enabled_plugins enabled = plugin.module_name in enabled_plugins
@@ -108,7 +108,7 @@ class PluginsOptionsPage(OptionsPage):
for item, plugin in self.items.iteritems(): for item, plugin in self.items.iteritems():
if item.checkState(0) == QtCore.Qt.Checked: if item.checkState(0) == QtCore.Qt.Checked:
enabled_plugins.append(plugin.module_name) enabled_plugins.append(plugin.module_name)
config.setting["enabled_plugins"] = " ".join(enabled_plugins) config.setting["enabled_plugins"] = enabled_plugins
def change_details(self): def change_details(self):
plugin = self.items[self.ui.plugins.selectedItems()[0]] plugin = self.items[self.ui.plugins.selectedItems()[0]]

View File

@@ -37,8 +37,8 @@ class ReleasesOptionsPage(OptionsPage):
options = [ options = [
config.TextOption("setting", "release_type_scores", "Album 0.5 Single 0.5 EP 0.5 Compilation 0.5 Soundtrack 0.5 Spokenword 0.5 Interview 0.5 Audiobook 0.5 Live 0.5 Remix 0.5 Other 0.5"), config.TextOption("setting", "release_type_scores", "Album 0.5 Single 0.5 EP 0.5 Compilation 0.5 Soundtrack 0.5 Spokenword 0.5 Interview 0.5 Audiobook 0.5 Live 0.5 Remix 0.5 Other 0.5"),
config.TextOption("setting", "preferred_release_countries", u""), config.ListOption("setting", "preferred_release_countries", []),
config.TextOption("setting", "preferred_release_formats", u""), config.ListOption("setting", "preferred_release_formats", []),
] ]
_release_type_sliders = {} _release_type_sliders = {}
@@ -115,11 +115,11 @@ class ReleasesOptionsPage(OptionsPage):
def _load_list_items(self, setting, source, list1, list2): def _load_list_items(self, setting, source, list1, list2):
source_list = [(c[0], _(c[1])) for c in source.items()] source_list = [(c[0], _(c[1])) for c in source.items()]
source_list.sort(key=itemgetter(1), cmp=strcoll) source_list.sort(key=itemgetter(1), cmp=strcoll)
saved_data = config.setting[setting].split(" ") saved_data = config.setting[setting]
move = [] move = []
for data, name in source_list: for data, name in source_list:
item = QtGui.QListWidgetItem(name) item = QtGui.QListWidgetItem(name)
item.setData(QtCore.Qt.UserRole, QtCore.QVariant(data)) item.setData(QtCore.Qt.UserRole, data)
try: try:
i = saved_data.index(data) i = saved_data.index(data)
move.append((i, item)) move.append((i, item))
@@ -133,8 +133,8 @@ class ReleasesOptionsPage(OptionsPage):
data = [] data = []
for i in range(list1.count()): for i in range(list1.count()):
item = list1.item(i) item = list1.item(i)
data.append(unicode(item.data(QtCore.Qt.UserRole).toString())) data.append(unicode(item.data(QtCore.Qt.UserRole)))
config.setting[setting] = " ".join(data) config.setting[setting] = data
register_options_page(ReleasesOptionsPage) register_options_page(ReleasesOptionsPage)

View File

@@ -30,8 +30,8 @@ class TagsFromFileNamesDialog(QtGui.QDialog):
options = [ options = [
config.TextOption("persist", "tags_from_filenames_format", ""), config.TextOption("persist", "tags_from_filenames_format", ""),
config.Option("persist", "tags_from_filenames_position", QtCore.QPoint(), QtCore.QVariant.toPoint), config.Option("persist", "tags_from_filenames_position", QtCore.QPoint()),
config.Option("persist", "tags_from_filenames_size", QtCore.QSize(560, 400), QtCore.QVariant.toSize), config.Option("persist", "tags_from_filenames_size", QtCore.QSize(560, 400)),
] ]
def __init__(self, files, parent=None): def __init__(self, files, parent=None):

View File

@@ -19,9 +19,10 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys import sys
from PyQt4.QtCore import QFile, QRegExp from PyQt4.QtCore import QFile
from picard.util import uniqify from picard.util import uniqify
DEFAULT_DRIVES = [] DEFAULT_DRIVES = []
try: try:
try: try:
@@ -61,7 +62,7 @@ if sys.platform == 'win32':
elif sys.platform == 'linux2' and QFile.exists(LINUX_CDROM_INFO): elif sys.platform == 'linux2' and QFile.exists(LINUX_CDROM_INFO):
AUTO_DETECT_DRIVES = True AUTO_DETECT_DRIVES = True
from PyQt4.QtCore import QIODevice, QString from PyQt4.QtCore import QIODevice
# Read info from /proc/sys/dev/cdrom/info # Read info from /proc/sys/dev/cdrom/info
def get_cdrom_drives(): def get_cdrom_drives():
@@ -71,14 +72,14 @@ elif sys.platform == 'linux2' and QFile.exists(LINUX_CDROM_INFO):
drive_names = [] drive_names = []
drive_audio_caps = [] drive_audio_caps = []
line = cdinfo.readLine() line = cdinfo.readLine()
while not line.isEmpty(): while line:
if line.indexOf(':') != -1: if line.indexOf(':') != -1:
key, values = line.split(':') key, values = line.split(':')
if key == 'drive name': if key == 'drive name':
drive_names = QString(values).trimmed().split(QRegExp("\\s+"), QString.SkipEmptyParts) drive_names = values.strip().split()
elif key == 'Can play audio': elif key == 'Can play audio':
drive_audio_caps = [v == '1' for v in drive_audio_caps = [v == '1' for v in
QString(values).trimmed().split(QRegExp("\\s+"), QString.SkipEmptyParts)] values.strip().split()]
break # no need to continue passed this line break # no need to continue passed this line
line = cdinfo.readLine() line = cdinfo.readLine()
# Show only drives that are capable of playing audio # Show only drives that are capable of playing audio

View File

@@ -230,13 +230,13 @@ class XmlWebService(QtCore.QObject):
log.error("Error: Request not found for %s" % str(reply.request().url().toString())) log.error("Error: Request not found for %s" % str(reply.request().url().toString()))
return return
error = int(reply.error()) error = int(reply.error())
redirect = reply.attribute(QtNetwork.QNetworkRequest.RedirectionTargetAttribute).toUrl() redirect = reply.attribute(QtNetwork.QNetworkRequest.RedirectionTargetAttribute)
fromCache = reply.attribute(QtNetwork.QNetworkRequest.SourceIsFromCacheAttribute).toBool() fromCache = reply.attribute(QtNetwork.QNetworkRequest.SourceIsFromCacheAttribute)
cached = ' (CACHED)' if fromCache else '' cached = ' (CACHED)' if fromCache else ''
log.debug("Received reply for %s: HTTP %d (%s) %s", log.debug("Received reply for %s: HTTP %d (%s) %s",
reply.request().url().toString(), reply.request().url().toString(),
reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute).toInt()[0], reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute),
reply.attribute(QtNetwork.QNetworkRequest.HttpReasonPhraseAttribute).toString(), reply.attribute(QtNetwork.QNetworkRequest.HttpReasonPhraseAttribute),
cached cached
) )
if handler is not None: if handler is not None:
@@ -245,10 +245,10 @@ class XmlWebService(QtCore.QObject):
reply.request().url().toString(), reply.request().url().toString(),
reply.errorString(), reply.errorString(),
error, error,
reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute).toInt()[0]) reply.attribute(QtNetwork.QNetworkRequest.HttpStatusCodeAttribute))
# Redirect if found and not infinite # Redirect if found and not infinite
if not redirect.isEmpty() and not XmlWebService.urls_equivalent(redirect, reply.request().url()): if redirect and not XmlWebService.urls_equivalent(redirect, reply.request().url()):
log.debug("Redirect to %s requested", redirect.toString()) log.debug("Redirect to %s requested", redirect.toString())
redirect_host = str(redirect.host()) redirect_host = str(redirect.host())
redirect_port = redirect.port(80) redirect_port = redirect.port(80)
@@ -401,7 +401,7 @@ class XmlWebService(QtCore.QObject):
filters.append(('query', ' '.join(query))) filters.append(('query', ' '.join(query)))
params = [] params = []
for name, value in filters: for name, value in filters:
value = str(QUrl.toPercentEncoding(QtCore.QString(value))) value = QUrl.toPercentEncoding(unicode(value))
params.append('%s=%s' % (str(name), value)) params.append('%s=%s' % (str(name), value))
path = "/ws/2/%s/?%s" % (entitytype, "&".join(params)) path = "/ws/2/%s/?%s" % (entitytype, "&".join(params))
return self.get(host, port, path, handler) return self.get(host, port, path, handler)

View File

@@ -2,6 +2,10 @@
import os.path import os.path
import sys import sys
import sip
sip.setapi("QString", 2)
sip.setapi("QVariant", 2)
sys.path.insert(0, '.') sys.path.insert(0, '.')
from picard.tagger import main from picard.tagger import main