Ejemplo n.º 1
0
 def __init__(self, releases, disc, parent=None):
     PicardDialog.__init__(self, parent)
     self.releases = releases
     self.disc = disc
     self.ui = Ui_Dialog()
     self.ui.setupUi(self)
     self.ui.release_list.setSortingEnabled(True)
     self.ui.release_list.setHeaderLabels([_("Album"), _("Artist"), _("Date"), _("Country"),
                                           _("Labels"), _("Catalog #s"), _("Barcode")])
     if self.releases:
         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 ""
             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(6, barcode)
             item.setData(0, QtCore.Qt.UserRole, release['id'])
         self.ui.release_list.setCurrentItem(self.ui.release_list.topLevelItem(0))
         self.ui.ok_button.setEnabled(True)
     for i in range(self.ui.release_list.columnCount() - 1):
         self.ui.release_list.resizeColumnToContents(i)
     # Sort by descending date, then ascending country
     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)
Ejemplo n.º 2
0
 def __init__(self, releases, disc, parent=None):
     PicardDialog.__init__(self, parent)
     self.releases = releases
     self.disc = disc
     self.ui = Ui_Dialog()
     self.ui.setupUi(self)
     self.ui.release_list.setSortingEnabled(True)
     self.ui.release_list.setHeaderLabels([_("Album"), _("Artist"), _("Date"), _("Country"),
                                           _("Labels"), _("Catalog #s"), _("Barcode")])
     if self.releases:
         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 ""
             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']))
             item.setText(2, date)
             item.setText(3, country)
             item.setText(4, ", ".join(labels))
             item.setText(5, ", ".join(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))
         self.ui.ok_button.setEnabled(True)
     for i in range(self.ui.release_list.columnCount() - 1):
         self.ui.release_list.resizeColumnToContents(i)
     # Sort by descending date, then ascending country
     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)
Ejemplo n.º 3
0
    def __init__(self, releases, disc, parent=None):
        super().__init__(parent)
        self.releases = releases
        self.disc = disc
        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")
        ])
        if self.releases:

            def myjoin(l):
                return "\n".join(l)

            selected = None
            for release in self.releases:
                labels, catalog_numbers = label_info_from_node(
                    release['label-info'])
                dates, countries = release_dates_and_countries_from_node(
                    release)
                barcode = release['barcode'] if "barcode" in release else ""
                item = QtWidgets.QTreeWidgetItem(self.ui.release_list)
                if disc.mcn and compare_barcodes(barcode, disc.mcn):
                    selected = item
                item.setText(0, release['title'])
                item.setText(
                    1,
                    artist_credit_from_node(release['artist-credit'])[0])
                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(
                selected or self.ui.release_list.topLevelItem(0))
            self.ui.ok_button.setEnabled(True)
        for i in range(self.ui.release_list.columnCount() - 1):
            self.ui.release_list.resizeColumnToContents(i)
        # Sort by descending date, then ascending country
        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_geometry()
        self.restore_header_state()
        self.finished.connect(self.save_header_state)
Ejemplo n.º 4
0
    def __init__(self, releases, disc, parent=None):
        super().__init__(parent)
        self.releases = releases
        self.disc = disc
        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")])
        if self.releases:
            def myjoin(l):
                return "\n".join(l)

            selected = None
            for release in self.releases:
                labels, catalog_numbers = label_info_from_node(release['label-info'])
                dates, countries = release_dates_and_countries_from_node(release)
                barcode = release['barcode'] if "barcode" in release else ""
                item = QtWidgets.QTreeWidgetItem(self.ui.release_list)
                if disc.mcn and compare_barcodes(barcode, disc.mcn):
                    selected = item
                item.setText(0, release['title'])
                item.setText(1, artist_credit_from_node(release['artist-credit'])[0])
                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(selected or self.ui.release_list.topLevelItem(0))
            self.ui.ok_button.setEnabled(True)
        for i in range(self.ui.release_list.columnCount() - 1):
            self.ui.release_list.resizeColumnToContents(i)
        # Sort by descending date, then ascending country
        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_geometry()
        self.restore_header_state()
        self.finished.connect(self.save_header_state)
Ejemplo n.º 5
0
 def test_label_info_from_node_0(self):
     label_info = label_info_from_node(self.json_doc['releases'][0]['label-info'])
     self.assertEqual(label_info, ([], []))
Ejemplo n.º 6
0
 def _label_info(self, n):
     return label_info_from_node(self.json_doc['releases'][n]['label-info'])
Ejemplo n.º 7
0
    def _parse_versions(self, document):
        """Parse document and return a list of releases"""
        del self.versions[:]
        data = []

        namekeys = ("tracks", "year", "country", "format", "label", "catnum")
        headings = {
            "tracks": N_('Tracks'),
            "year": N_('Year'),
            "country": N_('Country'),
            "format": N_('Format'),
            "label": N_('Label'),
            "catnum": N_('Cat No'),
        }
        extrakeys = ("packaging", "barcode", "disambiguation")

        try:
            releases = document['releases']
        except (TypeError, KeyError):
            releases = []

        for node in releases:
            labels, catnums = label_info_from_node(node['label-info'])

            countries = country_list_from_node(node)

            formats = []
            for medium in node['media']:
                if "format" in medium:
                    formats.append(medium['format'])
            release = {
                "id":
                node['id'],
                "year":
                node['date'][:4] if "date" in node else "????",
                "country":
                "+".join(countries)
                if countries else node.get('country', '') or "??",
                "format":
                media_formats_from_node(node['media']),
                "label":
                ", ".join([' '.join(x.split(' ')[:2]) for x in set(labels)]),
                "catnum":
                ", ".join(set(catnums)),
                "tracks":
                "+".join([str(m['track-count']) for m in node['media']]),
                "barcode":
                node.get('barcode', '') or _('[no barcode]'),
                "packaging":
                node.get('packaging', '') or '??',
                "disambiguation":
                node.get('disambiguation', ''),
                "_disambiguate_name":
                list(),
                "totaltracks":
                sum([m['track-count'] for m in node['media']]),
                "countries":
                countries,
                "formats":
                formats,
            }
            data.append(release)

        versions = defaultdict(list)
        for release in data:
            name = " / ".join([release[k]
                               for k in namekeys]).replace("&", "&&")
            if name == release["tracks"]:
                name = "%s / %s" % (_('[no release info]'), name)
            versions[name].append(release)

        # de-duplicate names if possible
        for name, releases in versions.items():
            for a, b in combinations(releases, 2):
                for key in extrakeys:
                    (value1, value2) = (a[key], b[key])
                    if value1 != value2:
                        a['_disambiguate_name'].append(value1)
                        b['_disambiguate_name'].append(value2)
        for name, releases in versions.items():
            for release in releases:
                dis = " / ".join(
                    filter(None,
                           uniqify(release['_disambiguate_name']))).replace(
                               "&", "&&")
                disname = name if not dis else name + ' / ' + dis
                version = {
                    'id': release['id'],
                    'name': disname,
                    'totaltracks': release['totaltracks'],
                    'countries': release['countries'],
                    'formats': release['formats'],
                }
                self.versions.append(version)
        self.version_headings = " / ".join(_(headings[k]) for k in namekeys)
Ejemplo n.º 8
0
    def _parse_versions(self, document):
        """Parse document and return a list of releases"""
        del self.versions[:]
        data = []

        namekeys = ("tracks", "year", "country", "format", "label", "catnum")
        headings = {
            "tracks":   N_('Tracks'),
            "year":     N_('Year'),
            "country":  N_('Country'),
            "format":   N_('Format'),
            "label":    N_('Label'),
            "catnum":   N_('Cat No'),
        }
        extrakeys = ("packaging", "barcode", "disambiguation")

        try:
            releases = document['releases']
        except (TypeError, KeyError):
            releases = []

        for node in releases:
            labels, catnums = label_info_from_node(node['label-info'])

            countries = country_list_from_node(node)

            formats = []
            for medium in node['media']:
                if "format" in medium:
                    formats.append(medium['format'])
            release = {
                "id":      node['id'],
                "year":    node['date'][:4] if "date" in node else "????",
                "country": "+".join(countries) if countries
                    else node['country'] if "country" in node
                    else "??",
                "format":  media_formats_from_node(node['media']),
                "label":  ", ".join([' '.join(x.split(' ')[:2]) for x in set(labels)]),
                "catnum": ", ".join(set(catnums)),
                "tracks":  "+".join([str(m['track-count']) for m in node['media']]),
                "barcode":
                    node['barcode']
                    if "barcode" in node
                    and node['barcode'] != ""
                    else _("[no barcode]"),
                "packaging":
                    node['packaging']
                    if "packaging" in node
                    else None,
                "disambiguation":
                    node['disambiguation']
                    if "disambiguation" in node
                    else None,
                "_disambiguate_name": list(),
                "totaltracks": sum([m['track-count'] for m in node['media']]),
                "countries": countries,
                "formats": formats,
            }
            data.append(release)

        versions = defaultdict(list)
        for release in data:
            name = " / ".join([release[k] for k in namekeys]).replace("&", "&&")
            if name == release["tracks"]:
                name = "%s / %s" % (_('[no release info]'), name)
            versions[name].append(release)

        # de-duplicate names if possible
        for name, releases in versions.items():
            for a, b in combinations(releases, 2):
                for key in extrakeys:
                    (value1, value2) = (a[key], b[key])
                    if value1 != value2:
                        a['_disambiguate_name'].append(value1)
                        b['_disambiguate_name'].append(value2)
        for name, releases in versions.items():
            for release in releases:
                dis = " / ".join(filter(None, uniqify(release['_disambiguate_name']))).replace("&", "&&")
                disname = name if not dis else name + ' / ' + dis
                version = {
                    'id': release['id'],
                    'name': disname,
                    'totaltracks': release['totaltracks'],
                    'countries': release['countries'],
                    'formats': release['formats'],
                }
                self.versions.append(version)
        self.version_headings = " / ".join(_(headings[k]) for k in namekeys)
Ejemplo n.º 9
0
    def __init__(self, releases, disc, parent=None):
        super().__init__(parent)
        self.releases = releases
        self.disc = disc
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        release_list = self.ui.release_list
        release_list.setSelectionMode(
            QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection)
        release_list.setSortingEnabled(True)
        release_list.setAlternatingRowColors(True)
        release_list.setHeaderLabels([
            _("Album"),
            _("Artist"),
            _("Date"),
            _("Country"),
            _("Labels"),
            _("Catalog #s"),
            _("Barcode"),
            _("Disambiguation")
        ])
        self.ui.submit_button.setIcon(QtGui.QIcon(":/images/cdrom.png"))
        if self.releases:

            def myjoin(values):
                return "\n".join(values)

            self.ui.results_view.setCurrentIndex(0)
            selected = None
            for release in self.releases:
                labels, catalog_numbers = label_info_from_node(
                    release['label-info'])
                dates, countries = release_dates_and_countries_from_node(
                    release)
                barcode = release.get('barcode', '')
                item = QtWidgets.QTreeWidgetItem(release_list)
                if disc.mcn and compare_barcodes(barcode, disc.mcn):
                    selected = item
                item.setText(0, release['title'])
                item.setText(
                    1,
                    artist_credit_from_node(release['artist-credit'])[0])
                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.setText(7, release.get('disambiguation', ''))
                item.setData(0, QtCore.Qt.ItemDataRole.UserRole, release['id'])
            release_list.setCurrentItem(selected
                                        or release_list.topLevelItem(0))
            self.ui.ok_button.setEnabled(True)
            for i in range(release_list.columnCount() - 1):
                release_list.resizeColumnToContents(i)
            # Sort by descending date, then ascending country
            release_list.sortByColumn(3, QtCore.Qt.SortOrder.AscendingOrder)
            release_list.sortByColumn(2, QtCore.Qt.SortOrder.DescendingOrder)
        else:
            self.ui.results_view.setCurrentIndex(1)
        self.ui.lookup_button.clicked.connect(self.lookup)
        self.ui.submit_button.clicked.connect(self.lookup)
        self.restore_header_state()
        self.finished.connect(self.save_header_state)
Ejemplo n.º 10
0
 def test_label_info_from_node_0(self):
     label_info = label_info_from_node(self.json_doc['releases'][0]['label-info'])
     self.assertEqual(label_info, ([], []))
Ejemplo n.º 11
0
 def _label_info(self, n):
     return label_info_from_node(self.json_doc['releases'][n]['label-info'])