Hello community,

here is the log from the commit of package picard for openSUSE:Factory checked 
in at 2020-10-29 14:52:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/picard (Old)
 and      /work/SRC/openSUSE:Factory/.picard.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "picard"

Thu Oct 29 14:52:12 2020 rev:46 rq:844809 version:2.5.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/picard/picard.changes    2020-10-27 
19:01:31.758856061 +0100
+++ /work/SRC/openSUSE:Factory/.picard.new.3463/picard.changes  2020-10-29 
14:52:14.985240175 +0100
@@ -1,0 +2,20 @@
+Thu Oct 29 07:47:43 UTC 2020 - Michael Vetter <[email protected]>
+
+- Update to 2.5.1:
+  Bugfixes:
+  * PICARD-1987 - Special variables %_multiartist%, %_pregap%,
+    %_datatrack% and %_totalalbumtracks% missing after files
+    got matched to a track
+  * PICARD-1988 - Aborts if directory scan finds a directory which
+    cannot be read
+  * PICARD-1989 - Auto-sizing does not work right on first column
+  * PICARD-1990 - Case-only changes to file names are not applied
+    on Windows if running with Python >= 3.8
+  Improvements:
+  * PICARD-1985 - Support chorus master recording relationships
+    as "performer:chorus master" instead of second conductor
+  * PICARD-1995 - Add command line parameter --no-player to
+    disable media player
+  * PICARD-1997 - Reduce performance impact of fingerprinting column
+
+-------------------------------------------------------------------

Old:
----
  picard-2.5.tar.gz

New:
----
  picard-2.5.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ picard.spec ++++++
--- /var/tmp/diff_new_pack.L6v3mo/_old  2020-10-29 14:52:15.845241027 +0100
+++ /var/tmp/diff_new_pack.L6v3mo/_new  2020-10-29 14:52:15.849241031 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           picard
-Version:        2.5
+Version:        2.5.1
 Release:        0
 Summary:        The Next Generation MusicBrainz Tagger
 License:        GPL-2.0-or-later

++++++ picard-2.5.tar.gz -> picard-2.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/.github/workflows/package.yml 
new/picard-release-2.5.1/.github/workflows/package.yml
--- old/picard-release-2.5/.github/workflows/package.yml        2020-10-22 
16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/.github/workflows/package.yml      2020-10-28 
20:32:00.000000000 +0100
@@ -61,16 +61,28 @@
     - name: Run tests
       run: |
         python3 setup.py test
+    - name: Prepare code signing certificate
+      run: |
+        if [ -n "$CODESIGN_MACOS_PFX_URL" ] && [ -n "$AWS_ACCESS_KEY_ID" ]; 
then
+          pip3 install awscli
+          aws s3 cp "$CODESIGN_MACOS_PFX_URL" ./scripts/package/appledev.p12
+        else
+          echo "::warning::No code signing certificate available, skipping 
code signing."
+        fi
+      env:
+        AWS_DEFAULT_REGION: eu-central-1
+        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+        CODESIGN_MACOS_PFX_URL: ${{ secrets.CODESIGN_MACOS_PFX_URL }}
     - name: Build macOS app
       run: |
         ./scripts/package/macos-package-app.sh
+        rm ./scripts/package/appledev.p12
         mv dist/*.dmg artifacts/
       env:
-        APPLE_ID_USER: ${{ secrets. APPLE_ID_USER }}
-        APPLE_ID_PASSWORD: ${{ secrets. APPLE_ID_PASSWORD }}
-        encrypted_be5fb2212036_key: ${{ secrets.CODESIGN_MACOS_ENCRYPTED_KEY }}
-        encrypted_be5fb2212036_iv: ${{ secrets.CODESIGN_MACOS_ENCRYPTED_IV }}
-        appledev_p12_password: ${{ secrets.CODESIGN_MACOS_P12_PASSWORD }}
+        APPLE_ID_USER: ${{ secrets.APPLE_ID_USER }}
+        APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
+        CODESIGN_MACOS_P12_PASSWORD: ${{ secrets.CODESIGN_MACOS_P12_PASSWORD }}
     - name: Archive production artifacts
       uses: actions/upload-artifact@v1
       with:
@@ -169,6 +181,7 @@
           $CertPassword = ConvertTo-SecureString -String 
$Env:CODESIGN_PFX_PASSWORD -Force -AsPlainText
           $Certificate = Get-PfxCertificate -FilePath .\codesign.pfx -Password 
$CertPassword
           & .\scripts\package\win-package-portable.ps1 -BuildNumber 
$Env:BUILD_NUMBER -Certificate $Certificate
+          Remove-Item .\codesign.pfx
         } Else {
           & .\scripts\package\win-package-portable.ps1 -BuildNumber 
$Env:BUILD_NUMBER
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/picard-release-2.5/.github/workflows/pypi-release.yml 
new/picard-release-2.5.1/.github/workflows/pypi-release.yml
--- old/picard-release-2.5/.github/workflows/pypi-release.yml   2020-10-22 
16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/.github/workflows/pypi-release.yml 2020-10-28 
20:32:00.000000000 +0100
@@ -24,10 +24,37 @@
     - name: Build Python source distribution
       run: |
         python setup.py clean sdist
+    - name: Prepare GPG signing key
+      run: |
+        if [ -n "$CODESIGN_PGP_URL" ] && [ -n "$AWS_ACCESS_KEY_ID" ]; then
+          pip3 install awscli
+          aws s3 cp "$CODESIGN_PGP_URL" signkey.asc.enc
+          openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in signkey.asc.enc 
-out signkey.asc -k "$CODESIGN_PGP_PASSWORD"
+          gpg --import signkey.asc
+          rm signkey.asc*
+          echo "CODESIGN=1" >> $GITHUB_ENV
+        else
+          echo "::warning::No signing key available, skipping code signing."
+        fi
+      env:
+        AWS_DEFAULT_REGION: eu-central-1
+        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+        CODESIGN_PGP_URL: ${{ secrets.CODESIGN_PGP_URL }}
+        CODESIGN_PGP_PASSWORD: ${{ secrets.CODESIGN_PGP_PASSWORD }}
     - name: Publish Python distribution to PyPI
       run: |
         pip install --upgrade twine
-        twine upload --non-interactive dist/*
+        if [ "$CODESIGN" = '1' ]; then
+          twine upload --non-interactive --sign --identity "$SIGN_IDENTITY" 
dist/*
+        else
+          twine upload --non-interactive dist/*
+        fi
       env:
         TWINE_USERNAME: __token__
         TWINE_PASSWORD: ${{ secrets.PYPI_UPLOAD_TOKEN }}
+        SIGN_IDENTITY: [email protected]
+    - name: Cleanup
+      if: env.CODESIGN
+      run: |
+        rm -rf "$HOME/.gnupg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/NEWS.md 
new/picard-release-2.5.1/NEWS.md
--- old/picard-release-2.5/NEWS.md      2020-10-22 16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/NEWS.md    2020-10-28 20:32:00.000000000 +0100
@@ -1,3 +1,17 @@
+# Version 2.5.1 - 2020-10-28
+
+## Bugfixes
+- [PICARD-1987](https://tickets.metabrainz.org/browse/PICARD-1987) - Special 
variables `%_multiartist%`, `%_pregap%`, `%_datatrack%` and 
`%_totalalbumtracks%` missing after files got matched to a track
+- [PICARD-1988](https://tickets.metabrainz.org/browse/PICARD-1988) - Aborts if 
directory scan finds a directory which cannot be read
+- [PICARD-1989](https://tickets.metabrainz.org/browse/PICARD-1989) - 
Auto-sizing does not work right on first column
+- [PICARD-1990](https://tickets.metabrainz.org/browse/PICARD-1990) - Case-only 
changes to file names are not applied on Windows if running with Python >= 3.8
+
+## Improvements
+- [PICARD-1985](https://tickets.metabrainz.org/browse/PICARD-1985) - Support 
chorus master recording relationships as "performer:chorus master" instead of 
second conductor
+- [PICARD-1995](https://tickets.metabrainz.org/browse/PICARD-1995) - Add 
command line parameter `--no-player` to disable media player
+- [PICARD-1997](https://tickets.metabrainz.org/browse/PICARD-1997) - Reduce 
performance impact of fingerprinting column
+
+
 # Version 2.5 - 2020-10-22
 
 ## Bugfixes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/__init__.py 
new/picard-release-2.5.1/picard/__init__.py
--- old/picard-release-2.5/picard/__init__.py   2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/picard/__init__.py 2020-10-28 20:32:00.000000000 
+0100
@@ -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, 5, 0, 'final', 0)
+PICARD_VERSION = Version(2, 5, 1, 'final', 0)
 
 
 # optional build version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/album.py 
new/picard-release-2.5.1/picard/album.py
--- old/picard-release-2.5/picard/album.py      2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/picard/album.py    2020-10-28 20:32:00.000000000 
+0100
@@ -319,7 +319,6 @@
                 mm = Metadata()
                 mm.copy(self._new_metadata)
                 medium_to_metadata(medium_node, mm)
-                discpregap = False
                 format = medium_node.get('format')
                 if format:
                     all_media.append(format)
@@ -327,29 +326,43 @@
                 for dj in djmix_ars.get(mm["discnumber"], []):
                     mm.add("djmixer", dj)
 
+                if va:
+                    mm["compilation"] = "1"
+                else:
+                    del mm["compilation"]
+
                 if 'discs' in medium_node:
                     discids = [disc.get('id') for disc in medium_node['discs']]
                     mm['~musicbrainz_discids'] = discids
                     mm['musicbrainz_discid'] = 
list(self._discids.intersection(discids))
 
                 if "pregap" in medium_node:
-                    discpregap = True
                     absolutetracknumber += 1
-                    track = 
self._finalize_loading_track(medium_node['pregap'], mm, artists, va, 
absolutetracknumber, discpregap)
-                    track.metadata['~pregap'] = "1"
+                    mm['~discpregap'] = '1'
+                    extra_metadata = {
+                        '~pregap': '1',
+                        '~absolutetracknumber': absolutetracknumber,
+                    }
+                    self._finalize_loading_track(medium_node['pregap'], mm, 
artists, extra_metadata)
 
                 track_count = medium_node['track-count']
                 if track_count:
                     tracklist_node = medium_node['tracks']
                     for track_node in tracklist_node:
                         absolutetracknumber += 1
-                        track = self._finalize_loading_track(track_node, mm, 
artists, va, absolutetracknumber, discpregap)
+                        extra_metadata = {
+                            '~absolutetracknumber': absolutetracknumber,
+                        }
+                        self._finalize_loading_track(track_node, mm, artists, 
extra_metadata)
 
                 if "data-tracks" in medium_node:
                     for track_node in medium_node['data-tracks']:
                         absolutetracknumber += 1
-                        track = self._finalize_loading_track(track_node, mm, 
artists, va, absolutetracknumber, discpregap)
-                        track.metadata['~datatrack'] = "1"
+                        extra_metadata = {
+                            '~datatrack': '1',
+                            '~absolutetracknumber': absolutetracknumber,
+                        }
+                        self._finalize_loading_track(track_node, mm, artists, 
extra_metadata)
 
             totalalbumtracks = absolutetracknumber
             self._new_metadata['~totalalbumtracks'] = totalalbumtracks
@@ -358,8 +371,10 @@
 
             for track in self._new_tracks:
                 track.metadata["~totalalbumtracks"] = totalalbumtracks
+                track.orig_metadata["~totalalbumtracks"] = totalalbumtracks
                 if len(artists) > 1:
                     track.metadata["~multiartist"] = "1"
+                    track.orig_metadata["~multiartist"] = "1"
             del self._release_node
             del self._release_artist_nodes
             self._tracks_loaded = True
@@ -413,7 +428,7 @@
             if self.item.isSelected():
                 self.tagger.window.refresh_metadatabox()
 
-    def _finalize_loading_track(self, track_node, metadata, artists, va, 
absolutetracknumber, discpregap):
+    def _finalize_loading_track(self, track_node, metadata, artists, 
extra_metadata=None):
         # As noted in `_parse_release` above, the release artist nodes
         # may contain supplementary data that isn't present in track
         # artist nodes. Similarly, the track artists may contain
@@ -430,17 +445,12 @@
         tm = track.metadata
         tm.copy(metadata)
         track_to_metadata(track_node, track)
-        tm["~absolutetracknumber"] = absolutetracknumber
         track._customize_metadata()
 
         self._new_metadata.length += tm.length
         artists.add(tm["artist"])
-        if va:
-            tm["compilation"] = "1"
-        else:
-            del tm["compilation"]
-        if discpregap:
-            tm["~discpregap"] = "1"
+        if extra_metadata:
+            tm.update(extra_metadata)
 
         # Run track metadata plugins
         try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/file.py 
new/picard-release-2.5.1/picard/file.py
--- old/picard-release-2.5/picard/file.py       2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/picard/file.py     2020-10-28 20:32:00.000000000 
+0100
@@ -461,17 +461,18 @@
                 new_dirname = 
os.path.normpath(os.path.join(os.path.dirname(filename), new_dirname))
         else:
             new_dirname = os.path.dirname(filename)
+        try:
+            new_dirname = os.path.realpath(new_dirname)
+        except FileNotFoundError:
+            # os.path.realpath can fail if cwd does not exist and path is 
relative
+            pass
         new_filename = os.path.basename(filename)
 
         if settings["rename_files"] or settings["move_files"]:
             new_filename = self._format_filename(new_dirname, new_filename, 
metadata, settings)
 
         new_path = os.path.join(new_dirname, new_filename)
-        try:
-            return os.path.realpath(new_path)
-        except FileNotFoundError:
-            # os.path.realpath can fail if cwd doesn't exist
-            return new_path
+        return new_path
 
     def _rename(self, old_filename, metadata):
         new_filename, ext = os.path.splitext(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/mbjson.py 
new/picard-release-2.5.1/picard/mbjson.py
--- old/picard-release-2.5/picard/mbjson.py     2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/picard/mbjson.py   2020-10-28 20:32:00.000000000 
+0100
@@ -36,7 +36,7 @@
 _artist_rel_types = {
     "arranger": "arranger",
     "audio": "engineer",
-    "chorus master": "conductor",
+    "chorus master": "performer:chorus master",
     "composer": "composer",
     "concertmaster": "performer:concertmaster",
     "conductor": "conductor",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/tagger.py 
new/picard-release-2.5.1/picard/tagger.py
--- old/picard-release-2.5/picard/tagger.py     2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/picard/tagger.py   2020-10-28 20:32:00.000000000 
+0100
@@ -277,7 +277,7 @@
         self.mbid_redirects = {}
         self.unclustered_files = UnclusteredFiles()
         self.nats = None
-        self.window = MainWindow()
+        self.window = MainWindow(disable_player=picard_args.no_player)
         self.exit_cleanup = []
         self.stopping = False
 
@@ -563,8 +563,8 @@
                             yield entry.path
                 else:
                     yield current_path
-            except FileNotFoundError:
-                pass
+            except OSError as err:
+                log.warning(err)
 
     def add_paths(self, paths, target=None):
         files = self._scan_paths_recursive(paths,
@@ -920,6 +920,8 @@
                         help="location of the configuration file")
     parser.add_argument("-d", "--debug", action='store_true',
                         help="enable debug-level logging")
+    parser.add_argument("-M", "--no-player", action='store_true',
+                        help="disable built-in media player")
     parser.add_argument("-N", "--no-restore", action='store_true',
                         help="do not restore positions and/or sizes")
     parser.add_argument("-P", "--no-plugins", action='store_true',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/ui/itemviews.py 
new/picard-release-2.5.1/picard/ui/itemviews.py
--- old/picard-release-2.5/picard/ui/itemviews.py       2020-10-22 
16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/picard/ui/itemviews.py     2020-10-28 
20:32:00.000000000 +0100
@@ -323,31 +323,12 @@
     if not icon:
         return
     size = COLUMN_ICON_SIZE
-    padding_h = (rect.width() - size) / 2
+    padding_h = COLUMN_ICON_BORDER
     padding_v = (rect.height() - size) / 2
     target_rect = QtCore.QRect(rect.x() + padding_h, rect.y() + padding_v, 
size, size)
     painter.drawPixmap(target_rect, icon.pixmap(size, size))
 
 
-class FingerprintColumnWidget(QtWidgets.QWidget):
-    def __init__(self, file, parent=None):
-        super().__init__(parent=parent)
-        self._file = file
-
-    def paintEvent(self, event=None):
-        painter = QtGui.QPainter(self)
-        paint_fingerprint_icon(painter, self.rect(), self.decide_icon())
-
-    def decide_icon(self):
-        if getattr(self._file, 'acoustid_fingerprint', None):
-            if self.tagger.acoustidmanager.is_submitted(self._file):
-                return FileItem.icon_fingerprint_gray
-            else:
-                return FileItem.icon_fingerprint
-        else:
-            return None
-
-
 class ConfigurableColumnsHeader(TristateSortHeaderView):
 
     def __init__(self, parent=None):
@@ -378,7 +359,7 @@
             self._visible_columns.add(column)
             if column == MainPanel.FINGERPRINT_COLUMN:
                 self.setSectionResizeMode(column, QtWidgets.QHeaderView.Fixed)
-                self.parent().resizeColumnToContents(column)
+                self.resizeSection(column, COLUMN_ICON_SIZE)
             else:
                 self.setSectionResizeMode(column, 
QtWidgets.QHeaderView.Interactive)
         elif column in self._visible_columns:
@@ -897,7 +878,7 @@
             MainPanel.DISCNUMBER_COLUMN,
         ]:
             self.setTextAlignment(column, QtCore.Qt.AlignRight | 
QtCore.Qt.AlignVCenter)
-        self.setSizeHint(MainPanel.TITLE_COLUMN, ICON_SIZE)
+        self.setSizeHint(MainPanel.FINGERPRINT_COLUMN, ICON_SIZE)
 
     def setText(self, column, text):
         self._sortkeys[column] = None
@@ -1036,7 +1017,6 @@
 
     def update(self, update_album=True, update_files=True):
         track = self.obj
-        tree_widget = self.treeWidget()
         if track.num_linked_files == 1:
             file = track.linked_files[0]
             file.item = self
@@ -1046,16 +1026,13 @@
             self.setToolTip(MainPanel.TITLE_COLUMN, 
_(FileItem.decide_file_icon_info(file)))
             self.takeChildren()
             self.setExpanded(False)
-            self.setToolTip(MainPanel.FINGERPRINT_COLUMN, 
FileItem.decide_fingerprint_icon_info(file))
-            if tree_widget:
-                if not tree_widget.itemWidget(self, 
MainPanel.FINGERPRINT_COLUMN):
-                    tree_widget.setItemWidget(self, 
MainPanel.FINGERPRINT_COLUMN,
-                        FingerprintColumnWidget(file=file))
+            fingerprint_icon, fingerprint_tooltip = 
FileItem.decide_fingerprint_icon_info(file)
+            self.setToolTip(MainPanel.FINGERPRINT_COLUMN, fingerprint_tooltip)
+            self.setIcon(MainPanel.FINGERPRINT_COLUMN, fingerprint_icon)
         else:
             self.setToolTip(MainPanel.TITLE_COLUMN, "")
             self.setToolTip(MainPanel.FINGERPRINT_COLUMN, "")
-            if tree_widget:
-                tree_widget.setItemWidget(self, MainPanel.FINGERPRINT_COLUMN, 
None)
+            self.setIcon(MainPanel.FINGERPRINT_COLUMN, QtGui.QIcon())
             if track.ignored_for_completeness():
                 color = TreeItem.text_color_secondary
             else:
@@ -1108,18 +1085,15 @@
     def update(self, update_track=True):
         file = self.obj
         self.setIcon(MainPanel.TITLE_COLUMN, FileItem.decide_file_icon(file))
-        self.setToolTip(MainPanel.FINGERPRINT_COLUMN, 
self.decide_fingerprint_icon_info(file))
+        fingerprint_icon, fingerprint_tooltip = 
FileItem.decide_fingerprint_icon_info(file)
+        self.setToolTip(MainPanel.FINGERPRINT_COLUMN, fingerprint_tooltip)
+        self.setIcon(MainPanel.FINGERPRINT_COLUMN, fingerprint_icon)
         color = FileItem.file_colors[file.state]
         bgcolor = get_match_color(file.similarity, TreeItem.base_color)
         for i, column in enumerate(MainPanel.columns):
             self.setText(i, file.column(column[1]))
             self.setForeground(i, color)
             self.setBackground(i, bgcolor)
-        tree_widget = self.treeWidget()
-        if tree_widget:
-            if not tree_widget.itemWidget(self, MainPanel.FINGERPRINT_COLUMN):
-                tree_widget.setItemWidget(self, MainPanel.FINGERPRINT_COLUMN,
-                    FingerprintColumnWidget(file=file))
         if self.isSelected():
             TreeItem.window.update_selection(new_selection=False)
         parent = self.parent()
@@ -1157,10 +1131,14 @@
 
     @staticmethod
     def decide_fingerprint_icon_info(file):
-        if file.acoustid_fingerprint:
+        if getattr(file, 'acoustid_fingerprint', None):
             if QtCore.QObject.tagger.acoustidmanager.is_submitted(file):
-                return _('Fingerprint has already been submitted')
+                icon = FileItem.icon_fingerprint_gray
+                tooltip = _('Fingerprint has already been submitted')
             else:
-                return _('Unsubmitted fingerprint')
+                icon = FileItem.icon_fingerprint
+                tooltip = _('Unsubmitted fingerprint')
         else:
-            return _('No fingerprint was calculated for this file, use "Scan" 
or "Generate AcoustID Fingerprints" to calculate the fingerprint.')
+            icon = QtGui.QIcon()
+            tooltip = _('No fingerprint was calculated for this file, use 
"Scan" or "Generate AcoustID Fingerprints" to calculate the fingerprint.')
+        return (icon, tooltip)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/picard/ui/mainwindow.py 
new/picard-release-2.5.1/picard/ui/mainwindow.py
--- old/picard-release-2.5/picard/ui/mainwindow.py      2020-10-22 
16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/picard/ui/mainwindow.py    2020-10-28 
20:32:00.000000000 +0100
@@ -102,7 +102,6 @@
     PasswordDialog,
     ProxyDialog,
 )
-from picard.ui.playertoolbar import Player
 from picard.ui.searchdialog.album import AlbumSearchDialog
 from picard.ui.searchdialog.track import TrackSearchDialog
 from picard.ui.statusindicator import DesktopStatusIndicator
@@ -138,17 +137,19 @@
         config.IntOption("persist", "mediaplayer_volume", 50),
     ]
 
-    def __init__(self, parent=None):
+    def __init__(self, parent=None, disable_player=False):
         super().__init__(parent)
         self.selected_objects = []
         self.ignore_selection_changes = False
         self.toolbar = None
         self.player = None
         self.status_indicators = []
-        player = Player(self)
-        if player.available:
-            self.player = player
-            self.player.error.connect(self._on_player_error)
+        if not disable_player:
+            from picard.ui.playertoolbar import Player
+            player = Player(self)
+            if player.available:
+                self.player = player
+                self.player.error.connect(self._on_player_error)
         self.setupUi()
 
     def setupUi(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/po/attributes/he.po 
new/picard-release-2.5.1/po/attributes/he.po
--- old/picard-release-2.5/po/attributes/he.po  2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/po/attributes/he.po        2020-10-28 
20:32:00.000000000 +0100
@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2020-10-19 14:01+0000\n"
-"Last-Translator: yvanz\n"
+"PO-Revision-Date: 2020-10-25 12:41+0000\n"
+"Last-Translator: Avi Markovitz <[email protected]>\n"
 "Language-Team: Hebrew 
(http://www.transifex.com/musicbrainz/musicbrainz/language/he/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -1719,7 +1719,7 @@
 #: DB:release_group_secondary_type/name:8
 msgctxt "release_group_secondary_type"
 msgid "DJ-mix"
-msgstr "די.ג'י מיקס"
+msgstr "תמהיל-די.ג'י"
 
 #: DB:medium_format/name:44
 msgctxt "medium_format"
@@ -1734,7 +1734,7 @@
 #: DB:medium_format/name:18
 msgctxt "medium_format"
 msgid "DVD-Audio"
-msgstr "אידיו-DVD"
+msgstr "DVD-שמע"
 
 #: DB:medium_format/name:19
 msgctxt "medium_format"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/po/attributes/it.po 
new/picard-release-2.5.1/po/attributes/it.po
--- old/picard-release-2.5/po/attributes/it.po  2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/po/attributes/it.po        2020-10-28 
20:32:00.000000000 +0100
@@ -12,8 +12,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MusicBrainz\n"
-"PO-Revision-Date: 2020-10-19 14:01+0000\n"
-"Last-Translator: yvanz\n"
+"PO-Revision-Date: 2020-10-22 21:49+0000\n"
+"Last-Translator: Luca Salini <[email protected]>\n"
 "Language-Team: Italian 
(http://www.transifex.com/musicbrainz/musicbrainz/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -3060,7 +3060,7 @@
 #: DB:medium_format/name:87
 msgctxt "medium_format"
 msgid "Hybrid SACD (SACD layer, 2 channels)"
-msgstr ""
+msgstr "SACD ibrido (strato SACD, 2 canali)"
 
 #: DB:medium_format/name:86
 msgctxt "medium_format"
@@ -5727,7 +5727,7 @@
 #: DB:medium_format/name:84
 msgctxt "medium_format"
 msgid "SACD (2 channels)"
-msgstr ""
+msgstr "SACD (2 canali)"
 
 #: DB:medium_format/name:85
 msgctxt "medium_format"
@@ -5792,7 +5792,7 @@
 #: DB:medium_format/name:89
 msgctxt "medium_format"
 msgid "SHM-SACD (2 channels)"
-msgstr ""
+msgstr "SHM-SACD (2 canali)"
 
 #: DB:medium_format/name:88
 msgctxt "medium_format"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/po/he.po 
new/picard-release-2.5.1/po/he.po
--- old/picard-release-2.5/po/he.po     2020-10-22 16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/po/he.po   2020-10-28 20:32:00.000000000 +0100
@@ -15,7 +15,7 @@
 "Project-Id-Version: MusicBrainz\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2020-10-18 16:07+0200\n"
-"PO-Revision-Date: 2020-10-19 07:41+0000\n"
+"PO-Revision-Date: 2020-10-27 16:29+0000\n"
 "Last-Translator: Avi Markovitz <[email protected]>\n"
 "Language-Team: Hebrew 
(http://www.transifex.com/musicbrainz/musicbrainz/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -304,11 +304,11 @@
 #: picard/acoustid/manager.py:101
 msgid ""
 "AcoustID submission finished, but not all fingerprints have been submitted"
-msgstr "הַגָּשָׁת AcoustID הסתיימה, אך לא כל טביעות האצבע נקלטו"
+msgstr "שגור AcoustID הסתיים, אך לא כל טביעות האצבע נקלטו"
 
 #: picard/acoustid/manager.py:103
 msgid "AcoustID submission finished successfully"
-msgstr "הַגָּשָׁת AcoustID צלחה"
+msgstr "שגור AcoustID צלח"
 
 #: picard/acoustid/manager.py:115
 msgid "Submitting AcoustIDs ..."
@@ -2981,7 +2981,7 @@
 " is operated by the MetaBrainz Foundation with the help of thousands of "
 "volunteers. If you like this application please consider donating to the "
 "MetaBrainz Foundation to keep the service running."
-msgstr "מודים לכם על השימוש ב פיקארד. פיקארד מתבסס על מסד הנתונים של 
מיוזיקבריינז, המופעל על ידי קרן מטהבריינז בעזרתם של אלפי מתנדבים. אם אתם אוהבים 
את היישום הזה, שקולו בבקשה לתרום ל מטהבריינז על מנת להבטיח המשכיות השירות."
+msgstr "מודים לכם על השימוש בפיקארד. פיקארד מתבסס על מסד הנתונים של 
מיוזיקבריינז, המופעל על ידי קרן מטהבריינז בעזרתם של אלפי מתנדבים. אם אתם אוהבים 
את היישום הזה, שקולו בבקשה לתרום למטהבריינז על מנת להבטיח את המשכיות השירות."
 
 #: picard/ui/aboutdialog.py:109
 msgid "Donate now!"
@@ -3560,7 +3560,7 @@
 
 #: picard/ui/mainwindow.py:406
 msgid "AcoustID submission not configured"
-msgstr "לא הוגדרו הגשות AcoustID "
+msgstr "שגור AcoustID לא תוצר"
 
 #: picard/ui/mainwindow.py:407
 msgid ""
@@ -3871,7 +3871,7 @@
 
 #: picard/ui/mainwindow.py:636
 msgid "&Check for Update…"
-msgstr "&בדיקת עדכון..."
+msgstr "&בדיקת זמינות עדכונים..."
 
 #: picard/ui/mainwindow.py:696
 msgid "&File"
@@ -3965,7 +3965,7 @@
 msgid ""
 "Picard needs authorization to access your personal data on the MusicBrainz "
 "server. Would you like to log in now?"
-msgstr "ל פיקארד  נדרשת הרשאה לגשת לנתונים האישיים שלך בשרת מוזיקבריינז. האם 
ברצונך להיכנס כעת?"
+msgstr "לפיקארד נדרשת הרשאת גישה לנתונים האישיים שלכם בשרת מוזיקבריינז. האם 
להתחבר כעת?"
 
 #: picard/ui/metadatabox.py:102
 #, python-format
@@ -4359,7 +4359,7 @@
 
 #: picard/ui/ui_options_general.py:137
 msgid "Log out"
-msgstr "התנתק מהמערכת"
+msgstr "התנתקות מהמערכת"
 
 #: picard/ui/options/general.py:49 picard/ui/ui_options_general.py:138
 msgid "General"
@@ -4375,11 +4375,11 @@
 
 #: picard/ui/ui_options_general.py:141
 msgid "Update Checking"
-msgstr "בדיקת עדכון"
+msgstr "בדיקת זמינות עדכונים"
 
 #: picard/ui/ui_options_general.py:142
 msgid "Check for updates during start-up"
-msgstr "בדיקת עדכון בעת האתחול"
+msgstr "בדיקת עדכונים בעת האתחול"
 
 #: picard/ui/ui_options_general.py:143
 msgid "Days between checks:"
@@ -4647,7 +4647,7 @@
 "user who did the rating. That way different ratings for different users can "
 "be stored in the files. Please specify the e-mail you want to use to save "
 "your ratings."
-msgstr "פיקארד ‮שומר את הדרוג בצרוף כתובת דוא\"ל המשמש לזיהוי המשתמש שביצע את 
הדרוג. בדרך זו, נשמרים  בקבצים, דרוגים שונים עבור משתמשים שונים. נא ספק כתובת 
דוא\"ל לשמירת הדרוגים שלך."
+msgstr "פיקארד ‮שומר את הדרוג בצרוף כתובת דוא\"ל המשמש, לזיהוי המשתמש שביצע את 
הדרוג. בדרך זו, נשמרים דרוגים שונים עבור משתמשים שונים  בקבצים. נא לספק כתובת 
דוא\"ל לשמירת הדרוגים שלכם."
 
 #: picard/ui/ui_options_ratings.py:47
 msgid "E-mail:"
@@ -4655,7 +4655,7 @@
 
 #: picard/ui/ui_options_ratings.py:48
 msgid "Submit ratings to MusicBrainz"
-msgstr "שגור דרוג ל מוזיקבריינז"
+msgstr "שגור דרוג למוזיקבריינז"
 
 #: picard/ui/ui_options_releases.py:110
 msgid "Preferred release types"
@@ -5082,7 +5082,7 @@
 #: picard/ui/options/general.py:110
 #, python-format
 msgid "Logged in as <b>%s</b>."
-msgstr "מחובר כ <b>%s</b>."
+msgstr "התחברות בשם <b>%s</b>."
 
 #: picard/ui/options/genres.py:41
 msgid ""
@@ -5585,7 +5585,7 @@
 "There is no update currently available for your subscribed update level: 
{update_level}\n"
 "\n"
 "Your version: {picard_old_version}\n"
-msgstr "לא נמצאו עדכונים זמינים לרמת מנוי העדכונים שלך: 
{update_level}\n\nהגרסה שלך: {picard_old_version}\n"
+msgstr "לא נמצאו עדכונים זמינים לרמת מנוי העדכונים שכם: 
{update_level}\n\nהגרסה שלכם: {picard_old_version}\n"
 
 #: picard/util/tags.py:34
 msgid "AcoustID Fingerprint"
@@ -5817,7 +5817,7 @@
 
 #: picard/util/tags.py:103
 msgid "Remixer"
-msgstr "רמיקסר"
+msgstr "עריכה מחדש"
 
 #: picard/util/tags.py:104
 msgid "ReplayGain Album Gain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/po/it.po 
new/picard-release-2.5.1/po/it.po
--- old/picard-release-2.5/po/it.po     2020-10-22 16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/po/it.po   2020-10-28 20:32:00.000000000 +0100
@@ -14,8 +14,8 @@
 "Project-Id-Version: MusicBrainz\n"
 "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 "POT-Creation-Date: 2020-10-18 16:07+0200\n"
-"PO-Revision-Date: 2020-10-20 15:03+0000\n"
-"Last-Translator: Philipp Wolfer <[email protected]>\n"
+"PO-Revision-Date: 2020-10-22 21:48+0000\n"
+"Last-Translator: Luca Salini <[email protected]>\n"
 "Language-Team: Italian 
(http://www.transifex.com/musicbrainz/musicbrainz/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -3808,11 +3808,11 @@
 
 #: picard/ui/mainwindow.py:601 picard/ui/options/interface.py:126
 msgid "Parse File Names..."
-msgstr ""
+msgstr "Analizza nomi file..."
 
 #: picard/ui/mainwindow.py:602
 msgid "Set tags based on the file names"
-msgstr ""
+msgstr "Imposta tag in base al nome dei file"
 
 #: picard/ui/mainwindow.py:603
 msgid "Ctrl+Shift+T"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/picard-release-2.5/requirements.txt 
new/picard-release-2.5.1/requirements.txt
--- old/picard-release-2.5/requirements.txt     2020-10-22 16:00:04.000000000 
+0200
+++ new/picard-release-2.5.1/requirements.txt   2020-10-28 20:32:00.000000000 
+0100
@@ -2,4 +2,6 @@
 discid
 markdown
 mutagen>=1.37
+pyobjc-core; sys_platform == 'darwin'
+pyobjc-framework-Cocoa; sys_platform == 'darwin'
 PyQt5>=5.7.1
Binary files old/picard-release-2.5/scripts/package/appledev.p12.enc and 
new/picard-release-2.5.1/scripts/package/appledev.p12.enc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/picard-release-2.5/scripts/package/macos-package-app.sh 
new/picard-release-2.5.1/scripts/package/macos-package-app.sh
--- old/picard-release-2.5/scripts/package/macos-package-app.sh 2020-10-22 
16:00:04.000000000 +0200
+++ new/picard-release-2.5.1/scripts/package/macos-package-app.sh       
2020-10-28 20:32:00.000000000 +0100
@@ -21,21 +21,17 @@
 CODESIGN=0
 NOTARIZE=0
 KEYCHAIN_PATH=picard.keychain
-KEYCHAIN_PASSWORD=picard
-CERTIFICATE_NAME="Developer ID Application: MetaBrainz Foundation Inc."
+KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
+CERTIFICATE_NAME="MetaBrainz Foundation Inc."
 CERTIFICATE_FILE=scripts/package/appledev.p12
 
-if [ -n "$encrypted_be5fb2212036_key" ] && [ -n "$encrypted_be5fb2212036_iv" 
]; then
-    openssl aes-256-cbc -K "$encrypted_be5fb2212036_key" -iv 
"$encrypted_be5fb2212036_iv" -in scripts/package/appledev.p12.enc -out 
$CERTIFICATE_FILE -d
-fi
-
-if [ -f scripts/package/appledev.p12 ] && [ -n "$appledev_p12_password" ]; then
+if [ -f $CERTIFICATE_FILE ] && [ -n "$CODESIGN_MACOS_P12_PASSWORD" ]; then
     security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
     security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
     security set-keychain-settings $KEYCHAIN_PATH  # Ensure keychain stays 
unlocked
     security list-keychains -d user -s $KEYCHAIN_PATH
     security default-keychain -s $KEYCHAIN_PATH
-    security import $CERTIFICATE_FILE -k $KEYCHAIN_PATH -P 
"$appledev_p12_password" -T /usr/bin/codesign
+    security import $CERTIFICATE_FILE -k $KEYCHAIN_PATH -P 
"$CODESIGN_MACOS_P12_PASSWORD" -T /usr/bin/codesign
     # The line below is necessary when building on Sierra.
     # See https://stackoverflow.com/q/39868578
     security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k 
$KEYCHAIN_PASSWORD $KEYCHAIN_PATH


Reply via email to