Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package picard for openSUSE:Factory checked in at 2021-10-13 18:06:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/picard (Old) and /work/SRC/openSUSE:Factory/.picard.new.2443 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "picard" Wed Oct 13 18:06:20 2021 rev:54 rq:925045 version:2.6.4 Changes: -------- --- /work/SRC/openSUSE:Factory/picard/picard.changes 2021-06-11 00:19:15.197377336 +0200 +++ /work/SRC/openSUSE:Factory/.picard.new.2443/picard.changes 2021-10-13 18:10:44.811712890 +0200 @@ -1,0 +2,15 @@ +Wed Oct 13 08:19:10 UTC 2021 - Michael Vetter <[email protected]> + +- Update to 2.6.4: + * PICARD-2199 - Saving ID3 ratings fails, if rating e-mail contains + non latin-1 characters + * PICARD-2200 - Copy and pasting function names from inline scripting + docs can copy Unicode left-to-right mark + * PICARD-2230 - Picard fails to start on Windows if the hostname + contains non-ASCII characters and browser integration is enabled + * PICARD-2269 - "TypeError: arguments did not match any overloaded + call" with Python 3.10 + * PICARD-2274 - Picard 2.6.3 crashes when track is removed or moved + during lookup + +------------------------------------------------------------------- Old: ---- picard-2.6.3.tar.gz New: ---- picard-2.6.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ picard.spec ++++++ --- /var/tmp/diff_new_pack.8kHfn5/_old 2021-10-13 18:10:45.291713643 +0200 +++ /var/tmp/diff_new_pack.8kHfn5/_new 2021-10-13 18:10:45.291713643 +0200 @@ -17,7 +17,7 @@ Name: picard -Version: 2.6.3 +Version: 2.6.4 Release: 0 Summary: The Next Generation MusicBrainz Tagger License: GPL-2.0-or-later ++++++ picard-2.6.3.tar.gz -> picard-2.6.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/NEWS.md new/picard-release-2.6.4/NEWS.md --- old/picard-release-2.6.3/NEWS.md 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/NEWS.md 2021-10-06 07:50:29.000000000 +0200 @@ -1,3 +1,14 @@ +# Version 2.6.4 - 2021-10-06 + +## Bugfixes + +- [PICARD-2199](https://tickets.metabrainz.org/browse/PICARD-2199) - Saving ID3 ratings fails, if rating e-mail contains non latin-1 characters +- [PICARD-2200](https://tickets.metabrainz.org/browse/PICARD-2200) - Copy and pasting function names from inline scripting docs can copy Unicode left-to-right mark +- [PICARD-2230](https://tickets.metabrainz.org/browse/PICARD-2230) - Picard fails to start on Windows if the hostname contains non-ASCII characters and browser integration is enabled +- [PICARD-2269](https://tickets.metabrainz.org/browse/PICARD-2269) - "TypeError: arguments did not match any overloaded call" with Python 3.10 +- [PICARD-2274](https://tickets.metabrainz.org/browse/PICARD-2274) - Picard 2.6.3 crashes when track is removed or moved during lookup + + # Version 2.6.3 - 2021-06-07 ## Bugfixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/__init__.py new/picard-release-2.6.4/picard/__init__.py --- old/picard-release-2.6.3/picard/__init__.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/__init__.py 2021-10-06 07:50:29.000000000 +0200 @@ -41,7 +41,7 @@ PICARD_DISPLAY_NAME = "MusicBrainz Picard" PICARD_APP_ID = "org.musicbrainz.Picard" PICARD_DESKTOP_NAME = PICARD_APP_ID + ".desktop" -PICARD_VERSION = Version(2, 6, 3, 'final', 0) +PICARD_VERSION = Version(2, 6, 4, 'final', 0) # optional build version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/browser/browser.py new/picard-release-2.6.4/picard/browser/browser.py --- old/picard-release-2.6.3/picard/browser/browser.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/browser/browser.py 2021-10-06 07:50:29.000000000 +0200 @@ -106,26 +106,32 @@ else: host_address = '0.0.0.0' # nosec - for port in range(config.setting["browser_integration_port"], 65535): - try: - self.server = ThreadingHTTPServer((host_address, port), RequestHandler) - except OSError: - continue - log.info("Starting the browser integration (%s:%d)", host_address, port) - self.listen_port_changed.emit(port) - threading.Thread(target=self.server.serve_forever).start() - break - else: - log.error("Failed finding an available port for the browser integration.") - self.stop() + try: + for port in range(config.setting["browser_integration_port"], 65535): + try: + self.server = ThreadingHTTPServer((host_address, port), RequestHandler) + except OSError: + continue + log.info("Starting the browser integration (%s:%d)", host_address, port) + self.listen_port_changed.emit(port) + threading.Thread(target=self.server.serve_forever).start() + break + else: + log.error("Failed finding an available port for the browser integration.") + self.stop() + except Exception: + log.error("Failed starting the browser integration on %s", host_address, exc_info=True) def stop(self): if self.server: - log.info("Stopping the browser integration") - self.server.shutdown() - self.server.server_close() - self.server = None - self.listen_port_changed.emit(self.port) + try: + log.info("Stopping the browser integration") + self.server.shutdown() + self.server.server_close() + self.server = None + self.listen_port_changed.emit(self.port) + except Exception: + log.error("Failed stopping the browser integration", exc_info=True) else: log.debug("Browser integration inactive, no need to stop") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/formats/id3.py new/picard-release-2.6.4/picard/formats/id3.py --- old/picard-release-2.6.3/picard/formats/id3.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/formats/id3.py 2021-10-06 07:50:29.000000000 +0200 @@ -259,7 +259,7 @@ tags = file.tags or {} config = get_config() itunes_compatible = config.setting['itunes_compatible_grouping'] - rating_user_email = config.setting['rating_user_email'] + rating_user_email = id3text(config.setting['rating_user_email'], 0) rating_steps = config.setting['rating_steps'] # upgrade custom 2.3 frames to 2.4 for old, new in self.__upgrade.items(): @@ -458,9 +458,10 @@ elif name == 'musicbrainz_recordingid': tags.add(id3.UFID(owner='http://musicbrainz.org', data=bytes(values[0], 'ascii'))) elif name == '~rating': + rating_email = id3text(config.setting['rating_user_email'], 0) # Search for an existing POPM frame to get the current playcount for frame in tags.values(): - if frame.FrameID == 'POPM' and frame.email == config.setting['rating_user_email']: + if frame.FrameID == 'POPM' and frame.email == rating_email: count = getattr(frame, 'count', 0) break else: @@ -468,7 +469,7 @@ # Convert rating to range between 0 and 255 rating = int(round(float(values[0]) * 255 / (config.setting['rating_steps'] - 1))) - tags.add(id3.POPM(email=config.setting['rating_user_email'], rating=rating, count=count)) + tags.add(id3.POPM(email=rating_email, rating=rating, count=count)) elif name == 'grouping': if config.setting['itunes_compatible_grouping']: tags.add(id3.GRP1(encoding=encoding, text=values)) @@ -581,7 +582,7 @@ tags.delall(real_name) tags.delall('TXXX:' + self.__rtranslate_freetext[name]) elif real_name == 'POPM': - user_email = config.setting['rating_user_email'] + user_email = id3text(config.setting['rating_user_email'], 0) for key, frame in list(tags.items()): if frame.FrameID == 'POPM' and frame.email == user_email: del tags[key] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/ui/coverartbox.py new/picard-release-2.6.4/picard/ui/coverartbox.py --- old/picard-release-2.6.3/picard/ui/coverartbox.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/ui/coverartbox.py 2021-10-06 07:50:29.000000000 +0200 @@ -135,7 +135,7 @@ event.acceptProposedAction() def scaled(self, *dimensions): - return (self.pixel_ratio * dimension for dimension in dimensions) + return (round(self.pixel_ratio * dimension) for dimension in dimensions) def show(self): self.set_data(self.data, True) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/ui/itemviews.py new/picard-release-2.6.4/picard/ui/itemviews.py --- old/picard-release-2.6.3/picard/ui/itemviews.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/ui/itemviews.py 2021-10-06 07:50:29.000000000 +0200 @@ -139,9 +139,9 @@ c1 = (basecolor.red(), basecolor.green(), basecolor.blue()) c2 = (223, 125, 125) return QtGui.QColor( - c2[0] + (c1[0] - c2[0]) * similarity, - c2[1] + (c1[1] - c2[1]) * similarity, - c2[2] + (c1[2] - c2[2]) * similarity) + int(c2[0] + (c1[0] - c2[0]) * similarity), + int(c2[1] + (c1[1] - c2[1]) * similarity), + int(c2[2] + (c1[2] - c2[2]) * similarity)) class MainPanel(QtWidgets.QSplitter): @@ -902,9 +902,10 @@ return super().setText(column, text) def __lt__(self, other): - if not self.sortable: + tree_widget = self.treeWidget() + if not self.sortable or not tree_widget: return False - column = self.treeWidget().sortColumn() + column = tree_widget.sortColumn() return self.sortkey(column) < other.sortkey(column) def sortkey(self, column): @@ -991,11 +992,13 @@ # insertChildren behaves differently if sorting is disabled / enabled, which results # in different sort order of tracks in unsorted state. As we sort the tracks later # anyway make sure sorting is disabled here. - tree_view = self.treeWidget() - sorting_enabled = tree_view.isSortingEnabled() - tree_view.setSortingEnabled(False) + tree_widget = self.treeWidget() + if tree_widget: + sorting_enabled = tree_widget.isSortingEnabled() + tree_widget.setSortingEnabled(False) self.insertChildren(oldnum, items) - tree_view.setSortingEnabled(sorting_enabled) + if tree_widget: + tree_widget.setSortingEnabled(sorting_enabled) for item in items: # Update after insertChildren so that setExpanded works item.update(update_album=False) if album.errors: @@ -1033,7 +1036,10 @@ class NatAlbumItem(AlbumItem): def __lt__(self, other): # Always show NAT entry on top - order = self.treeWidget().header().sortIndicatorOrder() + tree_widget = self.treeWidget() + if not tree_widget: + return True + order = tree_widget.header().sortIndicatorOrder() return order == QtCore.Qt.AscendingOrder diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/ui/options/scripting.py new/picard-release-2.6.4/picard/ui/options/scripting.py --- old/picard-release-2.6.3/picard/ui/options/scripting.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/ui/options/scripting.py 2021-10-06 07:50:29.000000000 +0200 @@ -146,7 +146,8 @@ } # Scripting code is always left-to-right. Qt does not support the dir # attribute on inline tags, insert explicit left-right-marks instead. - html = html.replace('<code>', '<code>‎') + if text_direction == 'rtl': + html = html.replace('<code>', '<code>‎') self.ui.textBrowser.setHtml(html) self.ui.buttonBox.rejected.connect(self.close) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/picard/util/__init__.py new/picard-release-2.6.4/picard/util/__init__.py --- old/picard-release-2.6.3/picard/util/__init__.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/picard/util/__init__.py 2021-10-06 07:50:29.000000000 +0200 @@ -355,7 +355,7 @@ else: decorator.args = args decorator.kwargs = kwargs - QtCore.QTimer.singleShot(r, later) + QtCore.QTimer.singleShot(int(r), later) decorator.is_ticking = True mutex.unlock() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/picard-release-2.6.3/test/formats/test_id3.py new/picard-release-2.6.4/test/formats/test_id3.py --- old/picard-release-2.6.3/test/formats/test_id3.py 2021-06-06 12:45:12.000000000 +0200 +++ new/picard-release-2.6.4/test/formats/test_id3.py 2021-10-06 07:50:29.000000000 +0200 @@ -516,6 +516,15 @@ loaded_metadata = save_and_load_metadata(self.filename, metadata) self.assertNotIn('website', loaded_metadata) + @skipUnlessTestfile + def test_rating_email_non_latin1(self): + for rating in range(6): + config.setting['rating_user_email'] = 'foo???' + rating = '3' + metadata = Metadata({'~rating': rating}) + loaded_metadata = save_and_load_metadata(self.filename, metadata) + self.assertEqual(loaded_metadata['~rating'], rating, '~rating: %r != %r' % (loaded_metadata['~rating'], rating)) + class MP3Test(CommonId3Tests.Id3TestCase): testfile = 'test.mp3'
