mirror of
https://github.com/fergalmoran/picard.git
synced 2026-02-24 08:33:59 +00:00
Merge branch 'master' into PICARD-1184
This commit is contained in:
@@ -257,6 +257,22 @@ def country_list_from_node(node):
|
||||
return country
|
||||
|
||||
|
||||
def release_dates_and_countries_from_node(node):
|
||||
dates = []
|
||||
countries = []
|
||||
if "release-events" in node:
|
||||
for release_event in node['release-events']:
|
||||
dates.append(release_event['date'])
|
||||
country_code = None
|
||||
try:
|
||||
country_code = release_event['area']['iso-3166-1-codes'][0]
|
||||
# TypeError in case object is None
|
||||
except (KeyError, IndexError, TypeError):
|
||||
pass
|
||||
countries.append(country_code)
|
||||
return dates, countries
|
||||
|
||||
|
||||
def label_info_from_node(node):
|
||||
labels = []
|
||||
catalog_numbers = []
|
||||
|
||||
@@ -18,12 +18,25 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
|
||||
from picard import config, log
|
||||
from picard.ui import PicardDialog
|
||||
from picard.ui.ui_cdlookup import Ui_Dialog
|
||||
from picard.mbjson import artist_credit_from_node, label_info_from_node
|
||||
from picard.mbjson import (
|
||||
artist_credit_from_node,
|
||||
label_info_from_node,
|
||||
release_dates_and_countries_from_node,
|
||||
)
|
||||
|
||||
|
||||
class CDLookupDialog(PicardDialog):
|
||||
dialog_window_size = "cdlookupdialog_window_size"
|
||||
dialog_header_state = "cdlookupdialog_header_state"
|
||||
|
||||
options = [
|
||||
config.Option("persist", dialog_window_size, QtCore.QSize(720, 360)),
|
||||
config.Option("persist", dialog_header_state, QtCore.QByteArray())
|
||||
]
|
||||
|
||||
def __init__(self, releases, disc, parent=None):
|
||||
PicardDialog.__init__(self, parent)
|
||||
@@ -32,21 +45,25 @@ class CDLookupDialog(PicardDialog):
|
||||
self.ui = Ui_Dialog()
|
||||
self.ui.setupUi(self)
|
||||
self.ui.release_list.setSortingEnabled(True)
|
||||
self.ui.release_list.setAlternatingRowColors(True)
|
||||
self.ui.release_list.setHeaderLabels([_("Album"), _("Artist"), _("Date"), _("Country"),
|
||||
_("Labels"), _("Catalog #s"), _("Barcode")])
|
||||
self.restore_state()
|
||||
if self.releases:
|
||||
def myjoin(l):
|
||||
return "\n".join(l)
|
||||
|
||||
for release in self.releases:
|
||||
labels, catalog_numbers = label_info_from_node(release['label-info'])
|
||||
date = release['date'] if "date" in release else ""
|
||||
country = release['country'] if "country" in release else ""
|
||||
dates, countries = release_dates_and_countries_from_node(release)
|
||||
barcode = release['barcode'] if "barcode" in release else ""
|
||||
item = QtWidgets.QTreeWidgetItem(self.ui.release_list)
|
||||
item.setText(0, release['title'])
|
||||
item.setText(1, artist_credit_from_node(release['artist-credit'])[0])
|
||||
item.setText(2, date)
|
||||
item.setText(3, country)
|
||||
item.setText(4, ", ".join(labels))
|
||||
item.setText(5, ", ".join(catalog_numbers))
|
||||
item.setText(2, myjoin(dates))
|
||||
item.setText(3, myjoin(countries))
|
||||
item.setText(4, myjoin(labels))
|
||||
item.setText(5, myjoin(catalog_numbers))
|
||||
item.setText(6, barcode)
|
||||
item.setData(0, QtCore.Qt.UserRole, release['id'])
|
||||
self.ui.release_list.setCurrentItem(self.ui.release_list.topLevelItem(0))
|
||||
@@ -57,13 +74,46 @@ class CDLookupDialog(PicardDialog):
|
||||
self.ui.release_list.sortByColumn(3, QtCore.Qt.AscendingOrder)
|
||||
self.ui.release_list.sortByColumn(2, QtCore.Qt.DescendingOrder)
|
||||
self.ui.lookup_button.clicked.connect(self.lookup)
|
||||
self.restore_header_state()
|
||||
|
||||
def save_and_accept(self):
|
||||
self.save_state()
|
||||
QtWidgets.QDialog.accept(self)
|
||||
|
||||
def accept(self):
|
||||
release_id = self.ui.release_list.currentItem().data(0, QtCore.Qt.UserRole)
|
||||
self.tagger.load_album(release_id, discid=self.disc.id)
|
||||
QtWidgets.QDialog.accept(self)
|
||||
self.save_and_accept()
|
||||
|
||||
def lookup(self):
|
||||
lookup = self.tagger.get_file_lookup()
|
||||
lookup.disc_lookup(self.disc.submission_url)
|
||||
QtWidgets.QDialog.accept(self)
|
||||
self.save_and_accept()
|
||||
|
||||
def reject(self):
|
||||
self.save_state()
|
||||
QtWidgets.QDialog.reject(self)
|
||||
|
||||
def restore_state(self):
|
||||
size = config.persist[self.dialog_window_size]
|
||||
if size:
|
||||
self.resize(size)
|
||||
log.debug("restore_state: %s" % self.dialog_window_size)
|
||||
|
||||
def restore_header_state(self):
|
||||
header = self.ui.release_list.header()
|
||||
state = config.persist[self.dialog_header_state]
|
||||
if state:
|
||||
header.restoreState(state)
|
||||
log.debug("restore_state: %s" % self.dialog_header_state)
|
||||
|
||||
def save_state(self):
|
||||
if self.ui.release_list:
|
||||
self.save_header_state()
|
||||
log.debug("save_state: %s" % self.dialog_window_size)
|
||||
config.persist[self.dialog_window_size] = self.size()
|
||||
|
||||
def save_header_state(self):
|
||||
state = self.ui.release_list.header().saveState()
|
||||
config.persist[self.dialog_header_state] = state
|
||||
log.debug("save_state: %s" % self.dialog_header_state)
|
||||
|
||||
@@ -317,6 +317,7 @@ class SearchDialog(PicardDialog):
|
||||
|
||||
self.table.resizeColumnsToContents()
|
||||
self.table.resizeRowsToContents()
|
||||
self.table.setAlternatingRowColors(True)
|
||||
|
||||
def network_error(self, reply, error):
|
||||
error_msg = _("<strong>Following error occurred while fetching results:<br><br></strong>"
|
||||
|
||||
@@ -17,7 +17,6 @@ class Ui_Dialog(object):
|
||||
self.label.setObjectName("label")
|
||||
self.vboxlayout.addWidget(self.label)
|
||||
self.release_list = QtWidgets.QTreeWidget(Dialog)
|
||||
self.release_list.setRootIsDecorated(False)
|
||||
self.release_list.setObjectName("release_list")
|
||||
self.release_list.headerItem().setText(0, "1")
|
||||
self.vboxlayout.addWidget(self.release_list)
|
||||
|
||||
@@ -29,9 +29,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="release_list">
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
@@ -103,8 +100,8 @@
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>278</x>
|
||||
<y>253</y>
|
||||
<x>410</x>
|
||||
<y>227</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>96</x>
|
||||
@@ -119,8 +116,8 @@
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>369</x>
|
||||
<y>253</y>
|
||||
<x>629</x>
|
||||
<y>227</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>179</x>
|
||||
|
||||
Reference in New Issue
Block a user