From a3c00e607b07746021d519d7ebd8c9633f9a7909 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 9 Jan 2024 18:08:40 +0100 Subject: [PATCH 01/68] README: Update sponsoring info --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 234fa715..d75d76ff 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,9 @@ Resources: ### :moneybag: Sponsoring The program is free software, released under GPL. If you like this program and can make use of it, consider sponsoring or donating to help fund the project. -There are currently 3 options for sponsoring: +There are currently 4 options for sponsoring: -1. [GitHub Sponsors](https://github.com/sponsors/jonaski) +1. [GitHub](https://github.com/sponsors/jonaski) 2. [Patreon](https://www.patreon.com/jonaskvinge) 3. [Ko-fi](https://ko-fi.com/jonaskvinge) 4. [PayPal](https://paypal.me/jonaskvinge) @@ -65,7 +65,7 @@ Funding developers is a way to contribute to open source projects you appreciate It has so far been tested to work on Linux, OpenBSD, FreeBSD, macOS and Windows. -**macOS releases are currently limited to sponsors. This is because macOS releases require a developer account, Apple hardware and maintaining all libraries strawberry depends on. If you are sponsoring strawberry, e-mail support@strawberrymusicplayer.org for access to downloads.** +**macOS releases are currently limited to sponsors. This is because Strawberry mainly has one contributor/developer and supporting macOS requires Apple hardware, building libraries Strawberry depends and a Apple developer account for signing releases. If you are sponsoring strawberry through Patreon, releases are available directly on Patreon, if you are sponsoring through GitHub, Ko-fi or Paypal, please e-mail support@strawberrymusicplayer.org for access to downloads.** ### :heavy_exclamation_mark: Requirements From 8d1a0071b654d5472f5f379fb4fcceb5227d2398 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 11 Jan 2024 16:40:12 +0100 Subject: [PATCH 02/68] Playlist: Use effective original year for sorting Fixes #1349 --- src/playlist/playlist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index d7a908bc..bbe518c7 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -1303,7 +1303,7 @@ bool Playlist::CompareItems(const int column, const Qt::SortOrder order, Playlis case Column_Track: cmp(track); case Column_Disc: cmp(disc); case Column_Year: cmp(year); - case Column_OriginalYear: cmp(originalyear); + case Column_OriginalYear: cmp(effective_originalyear); case Column_Genre: strcmp(genre); case Column_AlbumArtist: strcmp(playlist_albumartist_sortable); case Column_Composer: strcmp(composer); From a4b7766947f3432c60230a190005a6bc73eadd22 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 11 Jan 2024 17:03:00 +0100 Subject: [PATCH 03/68] DeviceManager: Add nullptr check for connected device Possible fix for #1313 --- src/device/devicemanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/devicemanager.cpp b/src/device/devicemanager.cpp index 592c520e..1269f646 100644 --- a/src/device/devicemanager.cpp +++ b/src/device/devicemanager.cpp @@ -830,7 +830,7 @@ void DeviceManager::DeviceTaskStarted(const int id) { for (int i = 0; i < devices_.count(); ++i) { DeviceInfo *info = devices_[i]; - if (&*info->device_ == device) { + if (info->device_ && &*info->device_ == device) { QModelIndex index = ItemToIndex(info); if (!index.isValid()) continue; active_tasks_[id] = index; From 20e550bc7dda1e3cfb0c3e06f985807fb40db321 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 11 Jan 2024 17:40:09 +0100 Subject: [PATCH 04/68] Update Changelog --- Changelog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Changelog b/Changelog index 1c07ecd7..b06e6916 100644 --- a/Changelog +++ b/Changelog @@ -2,6 +2,19 @@ Strawberry Music Player ======================= ChangeLog +Unreleased: + + Bugfixes: + * Fixed possible duplication of song entries after organizing (#1341). + * Fixed possible crash when connecting devices (#1313). + * Fixed playlist sorting of original year (#1349). + * (macOS) Fixed crash when adding collection directory (QTBUG-120469) (#1350). + + Enhancements: + * Treat all stream errors as non-fatal (#1347). + * Require KDSingleApplication 1.1.0. + * Fix logging of restored unavailable songs. + Version 1.0.22 (2023.12.09): Bugfixes: From b6c9ef4a15cef73b3637f520311f5e79b335ae80 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 11 Jan 2024 20:44:55 +0100 Subject: [PATCH 05/68] Release 1.0.23 --- Changelog | 2 +- cmake/Version.cmake | 4 ++-- dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Changelog b/Changelog index b06e6916..a3a7ca41 100644 --- a/Changelog +++ b/Changelog @@ -2,7 +2,7 @@ Strawberry Music Player ======================= ChangeLog -Unreleased: +Version 1.0.23 (2024.01.11): Bugfixes: * Fixed possible duplication of song entries after organizing (#1341). diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 39072881..6c536808 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -1,9 +1,9 @@ set(STRAWBERRY_VERSION_MAJOR 1) set(STRAWBERRY_VERSION_MINOR 0) -set(STRAWBERRY_VERSION_PATCH 22) +set(STRAWBERRY_VERSION_PATCH 23) #set(STRAWBERRY_VERSION_PRERELEASE rc1) -set(INCLUDE_GIT_REVISION ON) +set(INCLUDE_GIT_REVISION OFF) set(majorminorpatch "${STRAWBERRY_VERSION_MAJOR}.${STRAWBERRY_VERSION_MINOR}.${STRAWBERRY_VERSION_PATCH}") diff --git a/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml b/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml index b17cb0ce..10407180 100644 --- a/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml +++ b/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml @@ -50,6 +50,7 @@ eclipseo@fedoraproject.org + From 1a7194b3a9d7c60a0a08e6402443fa516da1f4c3 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 11 Jan 2024 22:32:36 +0100 Subject: [PATCH 06/68] Turn on git revision --- cmake/Version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 6c536808..76fd373b 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -3,7 +3,7 @@ set(STRAWBERRY_VERSION_MINOR 0) set(STRAWBERRY_VERSION_PATCH 23) #set(STRAWBERRY_VERSION_PRERELEASE rc1) -set(INCLUDE_GIT_REVISION OFF) +set(INCLUDE_GIT_REVISION ON) set(majorminorpatch "${STRAWBERRY_VERSION_MAJOR}.${STRAWBERRY_VERSION_MINOR}.${STRAWBERRY_VERSION_PATCH}") From 6a459682cacfd52f4d52b3af6c65b180ae7c934d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 19 Jan 2024 22:37:14 +0100 Subject: [PATCH 07/68] Playlist: Check for valid index Fixes #1359 --- src/playlist/playlist.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index bbe518c7..54837bd2 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -269,6 +269,10 @@ bool Playlist::set_column_value(Song &song, Playlist::Column column, const QVari QVariant Playlist::data(const QModelIndex &idx, int role) const { + if (!idx.isValid()) { + return QVariant(); + } + switch (role) { case Role_IsCurrent: return current_item_index_.isValid() && idx.row() == current_item_index_.row(); From a98c2091019d9e8005dfa33db60cc502dcbae401 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 19 Jan 2024 23:03:37 +0100 Subject: [PATCH 08/68] AutoExpandingTreeView: Remove doubleClicked on enter --- src/widgets/autoexpandingtreeview.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/widgets/autoexpandingtreeview.cpp b/src/widgets/autoexpandingtreeview.cpp index ba7c0281..5e56410e 100644 --- a/src/widgets/autoexpandingtreeview.cpp +++ b/src/widgets/autoexpandingtreeview.cpp @@ -155,16 +155,7 @@ void AutoExpandingTreeView::mouseDoubleClickEvent(QMouseEvent *event) { void AutoExpandingTreeView::keyPressEvent(QKeyEvent *e) { - QModelIndex idx = currentIndex(); - switch (e->key()) { - case Qt::Key_Enter: - case Qt::Key_Return: - if (currentIndex().isValid()) - emit doubleClicked(currentIndex()); - e->accept(); - break; - case Qt::Key_Backspace: case Qt::Key_Escape: emit FocusOnFilterSignal(e); @@ -173,6 +164,7 @@ void AutoExpandingTreeView::keyPressEvent(QKeyEvent *e) { case Qt::Key_Left: // Set focus on the root of the current branch + const QModelIndex idx = currentIndex(); if (idx.isValid() && idx.parent() != rootIndex() && (!isExpanded(idx) || model()->rowCount(idx) == 0)) { setCurrentIndex(idx.parent()); setFocus(); From f901f802bb05d184ce3bb40531893b09f0f136c2 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 19 Jan 2024 23:04:03 +0100 Subject: [PATCH 09/68] CollectionView: Implement add to playlist with enter Fixes #1360 --- src/collection/collectionview.cpp | 16 ++++++++++++++++ src/collection/collectionview.h | 1 + 2 files changed, 17 insertions(+) diff --git a/src/collection/collectionview.cpp b/src/collection/collectionview.cpp index 5fd72e0d..34a955ac 100644 --- a/src/collection/collectionview.cpp +++ b/src/collection/collectionview.cpp @@ -343,6 +343,22 @@ void CollectionView::mouseReleaseEvent(QMouseEvent *e) { } +void CollectionView::keyPressEvent(QKeyEvent *e) { + + switch (e->key()) { + case Qt::Key_Enter: + case Qt::Key_Return: + if (currentIndex().isValid()) { + AddToPlaylist(); + } + e->accept(); + break; + } + + AutoExpandingTreeView::keyPressEvent(e); + +} + void CollectionView::contextMenuEvent(QContextMenuEvent *e) { if (!context_menu_) { diff --git a/src/collection/collectionview.h b/src/collection/collectionview.h index e2c716ee..60d6193a 100644 --- a/src/collection/collectionview.h +++ b/src/collection/collectionview.h @@ -93,6 +93,7 @@ class CollectionView : public AutoExpandingTreeView { protected: // QWidget void paintEvent(QPaintEvent *event) override; + void keyPressEvent(QKeyEvent *e) override; void mouseReleaseEvent(QMouseEvent *e) override; void contextMenuEvent(QContextMenuEvent *e) override; From 11061bdd07b05f60c48ab4331cd19d977e83523f Mon Sep 17 00:00:00 2001 From: William Andrea Date: Tue, 9 Jan 2024 17:54:51 -0500 Subject: [PATCH 10/68] CONTRIBUTING: Clarify "Commit messages" section. Specifically: - Clarify what "class" is referring to - Use an actual example, which requires moving out two bits of explanation --- CONTRIBUTING.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 021e227e..b9f0425d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,24 +48,27 @@ small as possible. ### Commit messages -The first line should start with "Class:", which referer to the class -that is changed. Don't use a trailing period after the first line. -If this change affects more than one class, omit the class and write a +The first line should start with the name of the class that is changed +followed by a colon then a short explanation of the commit. +Don't use a trailing period after the first line. +If this change affects more than one class, omit the class name and write a more general message. + You only need to include a main description (body) for larger changes where the one line is not enough to describe everything. The main description starts after two newlines, it is normal prose and should use normal punctuation and capital letters where appropriate. +It should explain exactly what's changed, why it's changed, +and what bugs were fixed. An example of the expected format for git commit messages is as follows: ``` -class: Short explanation of the commit +StretchHeaderView: Set default section size -Longer explanation explaining exactly what's changed, why it's changed, -and what bugs were fixed. +As of Qt 6.6.1, style changes are resetting the column sizes. To prevent this, we set a default section size. -Fixes #1234 +Fixes #1328 ``` From f86c3cfd91efb5f5a6bb53bfefd578bd12d3873a Mon Sep 17 00:00:00 2001 From: Enrique Garcia Date: Mon, 15 Jan 2024 23:56:26 +0100 Subject: [PATCH 11/68] SubsonicSettingsPage: Add recommended to MD5 authentication --- src/settings/subsonicsettingspage.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/subsonicsettingspage.ui b/src/settings/subsonicsettingspage.ui index bceb637f..0b3e868d 100644 --- a/src/settings/subsonicsettingspage.ui +++ b/src/settings/subsonicsettingspage.ui @@ -124,7 +124,7 @@ - MD5 token + MD5 token (Recommended) From d24af2f4db65f3afcb32fd5352fb584867032f9d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 22 Jan 2024 00:50:44 +0100 Subject: [PATCH 12/68] nsi: Add adaptivedemux2 and mpeg demux/mux plugins --- .github/workflows/build.yml | 7 ++++++- dist/windows/strawberry.nsi.in | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 780b3329..fdd2db6a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1111,7 +1111,7 @@ jobs: - name: Copy gstreamer plugins working-directory: build - run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/gstreamer-1.0/{libgstaes.dll,libgstaiff.dll,libgstapetag.dll,libgstapp.dll,libgstasf.dll,libgstasfmux.dll,libgstaudioconvert.dll,libgstaudiofx.dll,libgstaudiomixer.dll,libgstaudioparsers.dll,libgstaudiorate.dll,libgstaudioresample.dll,libgstaudiotestsrc.dll,libgstautodetect.dll,libgstbs2b.dll,libgstcoreelements.dll,libgstdash.dll,libgstdirectsound.dll,libgstequalizer.dll,libgstfaac.dll,libgstfaad.dll,libgstfdkaac.dll,libgstflac.dll,libgstgio.dll,libgstgme.dll,libgsthls.dll,libgsticydemux.dll,libgstid3demux.dll,libgstid3tag.dll,libgstisomp4.dll,libgstlame.dll,libgstlibav.dll,libgstmpg123.dll,libgstmusepack.dll,libgstogg.dll,libgstopenmpt.dll,libgstopus.dll,libgstopusparse.dll,libgstpbtypes.dll,libgstplayback.dll,libgstreplaygain.dll,libgstrtp.dll,libgstrtsp.dll,libgstsoup.dll,libgstspectrum.dll,libgstspeex.dll,libgsttaglib.dll,libgsttcp.dll,libgsttwolame.dll,libgsttypefindfunctions.dll,libgstudp.dll,libgstvolume.dll,libgstvorbis.dll,libgstwasapi.dll,libgstwavenc.dll,libgstwavpack.dll,libgstwavparse.dll,libgstxingmux.dll} ${GITHUB_WORKSPACE}/build/gstreamer-plugins/ + run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/gstreamer-1.0/{libgstadaptivedemux2.dll,libgstaes.dll,libgstaiff.dll,libgstapetag.dll,libgstapp.dll,libgstasf.dll,libgstasfmux.dll,libgstaudioconvert.dll,libgstaudiofx.dll,libgstaudiomixer.dll,libgstaudioparsers.dll,libgstaudiorate.dll,libgstaudioresample.dll,libgstaudiotestsrc.dll,libgstautodetect.dll,libgstbs2b.dll,libgstcoreelements.dll,libgstdash.dll,libgstdirectsound.dll,libgstequalizer.dll,libgstfaac.dll,libgstfaad.dll,libgstfdkaac.dll,libgstflac.dll,libgstgio.dll,libgstgme.dll,libgsthls.dll,libgsticydemux.dll,libgstid3demux.dll,libgstid3tag.dll,libgstisomp4.dll,libgstlame.dll,libgstmpegpsdemux.dll,libgstmpegpsmux.dll,libgstmpegtsdemux.dll,libgstmpegtsmux.dll,libgstlibav.dll,libgstmpg123.dll,libgstmusepack.dll,libgstogg.dll,libgstopenmpt.dll,libgstopus.dll,libgstopusparse.dll,libgstpbtypes.dll,libgstplayback.dll,libgstreplaygain.dll,libgstrtp.dll,libgstrtsp.dll,libgstsoup.dll,libgstspectrum.dll,libgstspeex.dll,libgsttaglib.dll,libgsttcp.dll,libgsttwolame.dll,libgsttypefindfunctions.dll,libgstudp.dll,libgstvolume.dll,libgstvorbis.dll,libgstwasapi.dll,libgstwavenc.dll,libgstwavpack.dll,libgstwavparse.dll,libgstxingmux.dll} ${GITHUB_WORKSPACE}/build/gstreamer-plugins/ - name: Copy extra binaries working-directory: build @@ -1418,6 +1418,7 @@ jobs: shell: cmd working-directory: build run: | + copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstadaptivedemux2.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaes.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaiff.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstapetag.dll .\gstreamer-plugins\ @@ -1449,6 +1450,10 @@ jobs: copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstid3tag.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstisomp4.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstlame.dll .\gstreamer-plugins\ + copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegpsdemux.dll .\gstreamer-plugins\ + copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegpsmux.dll .\gstreamer-plugins\ + copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegtsdemux.dll .\gstreamer-plugins\ + copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegtsmux.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstlibav.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpg123.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmusepack.dll .\gstreamer-plugins\ diff --git a/dist/windows/strawberry.nsi.in b/dist/windows/strawberry.nsi.in index 1a5969c8..1247cb46 100644 --- a/dist/windows/strawberry.nsi.in +++ b/dist/windows/strawberry.nsi.in @@ -282,8 +282,10 @@ Section "Strawberry" Strawberry File "libgstaudio-1.0-0.dll" File "libgstbadaudio-1.0-0.dll" File "libgstbase-1.0-0.dll" + File "libgstcodecparsers-1.0-0.dll" File "libgstfft-1.0-0.dll" File "libgstisoff-1.0-0.dll" + File "libgstmpegts-1.0-0.dll" File "libgstnet-1.0-0.dll" File "libgstpbutils-1.0-0.dll" File "libgstreamer-1.0-0.dll" @@ -422,8 +424,10 @@ Section "Strawberry" Strawberry File "gstaudio-1.0-0.dll" File "gstbadaudio-1.0-0.dll" File "gstbase-1.0-0.dll" + File "gstcodecparsers-1.0-0.dll" File "gstfft-1.0-0.dll" File "gstisoff-1.0-0.dll" + File "gstmpegts-1.0-0.dll" File "gstnet-1.0-0.dll" File "gstpbutils-1.0-0.dll" File "gstreamer-1.0-0.dll" @@ -627,6 +631,7 @@ Section "Gstreamer plugins" gstreamer-plugins SetOutPath "$INSTDIR\gstreamer-plugins" !ifdef mingw + File "/oname=libgstadaptivedemux2.dll" "gstreamer-plugins\libgstadaptivedemux2.dll" File "/oname=libgstaes.dll" "gstreamer-plugins\libgstaes.dll" File "/oname=libgstaiff.dll" "gstreamer-plugins\libgstaiff.dll" File "/oname=libgstapetag.dll" "gstreamer-plugins\libgstapetag.dll" @@ -658,6 +663,10 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=libgstid3tag.dll" "gstreamer-plugins\libgstid3tag.dll" File "/oname=libgstisomp4.dll" "gstreamer-plugins\libgstisomp4.dll" File "/oname=libgstlame.dll" "gstreamer-plugins\libgstlame.dll" + File "/oname=libgstmpegpsdemux.dll" "gstreamer-plugins\libgstmpegpsdemux.dll" + File "/oname=libgstmpegpsmux.dll" "gstreamer-plugins\libgstmpegpsmux.dll" + File "/oname=libgstmpegtsdemux.dll" "gstreamer-plugins\libgstmpegtsdemux.dll" + File "/oname=libgstmpegtsmux.dll" "gstreamer-plugins\libgstmpegtsmux.dll" File "/oname=libgstlibav.dll" "gstreamer-plugins\libgstlibav.dll" File "/oname=libgstmpg123.dll" "gstreamer-plugins\libgstmpg123.dll" File "/oname=libgstmusepack.dll" "gstreamer-plugins\libgstmusepack.dll" @@ -688,6 +697,7 @@ Section "Gstreamer plugins" gstreamer-plugins !endif ; MinGW !ifdef msvc + File "/oname=gstadaptivedemux2.dll" "gstreamer-plugins\gstadaptivedemux2.dll" File "/oname=gstaes.dll" "gstreamer-plugins\gstaes.dll" File "/oname=gstaiff.dll" "gstreamer-plugins\gstaiff.dll" File "/oname=gstapetag.dll" "gstreamer-plugins\gstapetag.dll" @@ -719,6 +729,10 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=gstid3tag.dll" "gstreamer-plugins\gstid3tag.dll" File "/oname=gstisomp4.dll" "gstreamer-plugins\gstisomp4.dll" File "/oname=gstlame.dll" "gstreamer-plugins\gstlame.dll" + File "/oname=gstmpegpsdemux.dll" "gstreamer-plugins\gstmpegpsdemux.dll" + File "/oname=gstmpegpsmux.dll" "gstreamer-plugins\gstmpegpsmux.dll" + File "/oname=gstmpegtsdemux.dll" "gstreamer-plugins\gstmpegtsdemux.dll" + File "/oname=gstmpegtsmux.dll" "gstreamer-plugins\gstmpegtsmux.dll" File "/oname=gstlibav.dll" "gstreamer-plugins\gstlibav.dll" File "/oname=gstmpg123.dll" "gstreamer-plugins\gstmpg123.dll" File "/oname=gstmusepack.dll" "gstreamer-plugins\gstmusepack.dll" @@ -839,8 +853,10 @@ Section "Uninstall" Delete "$INSTDIR\libgstaudio-1.0-0.dll" Delete "$INSTDIR\libgstbadaudio-1.0-0.dll" Delete "$INSTDIR\libgstbase-1.0-0.dll" + Delete "$INSTDIR\libgstcodecparsers-1.0-0.dll" Delete "$INSTDIR\libgstfft-1.0-0.dll" Delete "$INSTDIR\libgstisoff-1.0-0.dll" + Delete "$INSTDIR\libgstmpegts-1.0-0.dll" Delete "$INSTDIR\libgstnet-1.0-0.dll" Delete "$INSTDIR\libgstpbutils-1.0-0.dll" Delete "$INSTDIR\libgstreamer-1.0-0.dll" @@ -979,8 +995,10 @@ Section "Uninstall" Delete "$INSTDIR\gstaudio-1.0-0.dll" Delete "$INSTDIR\gstbadaudio-1.0-0.dll" Delete "$INSTDIR\gstbase-1.0-0.dll" + Delete "$INSTDIR\gstcodecparsers-1.0-0.dll" Delete "$INSTDIR\gstfft-1.0-0.dll" Delete "$INSTDIR\gstisoff-1.0-0.dll" + Delete "$INSTDIR\gstmpegts-1.0-0.dll" Delete "$INSTDIR\gstnet-1.0-0.dll" Delete "$INSTDIR\gstpbutils-1.0-0.dll" Delete "$INSTDIR\gstreamer-1.0-0.dll" @@ -1116,6 +1134,7 @@ Section "Uninstall" ; MinGW GStreamer plugins !ifdef mingw + Delete "$INSTDIR\gstreamer-plugins\libgstadaptivedemux2.dll" Delete "$INSTDIR\gstreamer-plugins\libgstaes.dll" Delete "$INSTDIR\gstreamer-plugins\libgstaiff.dll" Delete "$INSTDIR\gstreamer-plugins\libgstapetag.dll" @@ -1147,6 +1166,10 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\libgstid3tag.dll" Delete "$INSTDIR\gstreamer-plugins\libgstisomp4.dll" Delete "$INSTDIR\gstreamer-plugins\libgstlame.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstmpegpsdemux.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstmpegpsmux.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstmpegtsdemux.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstmpegtsmux.dll" Delete "$INSTDIR\gstreamer-plugins\libgstlibav.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmpg123.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmusepack.dll" @@ -1179,6 +1202,7 @@ Section "Uninstall" ; MSVC GStreamer plugins !ifdef msvc + Delete "$INSTDIR\gstreamer-plugins\gstadaptivedemux2.dll" Delete "$INSTDIR\gstreamer-plugins\gstaes.dll" Delete "$INSTDIR\gstreamer-plugins\gstaiff.dll" Delete "$INSTDIR\gstreamer-plugins\gstapetag.dll" @@ -1210,6 +1234,10 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\gstid3tag.dll" Delete "$INSTDIR\gstreamer-plugins\gstisomp4.dll" Delete "$INSTDIR\gstreamer-plugins\gstlame.dll" + Delete "$INSTDIR\gstreamer-plugins\gstmpegpsdemux.dll" + Delete "$INSTDIR\gstreamer-plugins\gstmpegpsmux.dll" + Delete "$INSTDIR\gstreamer-plugins\gstmpegtsdemux.dll" + Delete "$INSTDIR\gstreamer-plugins\gstmpegtsmux.dll" Delete "$INSTDIR\gstreamer-plugins\gstlibav.dll" Delete "$INSTDIR\gstreamer-plugins\gstmpg123.dll" Delete "$INSTDIR\gstreamer-plugins\gstmusepack.dll" From 3ee796a66391b6f76552d63f551588b3a97cd67e Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 22 Jan 2024 19:26:21 +0100 Subject: [PATCH 13/68] macgstcopy: Add adaptivedemux2 and mpeg mux/demux --- dist/macos/macgstcopy.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dist/macos/macgstcopy.sh b/dist/macos/macgstcopy.sh index 8d163873..820a158a 100755 --- a/dist/macos/macgstcopy.sh +++ b/dist/macos/macgstcopy.sh @@ -62,6 +62,7 @@ cp -v -f "${GST_PLUGIN_SCANNER}" "${bundledir}/Contents/PlugIns/" || exit 1 install_name_tool -add_rpath "@loader_path/../Frameworks" "${bundledir}/Contents/PlugIns/$(basename ${GST_PLUGIN_SCANNER})" || exit 1 gst_plugins=" +libgstadaptivedemux2 libgstaes libgstaiff libgstapetag @@ -92,6 +93,10 @@ libgstid3demux libgstid3tag libgstisomp4 libgstlame +libgstmpegpsdemux +libgstmpegpsmux +libgstmpegtsdemux +libgstmpegtsmux libgstlibav libgstmpg123 libgstmusepack From 269f13de76be66dd9acbcf89cb9190bf4c62bd8e Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 24 Jan 2024 19:21:02 +0100 Subject: [PATCH 14/68] MtpLoader: Allow empty artist --- src/device/mtploader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/mtploader.cpp b/src/device/mtploader.cpp index 4cb30b87..64795d27 100644 --- a/src/device/mtploader.cpp +++ b/src/device/mtploader.cpp @@ -84,7 +84,7 @@ bool MtpLoader::TryLoad() { Song song(Song::Source::Device); song.InitFromMTP(track, url_.host()); - if (song.is_valid() && !song.artist().isEmpty() && !song.title().isEmpty()) { + if (song.is_valid() && !song.title().isEmpty()) { song.set_directory_id(1); songs << song; } From 226a6c50e08d84e444d1d2598cbe34e22d3319fa Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 24 Jan 2024 19:27:30 +0100 Subject: [PATCH 15/68] Add better error messages for device and organize Fixes #1364 --- src/core/deletefiles.cpp | 3 ++- src/core/filesystemmusicstorage.cpp | 15 ++++++++--- src/core/filesystemmusicstorage.h | 2 +- src/core/musicstorage.h | 6 ++--- src/device/cddadevice.h | 2 +- src/device/connecteddevice.cpp | 6 +++-- src/device/connecteddevice.h | 4 +-- src/device/gpoddevice.cpp | 40 +++++++++++++++++------------ src/device/gpoddevice.h | 8 +++--- src/device/mtpconnection.cpp | 39 ++++++++++++++++++++++++---- src/device/mtpconnection.h | 4 +++ src/device/mtpdevice.cpp | 21 ++++++++++----- src/device/mtpdevice.h | 6 ++--- src/device/mtploader.cpp | 7 ++++- src/organize/organize.cpp | 11 ++++++-- 15 files changed, 123 insertions(+), 51 deletions(-) diff --git a/src/core/deletefiles.cpp b/src/core/deletefiles.cpp index 1e94f228..3983098b 100644 --- a/src/core/deletefiles.cpp +++ b/src/core/deletefiles.cpp @@ -92,7 +92,8 @@ void DeleteFiles::ProcessSomeFiles() { if (progress_ >= songs_.count()) { task_manager_->SetTaskProgress(task_id_, progress_, songs_.count()); - storage_->FinishCopy(songs_with_errors_.isEmpty()); + QString error_text; + storage_->FinishCopy(songs_with_errors_.isEmpty(), error_text); task_manager_->SetTaskFinished(task_id_); diff --git a/src/core/filesystemmusicstorage.cpp b/src/core/filesystemmusicstorage.cpp index 52141fc0..f613420e 100644 --- a/src/core/filesystemmusicstorage.cpp +++ b/src/core/filesystemmusicstorage.cpp @@ -36,7 +36,7 @@ FilesystemMusicStorage::FilesystemMusicStorage(const Song::Source source, const QString &root, const std::optional collection_directory_id) : source_(source), root_(root), collection_directory_id_(collection_directory_id) {} -bool FilesystemMusicStorage::CopyToStorage(const CopyJob &job) { +bool FilesystemMusicStorage::CopyToStorage(const CopyJob &job, QString &error_text) { const QFileInfo src = QFileInfo(job.source_); const QFileInfo dest = QFileInfo(root_ + "/" + job.destination_); @@ -54,7 +54,8 @@ bool FilesystemMusicStorage::CopyToStorage(const CopyJob &job) { // Create directories as required QDir dir; if (!dir.mkpath(dest.absolutePath())) { - qLog(Warning) << "Failed to create directory" << dest.dir().absolutePath(); + error_text = QObject::tr("Failed to create directory %1.").arg(dest.dir().absolutePath()); + qLog(Error) << error_text; return false; } @@ -65,10 +66,12 @@ bool FilesystemMusicStorage::CopyToStorage(const CopyJob &job) { } // Copy or move - bool result(true); + bool result = true; if (job.remove_original_) { if (dest.exists() && !job.overwrite_) { result = false; + error_text = QObject::tr("Destination file %1 exists, but not allowed to overwrite.").arg(dest.absoluteFilePath()); + qLog(Error) << error_text; } else { result = QFile::rename(src.absoluteFilePath(), dest.absoluteFilePath()); @@ -86,9 +89,15 @@ bool FilesystemMusicStorage::CopyToStorage(const CopyJob &job) { else { if (dest.exists() && !job.overwrite_) { result = false; + error_text = QObject::tr("Destination file %1 exists, but not allowed to overwrite").arg(dest.absoluteFilePath()); + qLog(Error) << error_text; } else { result = QFile::copy(src.absoluteFilePath(), dest.absoluteFilePath()); + if (!result) { + error_text = QObject::tr("Could not copy file %1 to %2.").arg(src.absoluteFilePath(), dest.absoluteFilePath()); + qLog(Error) << error_text; + } } if ((!cover_dest.exists() || job.overwrite_) && !cover_src.filePath().isEmpty() && !cover_dest.filePath().isEmpty()) { QFile::copy(cover_src.absoluteFilePath(), cover_dest.absoluteFilePath()); diff --git a/src/core/filesystemmusicstorage.h b/src/core/filesystemmusicstorage.h index a4cfc29f..c57aceb1 100644 --- a/src/core/filesystemmusicstorage.h +++ b/src/core/filesystemmusicstorage.h @@ -39,7 +39,7 @@ class FilesystemMusicStorage : public virtual MusicStorage { QString LocalPath() const override { return root_; } std::optional collection_directory_id() const override { return collection_directory_id_; } - bool CopyToStorage(const CopyJob &job) override; + bool CopyToStorage(const CopyJob &job, QString &error_text) override; bool DeleteFromStorage(const DeleteJob &job) override; private: diff --git a/src/core/musicstorage.h b/src/core/musicstorage.h index bf90c1d0..3d7e6074 100644 --- a/src/core/musicstorage.h +++ b/src/core/musicstorage.h @@ -89,12 +89,12 @@ class MusicStorage { virtual bool GetSupportedFiletypes(QList *ret) { Q_UNUSED(ret); return true; } virtual bool StartCopy(QList *supported_types) { Q_UNUSED(supported_types); return true; } - virtual bool CopyToStorage(const CopyJob &job) = 0; - virtual void FinishCopy(bool success) { Q_UNUSED(success); } + virtual bool CopyToStorage(const CopyJob &job, QString &error_text) = 0; + virtual bool FinishCopy(bool success, QString &error_text) { Q_UNUSED(error_text); return success; } virtual void StartDelete() {} virtual bool DeleteFromStorage(const DeleteJob &job) = 0; - virtual void FinishDelete(bool success) { Q_UNUSED(success); } + virtual bool FinishDelete(bool success, QString &error_text) { Q_UNUSED(error_text); return success; } virtual void Eject() {} diff --git a/src/device/cddadevice.h b/src/device/cddadevice.h index 11d602ad..20d3296d 100644 --- a/src/device/cddadevice.h +++ b/src/device/cddadevice.h @@ -51,7 +51,7 @@ class CddaDevice : public ConnectedDevice { bool Init() override; void Refresh() override; - bool CopyToStorage(const MusicStorage::CopyJob&) override { return false; } + bool CopyToStorage(const CopyJob&, QString&) { return false; } bool DeleteFromStorage(const MusicStorage::DeleteJob&) override { return false; } static QStringList url_schemes() { return QStringList() << "cdda"; } diff --git a/src/device/connecteddevice.cpp b/src/device/connecteddevice.cpp index 9fdd9827..fb156bff 100644 --- a/src/device/connecteddevice.cpp +++ b/src/device/connecteddevice.cpp @@ -132,12 +132,14 @@ void ConnectedDevice::Eject() { } -void ConnectedDevice::FinishCopy(bool) { +bool ConnectedDevice::FinishCopy(bool success, QString&) { lister_->UpdateDeviceFreeSpace(unique_id_); + return success; } -void ConnectedDevice::FinishDelete(bool) { +bool ConnectedDevice::FinishDelete(bool success, QString&) { lister_->UpdateDeviceFreeSpace(unique_id_); + return success; } MusicStorage::TranscodeMode ConnectedDevice::GetTranscodeMode() const { diff --git a/src/device/connecteddevice.h b/src/device/connecteddevice.h index f3247282..bb5e5ae1 100644 --- a/src/device/connecteddevice.h +++ b/src/device/connecteddevice.h @@ -67,8 +67,8 @@ class ConnectedDevice : public QObject, public virtual MusicStorage, public enab QUrl url() const { return url_; } qint64 song_count() const { return song_count_; } - void FinishCopy(bool success) override; - void FinishDelete(bool success) override; + bool FinishCopy(bool success, QString &error_text) override; + bool FinishDelete(bool success, QString &error_text) override; void Eject() override; virtual void Close(); diff --git a/src/device/gpoddevice.cpp b/src/device/gpoddevice.cpp index ffe9c540..77741729 100644 --- a/src/device/gpoddevice.cpp +++ b/src/device/gpoddevice.cpp @@ -185,7 +185,7 @@ void GPodDevice::AddTrackToModel(Itdb_Track *track, const QString &prefix) { } -bool GPodDevice::CopyToStorage(const CopyJob &job) { +bool GPodDevice::CopyToStorage(const CopyJob &job, QString &error_text) { Q_ASSERT(db_); @@ -238,9 +238,10 @@ bool GPodDevice::CopyToStorage(const CopyJob &job) { GError *error = nullptr; itdb_cp_track_to_ipod(track, QDir::toNativeSeparators(job.source_).toLocal8Bit().constData(), &error); if (error) { - qLog(Error) << "Copying failed:" << error->message; - app_->AddError(QString::fromUtf8(error->message)); + error_text = tr("Could not copy %1 to %2: %3").arg(job.metadata_.url().toLocalFile(), QString::fromUtf8(error->message)); g_error_free(error); + qLog(Error) << error_text; + app_->AddError(error_text); // Need to remove the track from the db again itdb_track_remove(track); @@ -272,19 +273,24 @@ bool GPodDevice::CopyToStorage(const CopyJob &job) { } -bool GPodDevice::WriteDatabase() { +bool GPodDevice::WriteDatabase(QString &error_text) { // Write the itunes database GError *error = nullptr; - itdb_write(db_, &error); + const bool success = itdb_write(db_, &error); cover_files_.clear(); - if (error) { - qLog(Error) << "Writing database failed:" << error->message; - app_->AddError(QString::fromUtf8(error->message)); - g_error_free(error); - return false; + if (!success) { + if (error) { + error_text = tr("Writing database failed: %1").arg(error->message); + g_error_free(error); + } + else { + error_text = tr("Writing database failed."); + } + app_->AddError(error_text); } - else return true; + + return success; } @@ -307,11 +313,11 @@ void GPodDevice::Finish(const bool success) { } -void GPodDevice::FinishCopy(bool success) { +bool GPodDevice::FinishCopy(bool success, QString &error_text) { - if (success) success = WriteDatabase(); + if (success) success = WriteDatabase(error_text); Finish(success); - ConnectedDevice::FinishCopy(success); + return ConnectedDevice::FinishCopy(success, error_text); } @@ -378,11 +384,11 @@ bool GPodDevice::DeleteFromStorage(const DeleteJob &job) { } -void GPodDevice::FinishDelete(bool success) { +bool GPodDevice::FinishDelete(bool success, QString &error_text) { - if (success) success = WriteDatabase(); + if (success) success = WriteDatabase(error_text); Finish(success); - ConnectedDevice::FinishDelete(success); + return ConnectedDevice::FinishDelete(success, error_text); } diff --git a/src/device/gpoddevice.h b/src/device/gpoddevice.h index 493896c0..31783dec 100644 --- a/src/device/gpoddevice.h +++ b/src/device/gpoddevice.h @@ -64,12 +64,12 @@ class GPodDevice : public ConnectedDevice, public virtual MusicStorage { bool GetSupportedFiletypes(QList *ret) override; bool StartCopy(QList *supported_filetypes) override; - bool CopyToStorage(const CopyJob &job) override; - void FinishCopy(bool success) override; + bool CopyToStorage(const CopyJob &job, QString &error_text) override; + bool FinishCopy(bool success, QString &error_text) override; void StartDelete() override; bool DeleteFromStorage(const DeleteJob &job) override; - void FinishDelete(bool success) override; + bool FinishDelete(bool success, QString &error_text) override; protected slots: void LoadFinished(Itdb_iTunesDB *db, const bool success); @@ -83,7 +83,7 @@ class GPodDevice : public ConnectedDevice, public virtual MusicStorage { private: void Start(); void Finish(const bool success); - bool WriteDatabase(); + bool WriteDatabase(QString &error_text); protected: GPodLoader *loader_; diff --git a/src/device/mtpconnection.cpp b/src/device/mtpconnection.cpp index a8eee695..412f5484 100644 --- a/src/device/mtpconnection.cpp +++ b/src/device/mtpconnection.cpp @@ -54,7 +54,8 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent) device_num = url_query.queryItemValue("devnum").toUInt(); } else { - qLog(Warning) << "Invalid MTP device:" << hostname; + error_text_ = tr("Invalid MTP device: %1").arg(hostname); + qLog(Error) << error_text_; return; } @@ -70,15 +71,20 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent) raw_device->devnum = device_num; device_ = LIBMTP_Open_Raw_Device(raw_device); // NOLINT(clang-analyzer-unix.Malloc) + if (!device_) { + error_text_ = tr("Could not open MTP device."); + qLog(Error) << error_text_; + } return; } // Get a list of devices from libmtp and figure out which one is ours int count = 0; LIBMTP_raw_device_t *raw_devices = nullptr; - LIBMTP_error_number_t err = LIBMTP_Detect_Raw_Devices(&raw_devices, &count); - if (err != LIBMTP_ERROR_NONE) { - qLog(Warning) << "MTP error:" << err; + LIBMTP_error_number_t error_number = LIBMTP_Detect_Raw_Devices(&raw_devices, &count); + if (error_number != LIBMTP_ERROR_NONE) { + error_text_ = tr("MTP error: %1").arg(ErrorString(error_number)); + qLog(Error) << error_text_; return; } @@ -91,13 +97,18 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent) } if (!raw_device) { - qLog(Warning) << "MTP device not found"; + error_text_ = tr("MTP device not found."); + qLog(Error) << error_text_; free(raw_devices); return; } // Connect to the device device_ = LIBMTP_Open_Raw_Device(raw_device); + if (!device_) { + error_text_ = tr("Could not open MTP device."); + qLog(Error) << error_text_; + } free(raw_devices); @@ -107,6 +118,24 @@ MtpConnection::~MtpConnection() { if (device_) LIBMTP_Release_Device(device_); } +QString MtpConnection::ErrorString(const LIBMTP_error_number_t error_number) { + + switch(error_number) { + case LIBMTP_ERROR_NO_DEVICE_ATTACHED: + return "No Devices have been found."; + case LIBMTP_ERROR_CONNECTING: + return "There has been an error connecting."; + case LIBMTP_ERROR_MEMORY_ALLOCATION: + return "Memory Allocation Error."; + case LIBMTP_ERROR_GENERAL: + default: + return "Unknown error, please report this to the libmtp developers."; + case LIBMTP_ERROR_NONE: + return "Successfully connected."; + } + +} + bool MtpConnection::GetSupportedFiletypes(QList *ret) { if (!device_) return false; diff --git a/src/device/mtpconnection.h b/src/device/mtpconnection.h index 2b1a0cfe..ffde0759 100644 --- a/src/device/mtpconnection.h +++ b/src/device/mtpconnection.h @@ -45,13 +45,17 @@ class MtpConnection : public QObject, public enable_shared_from_this *ret); + static QString ErrorString(const LIBMTP_error_number_t error_number); + private: Q_DISABLE_COPY(MtpConnection) LIBMTP_mtpdevice_t *device_; + QString error_text_; }; #endif // MTPCONNECTION_H diff --git a/src/device/mtpdevice.cpp b/src/device/mtpdevice.cpp index bc6f72c3..15b05d6d 100644 --- a/src/device/mtpdevice.cpp +++ b/src/device/mtpdevice.cpp @@ -143,7 +143,8 @@ bool MtpDevice::StartCopy(QList *supported_types) { // Did the caller want a list of supported types? if (supported_types) { if (!GetSupportedFiletypes(supported_types, connection_->device())) { - FinishCopy(false); + QString error_text; + FinishCopy(false, error_text); return false; } } @@ -161,7 +162,7 @@ static int ProgressCallback(uint64_t const sent, uint64_t const total, void cons } -bool MtpDevice::CopyToStorage(const CopyJob &job) { +bool MtpDevice::CopyToStorage(const CopyJob &job, QString &error_text) { if (!connection_ || !connection_->is_valid()) return false; @@ -171,7 +172,15 @@ bool MtpDevice::CopyToStorage(const CopyJob &job) { // Send the file int ret = LIBMTP_Send_Track_From_File(connection_->device(), job.source_.toUtf8().constData(), &track, ProgressCallback, &job); - if (ret != 0) return false; + if (ret != 0) { + LIBMTP_error_struct *error = LIBMTP_Get_Errorstack(connection_->device()); + if (error) { + error_text = QString::fromUtf8(error->error_text); + qLog(Error) << error_text; + LIBMTP_Clear_Errorstack(connection_->device()); + } + return false; + } // Add it to our CollectionModel Song metadata_on_device(Song::Source::Device); @@ -190,7 +199,7 @@ bool MtpDevice::CopyToStorage(const CopyJob &job) { } -void MtpDevice::FinishCopy(const bool success) { +bool MtpDevice::FinishCopy(const bool success, QString &error_text) { if (success) { if (!songs_to_add_.isEmpty()) backend_->AddOrUpdateSongs(songs_to_add_); @@ -205,7 +214,7 @@ void MtpDevice::FinishCopy(const bool success) { db_busy_.unlock(); - ConnectedDevice::FinishCopy(success); + return ConnectedDevice::FinishCopy(success, error_text); } @@ -234,7 +243,7 @@ bool MtpDevice::DeleteFromStorage(const DeleteJob &job) { } -void MtpDevice::FinishDelete(const bool success) { FinishCopy(success); } +bool MtpDevice::FinishDelete(const bool success, QString &error_text) { return FinishCopy(success, error_text); } bool MtpDevice::GetSupportedFiletypes(QList *ret) { diff --git a/src/device/mtpdevice.h b/src/device/mtpdevice.h index d56f8925..8abad40b 100644 --- a/src/device/mtpdevice.h +++ b/src/device/mtpdevice.h @@ -63,12 +63,12 @@ class MtpDevice : public ConnectedDevice { int GetCapacity(); bool StartCopy(QList *supported_types) override; - bool CopyToStorage(const CopyJob &job) override; - void FinishCopy(const bool success) override; + bool CopyToStorage(const CopyJob &job, QString &error_text) override; + bool FinishCopy(const bool success, QString &error_text) override; void StartDelete() override; bool DeleteFromStorage(const DeleteJob &job) override; - void FinishDelete(const bool success) override; + bool FinishDelete(const bool success, QString &error_text) override; private slots: void LoadFinished(bool success, MtpConnection *connection); diff --git a/src/device/mtploader.cpp b/src/device/mtploader.cpp index 64795d27..514c66ef 100644 --- a/src/device/mtploader.cpp +++ b/src/device/mtploader.cpp @@ -68,11 +68,16 @@ bool MtpLoader::TryLoad() { connection_ = make_unique(url_); - if (!connection_ || !connection_->is_valid()) { + if (!connection_) { emit Error(tr("Error connecting MTP device %1").arg(url_.toString())); return false; } + if (!connection_->is_valid()) { + emit Error(tr("Error connecting MTP device %1: %2").arg(url_.toString(), connection_->error_text())); + return false; + } + // Load the list of songs on the device SongList songs; LIBMTP_track_t *tracks = LIBMTP_Get_Tracklisting_With_Callback(connection_->device(), nullptr, nullptr); diff --git a/src/organize/organize.cpp b/src/organize/organize.cpp index 9c99c915..73752b1f 100644 --- a/src/organize/organize.cpp +++ b/src/organize/organize.cpp @@ -146,7 +146,10 @@ void Organize::ProcessSomeFiles() { UpdateProgress(); - destination_->FinishCopy(files_with_errors_.isEmpty()); + QString error_text; + if (!destination_->FinishCopy(files_with_errors_.isEmpty(), error_text) && !error_text.isEmpty()) { + log_ << error_text; + } if (eject_after_) destination_->Eject(); task_manager_->SetTaskFinished(task_id_); @@ -250,7 +253,8 @@ void Organize::ProcessSomeFiles() { job.progress_ = std::bind(&Organize::SetSongProgress, this, std::placeholders::_1, !task.transcoded_filename_.isEmpty()); - if (destination_->CopyToStorage(job)) { + QString error_text; + if (destination_->CopyToStorage(job, error_text)) { if (job.remove_original_ && song.is_collection_song() && destination_->source() == Song::Source::Collection) { // Notify other aspects of system that song has been invalidated QString root = destination_->LocalPath(); @@ -260,6 +264,9 @@ void Organize::ProcessSomeFiles() { } else { files_with_errors_ << task.song_info_.song_.basefilename(); + if (!error_text.isEmpty()) { + log_ << error_text; + } } // Clean up the temporary transcoded file From a915e62e2c05127e49dffb2e050dcb50ee570337 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 24 Jan 2024 19:52:24 +0100 Subject: [PATCH 16/68] GPodDevice: Fix error message --- src/device/gpoddevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/gpoddevice.cpp b/src/device/gpoddevice.cpp index 77741729..87efc204 100644 --- a/src/device/gpoddevice.cpp +++ b/src/device/gpoddevice.cpp @@ -238,7 +238,7 @@ bool GPodDevice::CopyToStorage(const CopyJob &job, QString &error_text) { GError *error = nullptr; itdb_cp_track_to_ipod(track, QDir::toNativeSeparators(job.source_).toLocal8Bit().constData(), &error); if (error) { - error_text = tr("Could not copy %1 to %2: %3").arg(job.metadata_.url().toLocalFile(), QString::fromUtf8(error->message)); + error_text = tr("Could not copy %1 to %2: %3").arg(job.metadata_.url().toLocalFile(), url_.path(), QString::fromUtf8(error->message)); g_error_free(error); qLog(Error) << error_text; app_->AddError(error_text); From 920bb04b00f6454d50be5b8cbd6fdf5d56f74a46 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 24 Jan 2024 21:30:10 +0100 Subject: [PATCH 17/68] CMakeLists: Find TagLib using CMake --- CMakeLists.txt | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 98259455..07409145 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -266,25 +266,19 @@ if(X11_FOUND) endif(X11_FOUND) -option(USE_TAGLIB "Build with TagLib" OFF) +option(USE_TAGLIB "Build with TagLib" ON) option(USE_TAGPARSER "Build with TagParser" OFF) -if(NOT USE_TAGLIB AND NOT USE_TAGPARSER) - set(USE_TAGLIB ON) -endif() - # TAGLIB if(USE_TAGLIB) - pkg_check_modules(TAGLIB REQUIRED taglib>=1.11.1) - if(TAGLIB_FOUND) - find_path(HAVE_TAGLIB_DSFFILE_H taglib/dsffile.h) - find_path(HAVE_TAGLIB_DSDIFFFILE_H taglib/dsdifffile.h) - if(HAVE_TAGLIB_DSFFILE_H) - set(HAVE_TAGLIB_DSFFILE ON) - endif(HAVE_TAGLIB_DSFFILE_H) - if(HAVE_TAGLIB_DSDIFFFILE_H) - set(HAVE_TAGLIB_DSDIFFFILE ON) - endif(HAVE_TAGLIB_DSDIFFFILE_H) + find_package(TagLib 2.0) + if(TARGET TagLib::TagLib) + set(TAGLIB_FOUND ON) + set(TAGLIB_LIBRARIES TagLib::TagLib) + set(HAVE_TAGLIB_DSFFILE ON) + set(HAVE_TAGLIB_DSDIFFFILE ON) + else() + pkg_check_modules(TAGLIB REQUIRED taglib>=1.11.1) endif() endif() From 2d88fcb249fe1a74a035b967a440481d9898a385 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 24 Jan 2024 23:05:46 +0100 Subject: [PATCH 18/68] CI: Add Ubuntu Noble --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fdd2db6a..5024e804 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -585,7 +585,7 @@ jobs: strategy: fail-fast: false matrix: - ubuntu_version: [ 'focal', 'jammy', 'lunar', 'mantic' ] + ubuntu_version: [ 'focal', 'jammy', 'lunar', 'mantic', 'noble' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: @@ -686,7 +686,7 @@ jobs: strategy: fail-fast: false matrix: - ubuntu_version: [ 'focal', 'jammy', 'lunar', 'mantic' ] + ubuntu_version: [ 'focal', 'jammy', 'lunar', 'mantic', 'noble' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: From fa057ee9d3ccbf4c816837d0e1de3fe201e9ecc1 Mon Sep 17 00:00:00 2001 From: Jacob Henner Date: Sat, 30 Dec 2023 16:12:26 -0500 Subject: [PATCH 19/68] CollectionView: Add "search for this" Add selection search in the collection view, to allow users to quickly search for similarly-named songs, artists, albums, etc. --- src/collection/collectionview.cpp | 98 +++++++++++++++++++++++++++++++ src/collection/collectionview.h | 3 + 2 files changed, 101 insertions(+) diff --git a/src/collection/collectionview.cpp b/src/collection/collectionview.cpp index 34a955ac..b907330b 100644 --- a/src/collection/collectionview.cpp +++ b/src/collection/collectionview.cpp @@ -371,6 +371,10 @@ void CollectionView::contextMenuEvent(QContextMenuEvent *e) { action_add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue track"), this, &CollectionView::AddToPlaylistEnqueue); action_add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue to play next"), this, &CollectionView::AddToPlaylistEnqueueNext); + context_menu_->addSeparator(); + + action_search_for_this_ = context_menu_->addAction(IconLoader::Load("edit-find"), tr("Search for this"), this, &CollectionView::SearchForThis); + context_menu_->addSeparator(); action_organize_ = context_menu_->addAction(IconLoader::Load("edit-copy"), tr("Organize files..."), this, &CollectionView::Organize); #ifndef Q_OS_WIN @@ -561,6 +565,100 @@ void CollectionView::OpenInNewPlaylist() { } +void CollectionView::SearchForThis() { + + QModelIndex current = currentIndex(); + QVariant type = model()->data(current, CollectionModel::Role_Type); + if (!type.isValid() || (type.toInt() != CollectionItem::Type_Song && type.toInt() != CollectionItem::Type_Container && type.toInt() != CollectionItem::Type_Divider)) { + return; + } + QString search; + QModelIndex index = qobject_cast(model())->mapToSource(current); + + switch (type.toInt()) { + case CollectionItem::Type_Song:{ + SongList songs = app_->collection_model()->GetChildSongs(index); + if (!songs.isEmpty()) { + last_selected_song_ = songs.last(); + } + search = QString("title:%1").arg(last_selected_song_.title()); + break; + } + + case CollectionItem::Type_Divider:{ + break; + } + + case CollectionItem::Type_Container:{ + CollectionItem *item = app_->collection_model()->IndexToItem(index); + + int container_level = item->container_level; + CollectionModel::GroupBy container_group_by = app_->collection_model()->GetGroupBy()[container_level]; + + switch (container_group_by) { + case CollectionModel::GroupBy::AlbumArtist: + search = QString("albumartist:%1").arg(item->metadata.effective_albumartist()); + break; + case CollectionModel::GroupBy::Artist: + search = QString("artist:%1").arg(item->metadata.artist()); + break; + case CollectionModel::GroupBy::Album: + search = QString("album:%1").arg(item->metadata.album()); + break; + case CollectionModel::GroupBy::AlbumDisc: + search = QString("album:%1").arg(item->metadata.album()); + break; + case CollectionModel::GroupBy::YearAlbum: + case CollectionModel::GroupBy::YearAlbumDisc:{ + search = QString("year:%1 album:%2").arg(item->metadata.year()).arg(item->metadata.album()); + break; + } + case CollectionModel::GroupBy::OriginalYearAlbum: + case CollectionModel::GroupBy::OriginalYearAlbumDisc:{ + search = QString("year:%1 album:%2").arg(item->metadata.effective_originalyear()).arg(item->metadata.album()); + break; + } + case CollectionModel::GroupBy::Year: + search = QString("year:%1").arg(item->metadata.year()); + break; + case CollectionModel::GroupBy::OriginalYear: + search = QString("year:%1").arg(item->metadata.effective_originalyear()); + break; + case CollectionModel::GroupBy::Genre: + search = QString("genre:%1").arg(item->metadata.genre()); + break; + case CollectionModel::GroupBy::Composer: + search = QString("composer:%1").arg(item->metadata.composer()); + break; + case CollectionModel::GroupBy::Performer: + search = QString("performer:%1").arg(item->metadata.performer()); + break; + case CollectionModel::GroupBy::Grouping: + search = QString("grouping:%1").arg(item->metadata.grouping()); + break; + case CollectionModel::GroupBy::Samplerate: + search = QString("samplerate:%1").arg(item->metadata.samplerate()); + break; + case CollectionModel::GroupBy::Bitdepth: + search = QString("bitdepth:%1").arg(item->metadata.bitdepth()); + break; + case CollectionModel::GroupBy::Bitrate: + search = QString("bitrate:%1").arg(item->metadata.bitrate()); + break; + default: + search = model()->data(current, Qt::DisplayRole).toString(); + } + break; + } + + default: + return; + } + + filter_->ShowInCollection(search); + +} + void CollectionView::keyboardSearch(const QString &search) { is_in_keyboard_search_ = true; diff --git a/src/collection/collectionview.h b/src/collection/collectionview.h index 60d6193a..5f1a5a93 100644 --- a/src/collection/collectionview.h +++ b/src/collection/collectionview.h @@ -103,6 +103,7 @@ class CollectionView : public AutoExpandingTreeView { void AddToPlaylistEnqueue(); void AddToPlaylistEnqueueNext(); void OpenInNewPlaylist(); + void SearchForThis(); void Organize(); void CopyToDevice(); void EditTracks(); @@ -137,6 +138,8 @@ class CollectionView : public AutoExpandingTreeView { QAction *action_add_to_playlist_enqueue_next_; QAction *action_open_in_new_playlist_; QAction *action_organize_; + QAction *action_search_for_this_; + #ifndef Q_OS_WIN QAction *action_copy_to_device_; #endif From 5865a70c2ed33e7a735cb96df0d895f8b5e0a897 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 26 Jan 2024 00:29:25 +0100 Subject: [PATCH 20/68] CI: Add --skip-broken to dnf install for Fedora --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5024e804..916a2561 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -182,7 +182,7 @@ jobs: run: dnf -y upgrade - name: Install dependencies run: > - dnf -y install + dnf -y --skip-broken install @development-tools redhat-lsb-core which From 836074fb6008a1c5138829a34010c3f91accdfb8 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 26 Jan 2024 18:58:10 +0100 Subject: [PATCH 21/68] CI: Manually codesign png framework --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 916a2561..48ce8cdd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -869,10 +869,10 @@ jobs: working-directory: build run: make deploy - - name: Codesign libsoup + - name: Manually Codesign if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false working-directory: build - run: codesign -s 383J84DVB6 -f strawberry.app/Contents/Frameworks/{libsoup-3.0.0.dylib,libnghttp2.14.dylib,libpsl.5.dylib,libpcre2-16.0.dylib,libpng16.16.dylib,libzstd.1.dylib} strawberry.app + run: codesign -s 383J84DVB6 -f strawberry.app/Contents/Frameworks/{libsoup-3.0.0.dylib,libnghttp2.14.dylib,libpsl.5.dylib,libpcre2-16.0.dylib,libpng16.16.dylib,libzstd.1.dylib} strawberry.app/Contents/Frameworks/png.framework/png strawberry.app - name: Deploy check working-directory: build From 19903751c1968722b9f8f9254b3457eb6623fdbf Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 27 Jan 2024 17:39:26 +0100 Subject: [PATCH 22/68] CI: Codesign png.framework for macOS private --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48ce8cdd..1fd8d55e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -996,6 +996,10 @@ jobs: working-directory: build run: make deploy + - name: Manually Codesign + working-directory: build + run: codesign -s 383J84DVB6 -f strawberry.app/Contents/Frameworks/png.framework/png strawberry.app + - name: Deploy check working-directory: build run: make deploycheck From 882869255b31d8e0d4d49270755b1df23fc8aa0b Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 30 Jan 2024 18:42:32 +0100 Subject: [PATCH 23/68] CI: Remove Ubuntu Lunar --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fd8d55e..23328b67 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -585,7 +585,7 @@ jobs: strategy: fail-fast: false matrix: - ubuntu_version: [ 'focal', 'jammy', 'lunar', 'mantic', 'noble' ] + ubuntu_version: [ 'focal', 'jammy', 'mantic', 'noble' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: @@ -686,7 +686,7 @@ jobs: strategy: fail-fast: false matrix: - ubuntu_version: [ 'focal', 'jammy', 'lunar', 'mantic', 'noble' ] + ubuntu_version: [ 'focal', 'jammy', 'mantic', 'noble' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: From 42d6c79710a799782eed1d2170af60f6ae28596b Mon Sep 17 00:00:00 2001 From: Strawbs Bot Date: Thu, 1 Feb 2024 21:43:21 +0100 Subject: [PATCH 24/68] Update translations --- src/translations/ca.po | 163 +++++++++++++++++++++++++------------ src/translations/cs.po | 163 +++++++++++++++++++++++++------------ src/translations/de.po | 165 +++++++++++++++++++++++++------------- src/translations/es.po | 165 +++++++++++++++++++++++++------------- src/translations/es_AR.po | 165 +++++++++++++++++++++++++------------- src/translations/es_ES.po | 165 +++++++++++++++++++++++++------------- src/translations/es_MX.po | 165 +++++++++++++++++++++++++------------- src/translations/fi.po | 163 +++++++++++++++++++++++++------------ src/translations/fr.po | 165 +++++++++++++++++++++++++------------- src/translations/hu.po | 165 +++++++++++++++++++++++++------------- src/translations/id.po | 163 +++++++++++++++++++++++++------------ src/translations/it.po | 165 +++++++++++++++++++++++++------------- src/translations/ja.po | 163 +++++++++++++++++++++++++------------ src/translations/ko.po | 163 +++++++++++++++++++++++++------------ src/translations/nb.po | 165 +++++++++++++++++++++++++------------- src/translations/nl.po | 163 +++++++++++++++++++++++++------------ src/translations/pl.po | 163 +++++++++++++++++++++++++------------ src/translations/pt_BR.po | 163 +++++++++++++++++++++++++------------ src/translations/ru.po | 165 +++++++++++++++++++++++++------------- src/translations/sv.po | 165 +++++++++++++++++++++++++------------- src/translations/uk.po | 165 +++++++++++++++++++++++++------------- src/translations/zh_CN.po | 165 +++++++++++++++++++++++++------------- 22 files changed, 2433 insertions(+), 1179 deletions(-) diff --git a/src/translations/ca.po b/src/translations/ca.po index 3f8caad1..7fc5061c 100644 --- a/src/translations/ca.po +++ b/src/translations/ca.po @@ -742,7 +742,7 @@ msgstr "Després de copiar…" msgid "Albu&m cover" msgstr "" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -762,7 +762,7 @@ msgstr "Àlbum (volum ideal per a totes les peces)" msgid "Album - Disc" msgstr "" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -851,7 +851,7 @@ msgstr "Comença sempre la reproducció" msgid "An error occurred loading the iTunes database" msgstr "S’ha produït un error en carregar la base de dades de l’iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "S’ha produït un error en escriure les metadades a «%1»" @@ -880,7 +880,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "Afegeix fitxers/URL a la llista de reproducció" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -931,7 +931,7 @@ msgstr "" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1093,7 +1093,7 @@ msgstr "Comportament" msgid "Best" msgstr "Millor" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1109,7 +1109,7 @@ msgid "Bit rate" msgstr "Taxa de bits" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1180,7 +1180,7 @@ msgstr "" msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1338,7 +1338,7 @@ msgstr "Cerca a la col·lecció" msgid "Comma separated list of class:level, level is 0-3" msgstr "Llista separada per comes de classe:nivell, el nivell és 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Comentari" @@ -1355,7 +1355,7 @@ msgstr "Completa les etiquetes automàticament" msgid "Complete tags automatically..." msgstr "Completa les etiquetes automàticament…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1436,7 +1436,7 @@ msgstr "Copia a la col·lecció…" msgid "Copy to device" msgstr "" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copia al dispositiu…" @@ -1447,6 +1447,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1461,6 +1471,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1692,11 +1706,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1749,7 +1763,7 @@ msgstr "Suprimeix els fitxers" msgid "Delete from device..." msgstr "Suprimeix del dispositiu…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Suprimeix del disc…" @@ -1787,6 +1801,16 @@ msgstr "Treu de la cua la peça" msgid "Destination" msgstr "Destí" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detalls…" @@ -1833,7 +1857,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Inhabilitat" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1877,7 +1901,7 @@ msgstr "" msgid "Don't repeat" msgstr "Sense repetició" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "No ho mostris a Artistes diversos" @@ -1974,12 +1998,12 @@ msgstr "Edita l’etiqueta…" msgid "Edit track information" msgstr "Edita la informació de la peça" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Edita la informació de la peça…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Edita la informació de les peces..." @@ -2130,7 +2154,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalent a --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Error" @@ -2139,6 +2163,11 @@ msgstr "Error" msgid "Error connecting MTP device %1" msgstr "" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "S’ha produït un error en copiar les cançons" @@ -2265,6 +2294,11 @@ msgstr "Durada de l’esvaïment" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2341,19 +2375,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "" -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2532,7 +2566,7 @@ msgstr "Configuració general" msgid "Genius Authentication" msgstr "Autenticació amb el Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2640,7 +2674,7 @@ msgstr "" msgid "Group by Genre/Artist/Album" msgstr "Agrupa per gènere/artista/àlbum" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2813,7 +2847,7 @@ msgstr "Insereix…" msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2833,6 +2867,11 @@ msgstr "" msgid "Intro tracks" msgstr "Peces d’introducció" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "" @@ -2892,7 +2931,7 @@ msgstr "Coberta d’àlbum gran" msgid "Large sidebar" msgstr "Barra lateral gran" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2923,7 +2962,7 @@ msgstr "" msgid "Left" msgstr "Esquerra" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Durada" @@ -3030,7 +3069,7 @@ msgstr "Entra" msgid "Long term prediction profile (LTP)" msgstr "Perfil de predicció a llarg termini (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3065,13 +3104,22 @@ msgid "Lyrics providers" msgstr "" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Perfil principal (MAIN)" @@ -3223,7 +3271,7 @@ msgstr "Monitoritza els canvis a la col·lecció" msgid "Months" msgstr "Mesos" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "" @@ -3401,7 +3449,7 @@ msgid "None" msgstr "Cap" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Cap de les cançons seleccionades són adequades per copiar-les a un " @@ -3502,7 +3550,7 @@ msgstr "Obrir dispositiu" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3540,7 +3588,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "" @@ -3548,7 +3596,7 @@ msgstr "" msgid "Organizing files" msgstr "" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3655,7 +3703,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3676,7 +3724,7 @@ msgstr "Barra lateral senzilla" msgid "Play" msgstr "Reprodueix" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3936,12 +3984,12 @@ msgstr "Afegeix les peces seleccionades a la cua" msgid "Queue selected tracks to play next" msgstr "" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3967,7 +4015,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "" @@ -4167,7 +4215,7 @@ msgstr "Repeteix la llista de reproducció" msgid "Repeat track" msgstr "Repeteix la peça" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4203,7 +4251,7 @@ msgstr "" msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "" @@ -4306,7 +4354,7 @@ msgstr "Treure el dispositiu amb seguretat" msgid "Safely remove the device after copying" msgstr "Treure el dispositiu amb seguretat després de copiar" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4440,7 +4488,7 @@ msgstr "" msgid "Search for album covers..." msgstr "Cerca cobertes dels àlbums…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Cerca-ho" @@ -4672,12 +4720,12 @@ msgstr "Mostra a la col·lecció…" msgid "Show in file browser" msgstr "" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Mostra al gestor de fitxers" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Mostra en Artistes diversos" @@ -4778,7 +4826,7 @@ msgstr "Mida:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4874,7 +4922,7 @@ msgstr "" msgid "Sorting" msgstr "" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Font" @@ -5184,7 +5232,7 @@ msgstr "" "La versió de Strawberry a la que us acabeu d’actualitzar necessita tornar a " "analitzar tota la col·lecció perquè incorpora les següents funcions noves:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Hi ha altres cançons en aquest àlbum" @@ -5300,7 +5348,7 @@ msgstr "" msgid "Time step" msgstr "Salt en el temps" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5351,7 +5399,7 @@ msgstr "Bytes totals transferits" msgid "Total network requests made" msgstr "Total de sol·licituds de xarxa fetes" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5697,7 +5745,7 @@ msgstr "Sense coberta:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5715,7 +5763,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/cs.po b/src/translations/cs.po index dc7e21f2..cc416159 100644 --- a/src/translations/cs.po +++ b/src/translations/cs.po @@ -748,7 +748,7 @@ msgstr "Po zkopírování..." msgid "Albu&m cover" msgstr "Obal alb&a" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -768,7 +768,7 @@ msgstr "Album (ideální hlasitost pro všechny skladby)" msgid "Album - Disc" msgstr "Album - Disk" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -857,7 +857,7 @@ msgstr "Vždy začít přehrávat" msgid "An error occurred loading the iTunes database" msgstr "Při nahrávání databáze iTunes nastala chyba" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Při zápisu údajů do '%1' se vyskytla chyba" @@ -886,7 +886,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "Přidat soubory/adresy do seznamu skladeb" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -937,7 +937,7 @@ msgstr "" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1098,7 +1098,7 @@ msgstr "Chování" msgid "Best" msgstr "Nejlepší" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1114,7 +1114,7 @@ msgid "Bit rate" msgstr "Datový tok" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1186,7 +1186,7 @@ msgstr "Přehrávání disků CD je možné pouze za použití GStreamer enginu. msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1342,7 +1342,7 @@ msgstr "Hledání v kolekci" msgid "Comma separated list of class:level, level is 0-3" msgstr "Čárkou oddělený seznam class:level, level je 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Poznámka" @@ -1359,7 +1359,7 @@ msgstr "Doplnit značky automaticky" msgid "Complete tags automatically..." msgstr "Doplnit značky automaticky..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1440,7 +1440,7 @@ msgstr "Zkopírovat do sbírky..." msgid "Copy to device" msgstr "Zkopírovat na zařízení" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Zkopírovat do zařízení..." @@ -1451,6 +1451,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1465,6 +1475,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1697,11 +1711,11 @@ msgstr "Taneční hudba" msgid "Database corruption detected." msgstr "Databáze je poškozená." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1754,7 +1768,7 @@ msgstr "Smazat soubory" msgid "Delete from device..." msgstr "Smazat ze zařízení..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Smazat z disku..." @@ -1792,6 +1806,16 @@ msgstr "Odstranit skladbu z řady" msgid "Destination" msgstr "Cíl" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Podrobnosti..." @@ -1838,7 +1862,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Zakázáno" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1882,7 +1906,7 @@ msgstr "Tuto zprávu již nezobrazovat." msgid "Don't repeat" msgstr "Neopakovat" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Nezobrazovat pod různými umělci" @@ -1979,12 +2003,12 @@ msgstr "Upravit značku..." msgid "Edit track information" msgstr "Upravit informace o skladbě" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Upravit informace o skladbě..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Upravit informace o skladbách..." @@ -2134,7 +2158,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Rovnocenné s --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Chyba" @@ -2143,6 +2167,11 @@ msgstr "Chyba" msgid "Error connecting MTP device %1" msgstr "Chyba při připojování k MTP zařízení %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Chyba při kopírování písní" @@ -2269,6 +2298,11 @@ msgstr "Doba slábnutí" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2345,19 +2379,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "Soubor %1 nebyl rozpoznán jako platný zvukový soubor." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2538,7 +2572,7 @@ msgstr "Obecná nastavení" msgid "Genius Authentication" msgstr "Ověření Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2646,7 +2680,7 @@ msgstr "Seskupit jako Žánr/Autor alba/Album" msgid "Group by Genre/Artist/Album" msgstr "Seskupovat podle žánru/umělce/alba" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2822,7 +2856,7 @@ msgstr "Vložit..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2842,6 +2876,11 @@ msgstr "Zobrazení karet Internetu" msgid "Intro tracks" msgstr "Skladby úvodu" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Špatná odpověď od prohlížeče. Token chybí." @@ -2902,7 +2941,7 @@ msgstr "Velký obal alba" msgid "Large sidebar" msgstr "Velký postranní panel" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2933,7 +2972,7 @@ msgstr "Nejméně oblíbené skladby" msgid "Left" msgstr "Vlevo" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Délka" @@ -3040,7 +3079,7 @@ msgstr "Přihlášení" msgid "Long term prediction profile (LTP)" msgstr "Dlouhodobý předpověďní profil" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3076,13 +3115,22 @@ msgid "Lyrics providers" msgstr "Poskytovatelé textů" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Hlavní profil" @@ -3234,7 +3282,7 @@ msgstr "Sledovat změny ve sbírce" msgid "Months" msgstr "Měsíce" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Nálada" @@ -3412,7 +3460,7 @@ msgid "None" msgstr "Žádná" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Žádná z vybraných písní nebyla vhodná ke zkopírování do zařízení" @@ -3514,7 +3562,7 @@ msgstr "Otevřít zařízení" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3552,7 +3600,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Uspořádat Soubory" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Uspořádat soubory..." @@ -3560,7 +3608,7 @@ msgstr "Uspořádat soubory..." msgid "Organizing files" msgstr "Organizace souborů" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3667,7 +3715,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3688,7 +3736,7 @@ msgstr "Prostý postranní panel" msgid "Play" msgstr "Přehrát" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3950,12 +3998,12 @@ msgstr "Přidat vybrané skladby do řady" msgid "Queue selected tracks to play next" msgstr "Přidat vybrané skladby do fronty" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Do fronty jako další" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3981,7 +4029,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Hodnocení" @@ -4181,7 +4229,7 @@ msgstr "Opakovat seznam skladeb" msgid "Repeat track" msgstr "Opakovat skladbu" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4217,7 +4265,7 @@ msgstr "Odpověď od Tidal neobsahuje dotazové položky." msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Prohledat skladbu" @@ -4322,7 +4370,7 @@ msgstr "Bezpečně odebrat zařízení" msgid "Safely remove the device after copying" msgstr "Po dokončení kopírování bezpečně odebrat zařízení" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4456,7 +4504,7 @@ msgstr "Zpožděné vyhledávání" msgid "Search for album covers..." msgstr "Hledat obaly alb..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Hledat toto" @@ -4689,12 +4737,12 @@ msgstr "Ukazovat ve sbírce..." msgid "Show in file browser" msgstr "Zobrazit v průzkumníku souborů" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Ukázat v prohlížeči souborů..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Ukázat pod různými umělci" @@ -4795,7 +4843,7 @@ msgstr "Velikost:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4895,7 +4943,7 @@ msgstr "" msgid "Sorting" msgstr "" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Zdroj" @@ -5206,7 +5254,7 @@ msgstr "" "Verze Strawberry, na kterou jste právě povýšili, vyžaduje z důvodu nových " "vlastností vypsaných níže úplné nové prohledání sbírky:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Na tomto albu jsou další písně" @@ -5317,7 +5365,7 @@ msgstr "" msgid "Time step" msgstr "Časový krok" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5368,7 +5416,7 @@ msgstr "Celkem přeneseno bajtů" msgid "Total network requests made" msgstr "Celkem uskutečněno síťových požadavků" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5716,7 +5764,7 @@ msgstr "Bez obalu:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Pracovat v režimu offline (pouze ukládat přehrané skladby)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5734,7 +5782,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Zapisovat metadata při ukládání seznamů skladeb" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/de.po b/src/translations/de.po index f8aff179..05911585 100644 --- a/src/translations/de.po +++ b/src/translations/de.po @@ -800,7 +800,7 @@ msgstr "Nach dem Kopieren …" msgid "Albu&m cover" msgstr "Albu&m cover" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -820,7 +820,7 @@ msgstr "Album (idealer Pegel für alle Titel)" msgid "Album - Disc" msgstr "Album - Disc" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "Album-Interpret" @@ -909,7 +909,7 @@ msgstr "Immer mit der Wiedergabe beginnen" msgid "An error occurred loading the iTunes database" msgstr "Beim Laden der iTunes-Datenbank ist ein Fehler aufgetreten" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Beim Schreiben der Metadaten für '%1' trat ein Fehler auf" @@ -938,7 +938,7 @@ msgstr "\"Nicht jugendfrei\" zu Titeln nicht jugendfreier Alben hinzufügen" msgid "Append files/URLs to the playlist" msgstr "Dateien/Adressen an die Wiedergabeliste anhängen" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -994,7 +994,7 @@ msgstr "Bild manuell" msgid "Art Unset" msgstr "Bild nicht gesetzt" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1155,7 +1155,7 @@ msgstr "Verhalten" msgid "Best" msgstr "Optimal" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "Bit-Tiefe" @@ -1171,7 +1171,7 @@ msgid "Bit rate" msgstr "Bitrate" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1242,7 +1242,7 @@ msgstr "CD Wiedergabe ist nur mit der GStreamer Implementierung verfügbar" msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "Stichwort" @@ -1402,7 +1402,7 @@ msgstr "Bibliothek durchsuchen" msgid "Comma separated list of class:level, level is 0-3" msgstr "Komma getrennte Liste mit »class:level« (Level ist 0-3)" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Kommentar" @@ -1419,7 +1419,7 @@ msgstr "Schlagworte automatisch vervollständigen" msgid "Complete tags automatically..." msgstr "Schlagworte automatisch vervollständigen …" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1502,7 +1502,7 @@ msgstr "Zur Bibliothek kopieren …" msgid "Copy to device" msgstr "Kopieren auf ein Gerät" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Auf das Gerät kopieren …" @@ -1516,6 +1516,16 @@ msgstr "" "strawberry.db aus dem Ordner ~/snap kopieren, um Ihre Einstellungen nicht zu " "verlieren:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1530,6 +1540,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Konnte nicht CUE-Datei %1 zum Lesen öffnen: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "Konnte die URL nicht öffnen. Bitte diese URL im Browser öffnen" @@ -1763,11 +1777,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Datenbankfehler festgestellt" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "Erstellungsdatum" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "Änderungsdatum" @@ -1820,7 +1834,7 @@ msgstr "Dateien löschen" msgid "Delete from device..." msgstr "Vom Gerät löschen …" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Von der Festplatte löschen …" @@ -1858,6 +1872,16 @@ msgstr "Titel aus der Warteschlange nehmen" msgid "Destination" msgstr "Ziel:" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Details …" @@ -1904,7 +1928,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Deaktiviert" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1948,7 +1972,7 @@ msgstr "Zeige diese Nachricht nicht wieder." msgid "Don't repeat" msgstr "Wiederholung aus" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Nicht unter »Verschiedene Interpreten« anzeigen" @@ -2048,12 +2072,12 @@ msgstr "Schlagwort bearbeiten …" msgid "Edit track information" msgstr "Metadaten bearbeiten" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Metadaten bearbeiten …" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Metadaten bearbeiten …" @@ -2207,7 +2231,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Äquivalent zu --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Fehler" @@ -2216,6 +2240,11 @@ msgstr "Fehler" msgid "Error connecting MTP device %1" msgstr "Fehler beim Verbinden zu MTP Gerät %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Fehler beim Kopieren der Titel" @@ -2342,6 +2371,11 @@ msgstr "Dauer:" msgid "Failed SQL query: %1" msgstr "Fehlgeschlagene SQL-Abfrage: %1" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2418,19 +2452,19 @@ msgstr "Datei %1 existiert nicht. " msgid "File %1 is not recognized as a valid audio file." msgstr "Datei %1 kann nicht als korrekte Audiodatei erkannt werden." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "Dateiname" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "Dateiname (ohne Dateipfad)" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "Dateigröße" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "Dateityp" @@ -2613,7 +2647,7 @@ msgstr "Allgemeine Einstellungen" msgid "Genius Authentication" msgstr "Genius Authentifizierung" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2722,7 +2756,7 @@ msgstr "Gruppe nach Genre/Album Künstler/Album" msgid "Group by Genre/Artist/Album" msgstr "Genre/Interpret/Album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2898,7 +2932,7 @@ msgstr "Einfügen …" msgid "Install strawberry through PPA:" msgstr "Strawberry aus PPA installieren:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "Integrierte Lautheit" @@ -2918,6 +2952,11 @@ msgstr "Internet Registerkartenansicht" msgid "Intro tracks" msgstr "Einleitungstitel" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Ungültige Antwort vom Webbrowser. Token fehlt." @@ -2979,7 +3018,7 @@ msgstr "Großes Titelbild" msgid "Large sidebar" msgstr "Große Seitenleiste" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "Zuletzt gespielt" @@ -3010,7 +3049,7 @@ msgstr "Am wenigsten gemochte Titel" msgid "Left" msgstr "Links" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Länge" @@ -3117,7 +3156,7 @@ msgstr "Anmelden" msgid "Long term prediction profile (LTP)" msgstr "Langzeitvorhersageprofil (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "Lautstärkeumfang" @@ -3152,13 +3191,22 @@ msgid "Lyrics providers" msgstr "Anbieter für Songtexte" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5-Token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Hauptprofil (MAIN)" @@ -3310,7 +3358,7 @@ msgstr "Bibliothek auf Änderungen überwachen" msgid "Months" msgstr "Monate" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Stimmung" @@ -3490,7 +3538,7 @@ msgid "None" msgstr "Nichts" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Keiner der gewählten Titel war zum Kopieren auf ein Gerät geeignet." @@ -3594,7 +3642,7 @@ msgstr "Gerät öffnen" msgid "Open homepage" msgstr "Homepage öffnen" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3632,7 +3680,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Dateien organisieren" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Dateien organisieren..." @@ -3640,7 +3688,7 @@ msgstr "Dateien organisieren..." msgid "Organizing files" msgstr "Dateien organisieren" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "Ursprüngliches Jahr" @@ -3753,7 +3801,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "Lautstärke-Normalisierung anwenden" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3774,7 +3822,7 @@ msgstr "Einfache Seitenleiste" msgid "Play" msgstr "Wiedergabe" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "Wiedergabezähler" @@ -4046,12 +4094,12 @@ msgstr "" "Ausgewählte Titel in die Warteschlange stellen, um sie als nächstes " "abzuspielen" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "In die Warteschlange, um sie als nächstes abzuspielen" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4077,7 +4125,7 @@ msgstr "Radios" msgid "Random" msgstr "Zufällig" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Bewertung" @@ -4287,7 +4335,7 @@ msgstr "Wiedergabeliste wiederholen" msgid "Repeat track" msgstr "Titel wiederholen" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4323,7 +4371,7 @@ msgstr "Bei der Antwort von Tidal fehlen Abfrageelemente." msgid "Repopulate" msgstr "Neu füllen" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Lied erneut scannen" @@ -4427,7 +4475,7 @@ msgstr "Gerät sicher entfernen" msgid "Safely remove the device after copying" msgstr "Das Gerät nach dem Kopiervorgang sicher entfernen" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "Abtastrate" @@ -4561,7 +4609,7 @@ msgstr "Suche verzögert" msgid "Search for album covers..." msgstr "Nach Titelbild suchen …" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Nach diesem suchen" @@ -4797,12 +4845,12 @@ msgstr "In Bibliothek anzeigen …" msgid "Show in file browser" msgstr "Zeige im Dateimanager" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "In Dateiverwaltung anzeigen …" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Unter »Verschiedene Interpreten« anzeigen" @@ -4903,7 +4951,7 @@ msgstr "Größe:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "Übersprungzähler" @@ -5002,7 +5050,7 @@ msgstr "Sortiere Titel nach" msgid "Sorting" msgstr "Sortieren" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Quelle" @@ -5321,7 +5369,7 @@ msgstr "" "eine komplette Aktualisierung Ihrer Bibliothek, damit die folgenden neuen " "Funktionen genutzt werden können:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Dieses Album enthält auch andere Titel" @@ -5437,7 +5485,7 @@ msgstr "" msgid "Time step" msgstr "Zeitschritt" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5488,7 +5536,7 @@ msgstr "Insgesamt übertragene Bytes" msgid "Total network requests made" msgstr "Insgesamt gestellte Netzwerkanfragen" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5842,7 +5890,7 @@ msgstr "Ohne Titelbild:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Offline arbeiten (Nur im Speicher scrobbeln)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5862,7 +5910,16 @@ msgstr "Alle Wiedergabezahlen und Bewertungen in Dateien schreiben" msgid "Write metadata when saving playlists" msgstr "Metadaten schreiben, wenn Wiedergabelisten gespeichert werden" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/es.po b/src/translations/es.po index 5b7d7479..6ccdeb3c 100644 --- a/src/translations/es.po +++ b/src/translations/es.po @@ -775,7 +775,7 @@ msgstr "Después de copiar…" msgid "Albu&m cover" msgstr "C&ubierta del álbum" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -795,7 +795,7 @@ msgstr "Álbum (volumen idóneo para todas las pistas)" msgid "Album - Disc" msgstr "Álbum - Disco" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -886,7 +886,7 @@ msgstr "Comenzar siempre la reproducción" msgid "An error occurred loading the iTunes database" msgstr "Se produjo un error al cargar la base de datos de iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Se produjo un error al escribir los metadatos en «%1»" @@ -915,7 +915,7 @@ msgstr "Añadir «explícito» al nombre de los álbumes explícitos" msgid "Append files/URLs to the playlist" msgstr "Añadir archivos/URL a la lista de reproducción" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -966,7 +966,7 @@ msgstr "Cubierta manual" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1127,7 +1127,7 @@ msgstr "Comportamiento" msgid "Best" msgstr "Mejor" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1143,7 +1143,7 @@ msgid "Bit rate" msgstr "Tasa de bits" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1214,7 +1214,7 @@ msgstr "La reproducción de CD solo es posible con el motor GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1371,7 +1371,7 @@ msgstr "Búsqueda en la colección" msgid "Comma separated list of class:level, level is 0-3" msgstr "Lista separada por comas de la clase:nivel, el nivel es 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Comentario" @@ -1388,7 +1388,7 @@ msgstr "Completar etiquetas automáticamente" msgid "Complete tags automatically..." msgstr "Completar etiquetas automáticamente…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1471,7 +1471,7 @@ msgstr "Copiar en la colección…" msgid "Copy to device" msgstr "Copiar en un dispositivo" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copiar en un dispositivo…" @@ -1482,6 +1482,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1496,6 +1506,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "No se ha podido abrir URL. Por favor, ábrela en tu navegador" @@ -1727,11 +1741,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Se han detectado errores en la base de datos" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1784,7 +1798,7 @@ msgstr "Eliminar archivos" msgid "Delete from device..." msgstr "Eliminar del dispositivo…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Eliminar del disco…" @@ -1822,6 +1836,16 @@ msgstr "Quitar la pista de la cola" msgid "Destination" msgstr "Destino" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detalles…" @@ -1868,7 +1892,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Desactivado" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1912,7 +1936,7 @@ msgstr "No volver a mostrar este mensaje." msgid "Don't repeat" msgstr "No repetir" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "No mostrar en Varios artistas" @@ -2011,12 +2035,12 @@ msgstr "Editar etiqueta…" msgid "Edit track information" msgstr "Editar información de la pista" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Editar información de la pista…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Editar información de las pistas…" @@ -2170,7 +2194,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalente a --log-levels*:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Error" @@ -2179,6 +2203,11 @@ msgstr "Error" msgid "Error connecting MTP device %1" msgstr "Error al conectar al dispositivo MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Error al copiar pistas" @@ -2305,6 +2334,11 @@ msgstr "Duración del fundido" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2381,19 +2415,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "El archivo de audio %1 no parece válido." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2575,7 +2609,7 @@ msgstr "Configuración general" msgid "Genius Authentication" msgstr "Autenticación con Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2687,7 +2721,7 @@ msgstr "Agrupar por género/artista del álbum/álbum" msgid "Group by Genre/Artist/Album" msgstr "Agrupar por género/artista/álbum" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2864,7 +2898,7 @@ msgstr "Insertar…" msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2884,6 +2918,11 @@ msgstr "Vista de pestañas de Internet" msgid "Intro tracks" msgstr "Pistas de introducción" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "El servidor web devolvió una respuesta no válida. Falta la ficha." @@ -2944,7 +2983,7 @@ msgstr "Cubierta de álbum grande" msgid "Large sidebar" msgstr "Barra lateral grande" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2975,7 +3014,7 @@ msgstr "Pistas menos valoradas" msgid "Left" msgstr "Izquierda" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Duración" @@ -3082,7 +3121,7 @@ msgstr "Acceder" msgid "Long term prediction profile (LTP)" msgstr "Perfil de predicción a largo plazo (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3117,13 +3156,22 @@ msgid "Lyrics providers" msgstr "Proveedores de letras" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5 token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Perfil principal (MAIN)" @@ -3275,7 +3323,7 @@ msgstr "Vigilar cambios en la colección" msgid "Months" msgstr "Meses" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Ánimo" @@ -3453,7 +3501,7 @@ msgid "None" msgstr "Ninguno" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Ninguna de las pistas seleccionadas era apta para copiarse en un dispositivo" @@ -3556,7 +3604,7 @@ msgstr "Abrir dispositivo" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3594,7 +3642,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organizar archivos" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organizar archivos…" @@ -3602,7 +3650,7 @@ msgstr "Organizar archivos…" msgid "Organizing files" msgstr "Organizando archivos" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3709,7 +3757,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3730,7 +3778,7 @@ msgstr "Barra lateral simple" msgid "Play" msgstr "Reproducir" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3996,12 +4044,12 @@ msgstr "Poner en cola las pistas seleccionadas" msgid "Queue selected tracks to play next" msgstr "Poner en cola las pistas seleccionadas para reproducir a continuación" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Poner en cola para reproducir a continuación" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4027,7 +4075,7 @@ msgstr "" msgid "Random" msgstr "Al azar" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Valoración" @@ -4230,7 +4278,7 @@ msgstr "Repetir lista de reproducción" msgid "Repeat track" msgstr "Repetir pista" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4266,7 +4314,7 @@ msgstr "Faltan elementos en la respuesta de Tidal." msgid "Repopulate" msgstr "Volver a poblar" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Volver a escanear pistas" @@ -4369,7 +4417,7 @@ msgstr "Quitar dispositivo con seguridad" msgid "Safely remove the device after copying" msgstr "Quitar dispositivo con seguridad después de copiar" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4503,7 +4551,7 @@ msgstr "Demora de búsqueda" msgid "Search for album covers..." msgstr "Buscar cubiertas de álbumes…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Buscar esto" @@ -4733,12 +4781,12 @@ msgstr "Mostrar en la colección…" msgid "Show in file browser" msgstr "Mostrar en el navegador de archivos" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Mostrar en el gestor de archivos…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Mostrar en Varios artistas" @@ -4839,7 +4887,7 @@ msgstr "Tamaño:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4938,7 +4986,7 @@ msgstr "Ordenar temas por" msgid "Sorting" msgstr "Ordenación" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Origen" @@ -5248,7 +5296,7 @@ msgstr "" "La versión de Strawberry a la que se acaba de actualizar necesita volver a " "analizar la colección debido a estas nuevas funciones:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Hay otras pistas en este álbum" @@ -5365,7 +5413,7 @@ msgstr "" msgid "Time step" msgstr "Salto en el tiempo" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5416,7 +5464,7 @@ msgstr "Total de bytes transferidos" msgid "Total network requests made" msgstr "Total de solicitudes hechas a la red" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5769,7 +5817,7 @@ msgstr "Sin cubierta:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Trabajar sin conexión (solo registros de reproducción prealmacenados)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5788,7 +5836,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Escribir los metadatos al guardar las listas de reproducción" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/es_AR.po b/src/translations/es_AR.po index 9682850a..dda88f34 100644 --- a/src/translations/es_AR.po +++ b/src/translations/es_AR.po @@ -739,7 +739,7 @@ msgstr "Después de copiar…" msgid "Albu&m cover" msgstr "C&ubierta del álbum" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -759,7 +759,7 @@ msgstr "Álbum (volumen idóneo para todas las pistas)" msgid "Album - Disc" msgstr "Álbum - Disco" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -850,7 +850,7 @@ msgstr "Comenzar siempre la reproducción" msgid "An error occurred loading the iTunes database" msgstr "Se produjo un error al cargar la base de datos de iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Se produjo un error al escribir los metadatos en «%1»" @@ -879,7 +879,7 @@ msgstr "Añadir «explícito» al nombre de los álbumes explícitos" msgid "Append files/URLs to the playlist" msgstr "Añadir archivos/URL a la lista de reproducción" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -930,7 +930,7 @@ msgstr "Cubierta manual" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1091,7 +1091,7 @@ msgstr "Comportamiento" msgid "Best" msgstr "Mejor" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1107,7 +1107,7 @@ msgid "Bit rate" msgstr "Tasa de bits" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1178,7 +1178,7 @@ msgstr "La reproducción de CD solo es posible con el motor GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1335,7 +1335,7 @@ msgstr "Búsqueda en la colección" msgid "Comma separated list of class:level, level is 0-3" msgstr "Lista separada por comas de la clase:nivel, el nivel es 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Comentario" @@ -1352,7 +1352,7 @@ msgstr "Completar etiquetas automáticamente" msgid "Complete tags automatically..." msgstr "Completar etiquetas automáticamente…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1435,7 +1435,7 @@ msgstr "Copiar en la colección…" msgid "Copy to device" msgstr "Copiar en un dispositivo" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copiar en un dispositivo…" @@ -1446,6 +1446,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1460,6 +1470,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "No se ha podido abrir URL. Por favor, ábrela en tu navegador" @@ -1691,11 +1705,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Se han detectado errores en la base de datos" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1748,7 +1762,7 @@ msgstr "Eliminar archivos" msgid "Delete from device..." msgstr "Eliminar del dispositivo…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Eliminar del disco…" @@ -1786,6 +1800,16 @@ msgstr "Quitar la pista de la cola" msgid "Destination" msgstr "Destino" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detalles…" @@ -1832,7 +1856,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Desactivado" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1876,7 +1900,7 @@ msgstr "No volver a mostrar este mensaje." msgid "Don't repeat" msgstr "No repetir" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "No mostrar en Varios artistas" @@ -1975,12 +1999,12 @@ msgstr "Editar etiqueta…" msgid "Edit track information" msgstr "Editar información de la pista" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Editar información de la pista…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Editar información de las pistas…" @@ -2134,7 +2158,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalente a --log-levels*:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Error" @@ -2143,6 +2167,11 @@ msgstr "Error" msgid "Error connecting MTP device %1" msgstr "Error al conectar al dispositivo MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Error al copiar pistas" @@ -2269,6 +2298,11 @@ msgstr "Duración del fundido" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2345,19 +2379,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "El archivo de audio %1 no parece válido." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2539,7 +2573,7 @@ msgstr "Configuración general" msgid "Genius Authentication" msgstr "Autenticación con Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2651,7 +2685,7 @@ msgstr "Agrupar por género/artista del álbum/álbum" msgid "Group by Genre/Artist/Album" msgstr "Agrupar por género/artista/álbum" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2828,7 +2862,7 @@ msgstr "Insertar…" msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2848,6 +2882,11 @@ msgstr "Vista de pestañas de Internet" msgid "Intro tracks" msgstr "Pistas de introducción" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "El servidor web devolvió una respuesta no válida. Falta la ficha." @@ -2908,7 +2947,7 @@ msgstr "Cubierta de álbum grande" msgid "Large sidebar" msgstr "Barra lateral grande" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2939,7 +2978,7 @@ msgstr "Pistas menos valoradas" msgid "Left" msgstr "Izquierda" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Duración" @@ -3046,7 +3085,7 @@ msgstr "Acceder" msgid "Long term prediction profile (LTP)" msgstr "Perfil de predicción a largo plazo (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3081,13 +3120,22 @@ msgid "Lyrics providers" msgstr "Proveedores de letras" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5 token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Perfil principal (MAIN)" @@ -3239,7 +3287,7 @@ msgstr "Vigilar cambios en la colección" msgid "Months" msgstr "Meses" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Ánimo" @@ -3417,7 +3465,7 @@ msgid "None" msgstr "Ninguno" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Ninguna de las pistas seleccionadas era apta para copiarse en un dispositivo" @@ -3520,7 +3568,7 @@ msgstr "Abrir dispositivo" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3558,7 +3606,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organizar archivos" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organizar archivos…" @@ -3566,7 +3614,7 @@ msgstr "Organizar archivos…" msgid "Organizing files" msgstr "Organizando archivos" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3673,7 +3721,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3694,7 +3742,7 @@ msgstr "Barra lateral simple" msgid "Play" msgstr "Reproducir" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3960,12 +4008,12 @@ msgstr "Poner en cola las pistas seleccionadas" msgid "Queue selected tracks to play next" msgstr "Poner en cola las pistas seleccionadas para reproducir a continuación" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Poner en cola para reproducir a continuación" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3991,7 +4039,7 @@ msgstr "" msgid "Random" msgstr "Al azar" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Valoración" @@ -4194,7 +4242,7 @@ msgstr "Repetir lista de reproducción" msgid "Repeat track" msgstr "Repetir pista" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4230,7 +4278,7 @@ msgstr "Faltan elementos en la respuesta de Tidal." msgid "Repopulate" msgstr "Volver a poblar" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Volver a escanear pistas" @@ -4333,7 +4381,7 @@ msgstr "Quitar dispositivo con seguridad" msgid "Safely remove the device after copying" msgstr "Quitar dispositivo con seguridad después de copiar" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4467,7 +4515,7 @@ msgstr "Demora de búsqueda" msgid "Search for album covers..." msgstr "Buscar cubiertas de álbumes…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Buscar esto" @@ -4697,12 +4745,12 @@ msgstr "Mostrar en la colección…" msgid "Show in file browser" msgstr "Mostrar en el navegador de archivos" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Mostrar en el gestor de archivos…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Mostrar en Varios artistas" @@ -4803,7 +4851,7 @@ msgstr "Tamaño:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4902,7 +4950,7 @@ msgstr "Ordenar temas por" msgid "Sorting" msgstr "Ordenación" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Origen" @@ -5212,7 +5260,7 @@ msgstr "" "La versión de Strawberry a la que se acaba de actualizar necesita volver a " "analizar la colección debido a estas nuevas funciones:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Hay otras pistas en este álbum" @@ -5329,7 +5377,7 @@ msgstr "" msgid "Time step" msgstr "Salto en el tiempo" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5380,7 +5428,7 @@ msgstr "Total de bytes transferidos" msgid "Total network requests made" msgstr "Total de solicitudes hechas a la red" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5733,7 +5781,7 @@ msgstr "Sin cubierta:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Trabajar sin conexión (solo registros de reproducción prealmacenados)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5752,7 +5800,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Escribir los metadatos al guardar las listas de reproducción" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/es_ES.po b/src/translations/es_ES.po index 7ef625fe..089280b6 100644 --- a/src/translations/es_ES.po +++ b/src/translations/es_ES.po @@ -753,7 +753,7 @@ msgstr "Después de copiar…" msgid "Albu&m cover" msgstr "&Portada del álbum" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -773,7 +773,7 @@ msgstr "Álbum (volumen idóneo para todas las pistas)" msgid "Album - Disc" msgstr "Álbum - Disco" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -864,7 +864,7 @@ msgstr "Comenzar siempre la reproducción" msgid "An error occurred loading the iTunes database" msgstr "Se produjo un error al cargar la base de datos de iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Se produjo un error al escribir los metadatos en «%1»" @@ -893,7 +893,7 @@ msgstr "Añadir «explícito» al nombre de los álbumes explícitos" msgid "Append files/URLs to the playlist" msgstr "Añadir archivos/URL a la lista de reproducción" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -946,7 +946,7 @@ msgstr "Portada manual" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1107,7 +1107,7 @@ msgstr "Comportamiento" msgid "Best" msgstr "Mejor" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1123,7 +1123,7 @@ msgid "Bit rate" msgstr "Tasa de bits" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1194,7 +1194,7 @@ msgstr "La reproducción de CD solo es posible con el motor GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1350,7 +1350,7 @@ msgstr "Búsqueda en la colección" msgid "Comma separated list of class:level, level is 0-3" msgstr "Lista separada por comas de la clase:nivel, el nivel es 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Comentario" @@ -1367,7 +1367,7 @@ msgstr "Completar etiquetas automáticamente" msgid "Complete tags automatically..." msgstr "Completar etiquetas automáticamente…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1450,7 +1450,7 @@ msgstr "Copiar en la colección…" msgid "Copy to device" msgstr "Copiar en un dispositivo" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copiar en un dispositivo…" @@ -1463,6 +1463,16 @@ msgstr "" "Copia los archivos strawberry.conf y strawberry.db de tu directorio ~/snap " "antes de desinstalar el paquete snap para no perder tu configuración:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1477,6 +1487,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "No se ha podido leer el archivo CUE %1: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "No se ha podido abrir URL. Por favor, ábrala en su navegador" @@ -1708,11 +1722,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Se han detectado errores en la base de datos." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1765,7 +1779,7 @@ msgstr "Eliminar archivos" msgid "Delete from device..." msgstr "Eliminar del dispositivo…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Eliminar del disco…" @@ -1803,6 +1817,16 @@ msgstr "Quitar la pista de la cola" msgid "Destination" msgstr "Destino" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detalles…" @@ -1849,7 +1873,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Desactivado" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1893,7 +1917,7 @@ msgstr "No volver a mostrar este mensaje." msgid "Don't repeat" msgstr "No repetir" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "No mostrar en Varios artistas" @@ -1992,12 +2016,12 @@ msgstr "Editar etiqueta…" msgid "Edit track information" msgstr "Editar información de la pista" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Editar información de la pista…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Editar información de las pistas…" @@ -2151,7 +2175,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalente a --log-levels*:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Error" @@ -2160,6 +2184,11 @@ msgstr "Error" msgid "Error connecting MTP device %1" msgstr "Error al conectar al dispositivo MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Error al copiar temas" @@ -2286,6 +2315,11 @@ msgstr "Duración del fundido" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2362,19 +2396,19 @@ msgstr "El archivo %1 no existe." msgid "File %1 is not recognized as a valid audio file." msgstr "El archivo de audio %1 no parece válido." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2554,7 +2588,7 @@ msgstr "Configuración general" msgid "Genius Authentication" msgstr "Autenticación con Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2666,7 +2700,7 @@ msgstr "Agrupar por género/artista del álbum/álbum" msgid "Group by Genre/Artist/Album" msgstr "Agrupar por género/artista/álbum" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2843,7 +2877,7 @@ msgstr "Insertar…" msgid "Install strawberry through PPA:" msgstr "Instalar Strawberry mediante un PPA:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2863,6 +2897,11 @@ msgstr "Vista de pestañas de Internet" msgid "Intro tracks" msgstr "Pistas de introducción" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "El servidor web devolvió una respuesta no válida. Falta el token." @@ -2923,7 +2962,7 @@ msgstr "Portadas de álbum grande" msgid "Large sidebar" msgstr "Barra lateral grande" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2954,7 +2993,7 @@ msgstr "Pistas menos valoradas" msgid "Left" msgstr "Izquierda" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Duración" @@ -3061,7 +3100,7 @@ msgstr "Acceder" msgid "Long term prediction profile (LTP)" msgstr "Perfil de predicción a largo plazo (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3096,13 +3135,22 @@ msgid "Lyrics providers" msgstr "Proveedores de letras" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "Token MD5" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Perfil principal (MAIN)" @@ -3254,7 +3302,7 @@ msgstr "Vigilar cambios en la colección" msgid "Months" msgstr "Meses" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Ánimo" @@ -3432,7 +3480,7 @@ msgid "None" msgstr "Ninguno" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Ninguna de los temas seleccionados podía copiarse en un dispositivo" @@ -3534,7 +3582,7 @@ msgstr "Abrir dispositivo" msgid "Open homepage" msgstr "Abrir página principal" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3572,7 +3620,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organizar archivos" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organizar archivos…" @@ -3580,7 +3628,7 @@ msgstr "Organizar archivos…" msgid "Organizing files" msgstr "Organizando archivos" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3689,7 +3737,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3710,7 +3758,7 @@ msgstr "Barra lateral simple" msgid "Play" msgstr "Reproducir" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3976,12 +4024,12 @@ msgstr "Poner en cola las pistas seleccionadas" msgid "Queue selected tracks to play next" msgstr "Poner en cola las pistas seleccionadas para reproducir a continuación" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Poner en cola para reproducir a continuación" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4007,7 +4055,7 @@ msgstr "Radios" msgid "Random" msgstr "Al azar" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Valoración" @@ -4214,7 +4262,7 @@ msgstr "Repetir lista de reproducción" msgid "Repeat track" msgstr "Repetir pista" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4250,7 +4298,7 @@ msgstr "Faltan elementos en la respuesta de Tidal." msgid "Repopulate" msgstr "Volver a poblar" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Volver a escanear tema(s)" @@ -4353,7 +4401,7 @@ msgstr "Quitar dispositivo con seguridad" msgid "Safely remove the device after copying" msgstr "Quitar dispositivo con seguridad después de copiar" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4489,7 +4537,7 @@ msgstr "Demora de búsqueda" msgid "Search for album covers..." msgstr "Buscar portadas de álbumes…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Buscar esto" @@ -4719,12 +4767,12 @@ msgstr "Mostrar en la colección…" msgid "Show in file browser" msgstr "Mostrar en el navegador de archivos" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Mostrar en el gestor de archivos…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Mostrar en Varios artistas" @@ -4825,7 +4873,7 @@ msgstr "Tamaño:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4924,7 +4972,7 @@ msgstr "Ordenar temas por" msgid "Sorting" msgstr "Ordenación" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Origen" @@ -5238,7 +5286,7 @@ msgstr "" "La versión de Strawberry a la que se acaba de actualizar necesita volver a " "analizar la colección debido a estas nuevas funciones:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Hay otros temas en este álbum" @@ -5355,7 +5403,7 @@ msgstr "" msgid "Time step" msgstr "Salto en el tiempo" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5406,7 +5454,7 @@ msgstr "Total de bytes transferidos" msgid "Total network requests made" msgstr "Total de solicitudes hechas a la red" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5759,7 +5807,7 @@ msgstr "Sin portada:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Trabajar sin conexión (solo registros de reproducción prealmacenados)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5780,7 +5828,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Escribir los metadatos al guardar las listas de reproducción" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/es_MX.po b/src/translations/es_MX.po index 0174db09..a38df274 100644 --- a/src/translations/es_MX.po +++ b/src/translations/es_MX.po @@ -739,7 +739,7 @@ msgstr "Después de copiar…" msgid "Albu&m cover" msgstr "C&ubierta del álbum" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -759,7 +759,7 @@ msgstr "Álbum (volumen idóneo para todas las pistas)" msgid "Album - Disc" msgstr "Álbum - Disco" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -850,7 +850,7 @@ msgstr "Comenzar siempre la reproducción" msgid "An error occurred loading the iTunes database" msgstr "Se produjo un error al cargar la base de datos de iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Se produjo un error al escribir los metadatos en «%1»" @@ -879,7 +879,7 @@ msgstr "Añadir «explícito» al nombre de los álbumes explícitos" msgid "Append files/URLs to the playlist" msgstr "Añadir archivos/URL a la lista de reproducción" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -930,7 +930,7 @@ msgstr "Cubierta manual" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1091,7 +1091,7 @@ msgstr "Comportamiento" msgid "Best" msgstr "Mejor" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1107,7 +1107,7 @@ msgid "Bit rate" msgstr "Tasa de bits" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1178,7 +1178,7 @@ msgstr "La reproducción de CD solo es posible con el motor GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1335,7 +1335,7 @@ msgstr "Búsqueda en la colección" msgid "Comma separated list of class:level, level is 0-3" msgstr "Lista separada por comas de la clase:nivel, el nivel es 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Comentario" @@ -1352,7 +1352,7 @@ msgstr "Completar etiquetas automáticamente" msgid "Complete tags automatically..." msgstr "Completar etiquetas automáticamente…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1435,7 +1435,7 @@ msgstr "Copiar en la colección…" msgid "Copy to device" msgstr "Copiar en un dispositivo" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copiar en un dispositivo…" @@ -1446,6 +1446,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1460,6 +1470,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "No se ha podido abrir URL. Por favor, ábrela en tu navegador" @@ -1691,11 +1705,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Se han detectado errores en la base de datos" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1748,7 +1762,7 @@ msgstr "Eliminar archivos" msgid "Delete from device..." msgstr "Eliminar del dispositivo…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Eliminar del disco…" @@ -1786,6 +1800,16 @@ msgstr "Quitar la pista de la cola" msgid "Destination" msgstr "Destino" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detalles…" @@ -1832,7 +1856,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Desactivado" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1876,7 +1900,7 @@ msgstr "No volver a mostrar este mensaje." msgid "Don't repeat" msgstr "No repetir" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "No mostrar en Varios artistas" @@ -1975,12 +1999,12 @@ msgstr "Editar etiqueta…" msgid "Edit track information" msgstr "Editar información de la pista" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Editar información de la pista…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Editar información de las pistas…" @@ -2134,7 +2158,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalente a --log-levels*:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Error" @@ -2143,6 +2167,11 @@ msgstr "Error" msgid "Error connecting MTP device %1" msgstr "Error al conectar al dispositivo MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Error al copiar pistas" @@ -2269,6 +2298,11 @@ msgstr "Duración del fundido" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2345,19 +2379,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "El archivo de audio %1 no parece válido." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2539,7 +2573,7 @@ msgstr "Configuración general" msgid "Genius Authentication" msgstr "Autenticación con Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2651,7 +2685,7 @@ msgstr "Agrupar por género/artista del álbum/álbum" msgid "Group by Genre/Artist/Album" msgstr "Agrupar por género/artista/álbum" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2828,7 +2862,7 @@ msgstr "Insertar…" msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2848,6 +2882,11 @@ msgstr "Vista de pestañas de Internet" msgid "Intro tracks" msgstr "Pistas de introducción" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "El servidor web devolvió una respuesta no válida. Falta la ficha." @@ -2908,7 +2947,7 @@ msgstr "Cubierta de álbum grande" msgid "Large sidebar" msgstr "Barra lateral grande" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2939,7 +2978,7 @@ msgstr "Pistas menos valoradas" msgid "Left" msgstr "Izquierda" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Duración" @@ -3046,7 +3085,7 @@ msgstr "Acceder" msgid "Long term prediction profile (LTP)" msgstr "Perfil de predicción a largo plazo (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3081,13 +3120,22 @@ msgid "Lyrics providers" msgstr "Proveedores de letras" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5 token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Perfil principal (MAIN)" @@ -3239,7 +3287,7 @@ msgstr "Vigilar cambios en la colección" msgid "Months" msgstr "Meses" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Ánimo" @@ -3417,7 +3465,7 @@ msgid "None" msgstr "Ninguno" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Ninguna de las pistas seleccionadas era apta para copiarse en un dispositivo" @@ -3520,7 +3568,7 @@ msgstr "Abrir dispositivo" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3558,7 +3606,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organizar archivos" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organizar archivos…" @@ -3566,7 +3614,7 @@ msgstr "Organizar archivos…" msgid "Organizing files" msgstr "Organizando archivos" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3673,7 +3721,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3694,7 +3742,7 @@ msgstr "Barra lateral simple" msgid "Play" msgstr "Reproducir" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3960,12 +4008,12 @@ msgstr "Poner en cola las pistas seleccionadas" msgid "Queue selected tracks to play next" msgstr "Poner en cola las pistas seleccionadas para reproducir a continuación" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Poner en cola para reproducir a continuación" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3991,7 +4039,7 @@ msgstr "" msgid "Random" msgstr "Al azar" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Valoración" @@ -4194,7 +4242,7 @@ msgstr "Repetir lista de reproducción" msgid "Repeat track" msgstr "Repetir pista" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4230,7 +4278,7 @@ msgstr "Faltan elementos en la respuesta de Tidal." msgid "Repopulate" msgstr "Volver a poblar" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Volver a escanear pistas" @@ -4333,7 +4381,7 @@ msgstr "Quitar dispositivo con seguridad" msgid "Safely remove the device after copying" msgstr "Quitar dispositivo con seguridad después de copiar" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4467,7 +4515,7 @@ msgstr "Demora de búsqueda" msgid "Search for album covers..." msgstr "Buscar cubiertas de álbumes…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Buscar esto" @@ -4697,12 +4745,12 @@ msgstr "Mostrar en la colección…" msgid "Show in file browser" msgstr "Mostrar en el navegador de archivos" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Mostrar en el gestor de archivos…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Mostrar en Varios artistas" @@ -4803,7 +4851,7 @@ msgstr "Tamaño:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4902,7 +4950,7 @@ msgstr "Ordenar temas por" msgid "Sorting" msgstr "Ordenación" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Origen" @@ -5212,7 +5260,7 @@ msgstr "" "La versión de Strawberry a la que se acaba de actualizar necesita volver a " "analizar la colección debido a estas nuevas funciones:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Hay otras pistas en este álbum" @@ -5329,7 +5377,7 @@ msgstr "" msgid "Time step" msgstr "Salto en el tiempo" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5380,7 +5428,7 @@ msgstr "Total de bytes transferidos" msgid "Total network requests made" msgstr "Total de solicitudes hechas a la red" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5733,7 +5781,7 @@ msgstr "Sin cubierta:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Trabajar sin conexión (solo registros de reproducción prealmacenados)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5752,7 +5800,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Escribir los metadatos al guardar las listas de reproducción" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/fi.po b/src/translations/fi.po index 44171456..fbe3ec70 100644 --- a/src/translations/fi.po +++ b/src/translations/fi.po @@ -742,7 +742,7 @@ msgstr "Kopioinnin jälkeen..." msgid "Albu&m cover" msgstr "Albu&min kansikuva" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -762,7 +762,7 @@ msgstr "Albumi (ihanteellinen voimakkuus kaikille kappaleille)" msgid "Album - Disc" msgstr "Albumi - Levy" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -851,7 +851,7 @@ msgstr "Aloita aina toisto" msgid "An error occurred loading the iTunes database" msgstr "iTunes-tietokantaa ladatessa tapahtui virhe" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Virhe kirjoittaessa metatietoja kohteeseen '%1'" @@ -880,7 +880,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "Lisää tiedostoja/verkko-osoitteita soittolistalle" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -931,7 +931,7 @@ msgstr "" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1094,7 +1094,7 @@ msgstr "Toiminta" msgid "Best" msgstr "Paras" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1110,7 +1110,7 @@ msgid "Bit rate" msgstr "Bittivirta" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1181,7 +1181,7 @@ msgstr "CD-toisto on saatavilla vain GStreamer-moottorilla" msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1338,7 +1338,7 @@ msgid "Comma separated list of class:level, level is 0-3" msgstr "" "Pilkuin erotettu lista luokka:taso -määritteitä, jossa taso on väliltä 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Kommentti" @@ -1355,7 +1355,7 @@ msgstr "Täydennä tunnisteet automaattisesti" msgid "Complete tags automatically..." msgstr "Täydennä tunnisteet automaattisesti..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1436,7 +1436,7 @@ msgstr "Kopioi kirjastoon" msgid "Copy to device" msgstr "Kopioi laitteeseen" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Kopioi laitteelle..." @@ -1447,6 +1447,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1461,6 +1471,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1693,11 +1707,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Tietokanta on vioittunut." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1750,7 +1764,7 @@ msgstr "Poista tiedostot" msgid "Delete from device..." msgstr "Poista laitteelta..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Poista levyltä..." @@ -1788,6 +1802,16 @@ msgstr "Poista kappale jonosta" msgid "Destination" msgstr "Kohde" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Tiedot..." @@ -1834,7 +1858,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Ei käytössä" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1878,7 +1902,7 @@ msgstr "Älä näytä tätä enää uudestaan." msgid "Don't repeat" msgstr "Älä kertaa" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Älä näytä kohdassa \"Useita esittäjiä\"" @@ -1975,12 +1999,12 @@ msgstr "Muokkaa tunnistetta..." msgid "Edit track information" msgstr "Muokkaa kappaleen tietoja" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Muokkaa kappaleen tietoja..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Muokkaa kappaleen tietoja..." @@ -2130,7 +2154,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Vastaa --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Virhe" @@ -2139,6 +2163,11 @@ msgstr "Virhe" msgid "Error connecting MTP device %1" msgstr "MTP-laitteen %1 yhdistämisessä tapahtui virhe" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Virhe kappaleita kopioidessa" @@ -2267,6 +2296,11 @@ msgstr "Häivytyksen kesto" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2343,19 +2377,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "Tiedostoa %1 ei tunnistettu äänitiedostoksi." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2534,7 +2568,7 @@ msgstr "Yleiset asetukset" msgid "Genius Authentication" msgstr "" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2642,7 +2676,7 @@ msgstr "" msgid "Group by Genre/Artist/Album" msgstr "Järjestä tyylin/esittäjän/albumin mukaan" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2814,7 +2848,7 @@ msgstr "Lisää..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2834,6 +2868,11 @@ msgstr "" msgid "Intro tracks" msgstr "Intro-kappaleet" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "" @@ -2892,7 +2931,7 @@ msgstr "Suuri kansikuva" msgid "Large sidebar" msgstr "Suuri sivupalkki" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2923,7 +2962,7 @@ msgstr "" msgid "Left" msgstr "Vasen" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Kesto" @@ -3031,7 +3070,7 @@ msgstr "Kirjaudu sisään" msgid "Long term prediction profile (LTP)" msgstr "Long term prediction -profiili (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3066,13 +3105,22 @@ msgid "Lyrics providers" msgstr "Laulunsanojen tarjoajat" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Oletusprofiili (MAIN)" @@ -3224,7 +3272,7 @@ msgstr "Tarkkaile kirjastoa muutosten varalta" msgid "Months" msgstr "kuukautta" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Mieliala" @@ -3402,7 +3450,7 @@ msgid "None" msgstr "Ei mitään" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Yksikään valitsemistasi kappaleista ei sovellu kopioitavaksi laitteelle" @@ -3502,7 +3550,7 @@ msgstr "Avaa laite" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3540,7 +3588,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "" @@ -3548,7 +3596,7 @@ msgstr "" msgid "Organizing files" msgstr "" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3655,7 +3703,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3676,7 +3724,7 @@ msgstr "Pelkistetty sivupalkki" msgid "Play" msgstr "Toista" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3932,12 +3980,12 @@ msgstr "Aseta valitut kappaleet jonoon" msgid "Queue selected tracks to play next" msgstr "Lisää valitut kappaleet jonoon" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Toistojonoon" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3963,7 +4011,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Arvio" @@ -4163,7 +4211,7 @@ msgstr "Kertaa soittolista" msgid "Repeat track" msgstr "Kertaa kappale" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4199,7 +4247,7 @@ msgstr "" msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "" @@ -4303,7 +4351,7 @@ msgstr "Poista laite turvallisesti" msgid "Safely remove the device after copying" msgstr "Poista laite turvallisesti kopioinnin jälkeen" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4437,7 +4485,7 @@ msgstr "" msgid "Search for album covers..." msgstr "Etsi kansikuvia..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Hae tätä" @@ -4667,12 +4715,12 @@ msgstr "Näytä kirjastossa..." msgid "Show in file browser" msgstr "Näytä tiedostonhallinnassa" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Näytä tiedostoselaimessa..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Näytä kohdassa \"Useita esittäjiä\"" @@ -4773,7 +4821,7 @@ msgstr "Koko:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4869,7 +4917,7 @@ msgstr "Lajitteluperuste" msgid "Sorting" msgstr "Lajittelu" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Lähde" @@ -5177,7 +5225,7 @@ msgstr "" "Versio, johon juuri päivitit Strawberryn, vaatii kirjaston täydellisen " "läpikäynnin alla listattujen uusien ominaisuuksien vuoksi:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Albumilla on muita kappaleita" @@ -5285,7 +5333,7 @@ msgstr "" msgid "Time step" msgstr "Aikasiirtymä" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5336,7 +5384,7 @@ msgstr "Yhteensä tavuja siirretty" msgid "Total network requests made" msgstr "Yhteensä verkko pyyntöjä tehty" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5684,7 +5732,7 @@ msgstr "Ilman kansikuvaa:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5702,7 +5750,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Kirjoita metatiedot tallentaessa soittolista" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/fr.po b/src/translations/fr.po index daf68203..4c65673e 100644 --- a/src/translations/fr.po +++ b/src/translations/fr.po @@ -797,7 +797,7 @@ msgstr "Après avoir copié..." msgid "Albu&m cover" msgstr "&Pochette de l'album" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -817,7 +817,7 @@ msgstr "Album (volume idéal pour toutes les pistes)" msgid "Album - Disc" msgstr "Album - CD" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "Artiste de l'album" @@ -909,7 +909,7 @@ msgid "An error occurred loading the iTunes database" msgstr "" "Une erreur est survenue lors du chargement de la base de données iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "" @@ -939,7 +939,7 @@ msgstr "Ajouter explicite au titre de l'album pour les albums explicites" msgid "Append files/URLs to the playlist" msgstr "Ajouter des fichiers/URLs à la liste de lecture" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -994,7 +994,7 @@ msgstr "Visuel manuel" msgid "Art Unset" msgstr "Visuel non définie" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1156,7 +1156,7 @@ msgstr "Comportement" msgid "Best" msgstr "Meilleur" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "Codage en bit" @@ -1172,7 +1172,7 @@ msgid "Bit rate" msgstr "Débit" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1243,7 +1243,7 @@ msgstr "Lecture de CD disponible uniquement avec le moteur GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1406,7 +1406,7 @@ msgstr "" "Liste séparée par une virgule des classes:niveau, le niveau étant entre 1 et " "3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Commentaire" @@ -1423,7 +1423,7 @@ msgstr "Compléter les tags automatiquement" msgid "Complete tags automatically..." msgstr "Compléter les tags automatiquement..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1506,7 +1506,7 @@ msgstr "Copier vers la bibliothèque..." msgid "Copy to device" msgstr "Copie vers le périphérique" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copier sur le périphérique..." @@ -1520,6 +1520,16 @@ msgstr "" "~/snap pour éviter de perdre la configuration avant de désinstaller le " "composant logiciel enfichable :" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1534,6 +1544,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Impossible d'ouvrir le fichier CUE %1 pour la lecture : %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1769,11 +1783,11 @@ msgstr "Danse" msgid "Database corruption detected." msgstr "Corruption de la base de données détectée." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "Date de création" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "Date de modification" @@ -1826,7 +1840,7 @@ msgstr "Supprimer les fichiers" msgid "Delete from device..." msgstr "Supprimer du périphérique..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Supprimer du disque..." @@ -1864,6 +1878,16 @@ msgstr "Enlever cette piste de la file d'attente" msgid "Destination" msgstr "Destination" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Détails..." @@ -1910,7 +1934,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Désactivé" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1954,7 +1978,7 @@ msgstr "Ne plus afficher ce message." msgid "Don't repeat" msgstr "Ne pas répéter" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Ne pas classer dans la catégorie « Compilations d'artistes »" @@ -2056,12 +2080,12 @@ msgstr "Modifier le tag..." msgid "Edit track information" msgstr "Modifier la description de la piste" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Modifier la description de la piste..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Modifier la description des pistes..." @@ -2216,7 +2240,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalent à --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Erreur" @@ -2225,6 +2249,11 @@ msgstr "Erreur" msgid "Error connecting MTP device %1" msgstr "Erreur lors de la connexion au périphérique MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Erreur lors de la copie des morceaux" @@ -2351,6 +2380,11 @@ msgstr "Durée du fondu" msgid "Failed SQL query: %1" msgstr "Échec de la requête SQL : %1" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2427,19 +2461,19 @@ msgstr "Le fichier %1 n'existe pas." msgid "File %1 is not recognized as a valid audio file." msgstr "Le fichier %1 n'est pas un fichier audio valide." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "Nom du fichier" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "Nom du fichier (sans l'emplacement)" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "Taille du fichier" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "Type de fichier" @@ -2623,7 +2657,7 @@ msgstr "Configuration générale" msgid "Genius Authentication" msgstr "Authentification Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2731,7 +2765,7 @@ msgstr "Grouper par Genre/Artiste d'album/Album" msgid "Group by Genre/Artist/Album" msgstr "Grouper par Genre/Artiste/Album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2907,7 +2941,7 @@ msgstr "Insérer..." msgid "Install strawberry through PPA:" msgstr "Installer strawberry via PPA :" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2927,6 +2961,11 @@ msgstr "Affichage des onglets Internet" msgid "Intro tracks" msgstr "Introduction des pistes" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Réponse invalide du navigateur. Jeton manquant." @@ -2989,7 +3028,7 @@ msgstr "Grande pochette d'album" msgid "Large sidebar" msgstr "Barre latérale large" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "Dernière écoute" @@ -3020,7 +3059,7 @@ msgstr "Pistes les moins préférées" msgid "Left" msgstr "Gauche" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Durée" @@ -3127,7 +3166,7 @@ msgstr "Se connecter" msgid "Long term prediction profile (LTP)" msgstr "Profil de prédiction à long terme (PLT)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3162,13 +3201,22 @@ msgid "Lyrics providers" msgstr "Fournisseurs des paroles" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "Jeton MD5" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Profil principal (MAIN)" @@ -3324,7 +3372,7 @@ msgstr "Surveiller les modifications de la bibliothèque" msgid "Months" msgstr "Mois" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Humeur" @@ -3504,7 +3552,7 @@ msgid "None" msgstr "Aucun" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Aucun des morceaux sélectionnés n'était valide pour la copie vers un " @@ -3610,7 +3658,7 @@ msgstr "Ouvrir le périphérique" msgid "Open homepage" msgstr "Ouvrir la page d'accueil" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3648,7 +3696,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organiser les fichiers" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organisation des fichiers..." @@ -3656,7 +3704,7 @@ msgstr "Organisation des fichiers..." msgid "Organizing files" msgstr "Organisation des fichiers" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "Année d'origine" @@ -3767,7 +3815,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3788,7 +3836,7 @@ msgstr "Barre latérale simple" msgid "Play" msgstr "Lecture" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "Compteur d'écoutes" @@ -4060,12 +4108,12 @@ msgstr "" "Mettre les pistes sélectionnées en liste d'attente pour une lecture " "ultérieure" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Mettre en liste d'attente pour une lecture ultérieure" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4091,7 +4139,7 @@ msgstr "Radios" msgid "Random" msgstr "Aléatoire" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Notation" @@ -4300,7 +4348,7 @@ msgstr "Répéter la liste de lecture" msgid "Repeat track" msgstr "Répéter la piste" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4336,7 +4384,7 @@ msgstr "La réponse de Tidal est : élément de requête manquante." msgid "Repopulate" msgstr "Rafraîchir" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Réanalyser le morceau" @@ -4439,7 +4487,7 @@ msgstr "Enlever le périphérique en toute sécurité" msgid "Safely remove the device after copying" msgstr "Enlever le périphérique en toute sécurité à la fin de la copie" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "Échantillonnage" @@ -4579,7 +4627,7 @@ msgstr "Délais de recherche" msgid "Search for album covers..." msgstr "Rechercher des pochettes pour cet album..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Rechercher cela" @@ -4812,12 +4860,12 @@ msgstr "Afficher dans la bibliothèque..." msgid "Show in file browser" msgstr "Afficher dans l'explorateur de fichiers" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Afficher dans le navigateur de fichiers..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Classer dans la catégorie « Compilations d'artistes »" @@ -4918,7 +4966,7 @@ msgstr "Taille :" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "Compteur de morceaux sautés" @@ -5017,7 +5065,7 @@ msgstr "Trier les morceaux par" msgid "Sorting" msgstr "Tri" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Source" @@ -5336,7 +5384,7 @@ msgstr "" "La nouvelle version de Strawberry nécessite une mise à jour de votre " "bibliothèque pour supporter les nouvelles fonctionnalités suivantes :" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Il y a d'autres morceaux dans cet album" @@ -5456,7 +5504,7 @@ msgstr "" msgid "Time step" msgstr "Pas temporel" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5507,7 +5555,7 @@ msgstr "Nombre total d'octets transférés" msgid "Total network requests made" msgstr "Nombre total de requêtes réseau effectuées" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5860,7 +5908,7 @@ msgstr "Sans pochette :" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Travailler en mode hors connexion (uniquement scrobbles en cache)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5882,7 +5930,16 @@ msgstr "Écrire tous les compteur d'écoutes et notations dans les fichiers" msgid "Write metadata when saving playlists" msgstr "Écrire des métadonnées lors de la sauvegarde des listes de lecture" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/hu.po b/src/translations/hu.po index 60374e36..53d20bfd 100644 --- a/src/translations/hu.po +++ b/src/translations/hu.po @@ -764,7 +764,7 @@ msgstr "Másolás után…" msgid "Albu&m cover" msgstr "&Albumborító" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -784,7 +784,7 @@ msgstr "Album (ideális hangerő minden számhoz)" msgid "Album - Disc" msgstr "Album - Lemez" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -874,7 +874,7 @@ msgstr "Mindig indítsa el a lejátszást" msgid "An error occurred loading the iTunes database" msgstr "Hiba történt az iTunes adatbázis betöltésekor" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Hiba történt a(z) „%1” metaadatainak írásakor" @@ -903,7 +903,7 @@ msgstr "Szókimondó felirat hozzáfűzése a korhatáros albumokhoz" msgid "Append files/URLs to the playlist" msgstr "Fájlok/URL-ek hozzáfűzése a lejátszólistához" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -956,7 +956,7 @@ msgstr "Kézi albumborító" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1117,7 +1117,7 @@ msgstr "Működés" msgid "Best" msgstr "Legjobb" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1133,7 +1133,7 @@ msgid "Bit rate" msgstr "Bitráta" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1205,7 +1205,7 @@ msgstr "A CD-lejátszás csak a GStreamer motorral érhető el." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1364,7 +1364,7 @@ msgstr "" "Vesszővel elválasztott lista az osztály:szint pároknak, a szintek 0-3 " "értékeket vehetnek fel" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Megjegyzés" @@ -1381,7 +1381,7 @@ msgstr "Címkék automatikus kiegészítése" msgid "Complete tags automatically..." msgstr "Címkék automatikus kiegészítése…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1463,7 +1463,7 @@ msgstr "Másolás a gyűjteménybe…" msgid "Copy to device" msgstr "Másolás eszközre" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Másolás eszközre…" @@ -1477,6 +1477,16 @@ msgstr "" "könyvtárból, hogy elkerülje a konfiguráció elvesztését a snap eltávolítása " "előtt:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1491,6 +1501,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Nem sikerült olvasásra megnyitni a(z) %1 CUE-fájlt: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "Nem lehet megnyitni az URL-t. Próbálja meg böngészőben megnyitni" @@ -1724,11 +1738,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Adatbázis-sérülés észlelve." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1781,7 +1795,7 @@ msgstr "Fájlok törlése" msgid "Delete from device..." msgstr "Törlés az eszközről…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Törlés a lemezről…" @@ -1819,6 +1833,16 @@ msgstr "Szám eltávolítása a lejátszási sorból" msgid "Destination" msgstr "Cél" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Részletek…" @@ -1865,7 +1889,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Letiltva" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1909,7 +1933,7 @@ msgstr "Ne jelenítse meg újra ezt az üzenetet." msgid "Don't repeat" msgstr "Nincs ismétlés" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Ne jelenítse meg a különböző előadók között" @@ -2008,12 +2032,12 @@ msgstr "Címke szerkesztése…" msgid "Edit track information" msgstr "Száminformációk szerkesztése" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Száminformációk szerkesztése…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Száminformációk szerkesztése…" @@ -2163,7 +2187,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Megegyezik a --log-levels *:3 kapcsolóval" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Hiba" @@ -2172,6 +2196,11 @@ msgstr "Hiba" msgid "Error connecting MTP device %1" msgstr "Hiba az MTP-eszköz csatlakoztatásakor: %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Hiba történt a számok másolásakor" @@ -2298,6 +2327,11 @@ msgstr "Elhalkulás hossza" msgid "Failed SQL query: %1" msgstr "Sikertelen SQL lekérdezés: %1" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2374,19 +2408,19 @@ msgstr "A(z) %1 fájl nem létezik." msgid "File %1 is not recognized as a valid audio file." msgstr "A(z) %1 fájl nem ismerhető fel érvényes hangfájlként." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2567,7 +2601,7 @@ msgstr "Általános beállítások" msgid "Genius Authentication" msgstr "Genius hitelesítés" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2675,7 +2709,7 @@ msgstr "Csoportosítás műfaj/albumelőadó/album szerint" msgid "Group by Genre/Artist/Album" msgstr "Csoportosítás műfaj/előadó/album szerint" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2850,7 +2884,7 @@ msgstr "Beszúrás…" msgid "Install strawberry through PPA:" msgstr "A strawberry telepítése PPA-ból:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2870,6 +2904,11 @@ msgstr "Internetes lapnézet" msgid "Intro tracks" msgstr "Bevezető számok" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Érvénytelen válasz a böngészőből. Hiányzó token." @@ -2930,7 +2969,7 @@ msgstr "Nagy albumborító" msgid "Large sidebar" msgstr "Nagy oldalsáv" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2961,7 +3000,7 @@ msgstr "Legkevésbé kedvelt számok" msgid "Left" msgstr "Bal" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Időtartam" @@ -3068,7 +3107,7 @@ msgstr "Bejelentkezés" msgid "Long term prediction profile (LTP)" msgstr "Hosszú távú előrejelzésen alapuló profil (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3103,13 +3142,22 @@ msgid "Lyrics providers" msgstr "Dalszöveg-szolgáltatók" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5 token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Fő profil (MAIN)" @@ -3261,7 +3309,7 @@ msgstr "Gyűjtemény figyelése változások után" msgid "Months" msgstr "Hónapok" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Hangulat" @@ -3439,7 +3487,7 @@ msgid "None" msgstr "Egyik sem" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Egy kiválasztott szám sem alkalmas az eszközre való másoláshoz" @@ -3543,7 +3591,7 @@ msgstr "Eszköz megnyitása" msgid "Open homepage" msgstr "Honlap megnyitása" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3581,7 +3629,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Fájlok rendszerezése" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Fájlok rendszerezése…" @@ -3589,7 +3637,7 @@ msgstr "Fájlok rendszerezése…" msgid "Organizing files" msgstr "Fájlok rendszerezése" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3700,7 +3748,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3721,7 +3769,7 @@ msgstr "Egyszerű oldalsáv" msgid "Play" msgstr "Lejátszás" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3988,12 +4036,12 @@ msgstr "Kijelölt számok hozzáadása a lejátszási sorhoz" msgid "Queue selected tracks to play next" msgstr "Kijelölt számok lejátszása következőként" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Lejátszás következőként" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4019,7 +4067,7 @@ msgstr "Rádiók" msgid "Random" msgstr "Véletlenszerű" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Értékelés" @@ -4226,7 +4274,7 @@ msgstr "Lejátszólista ismétlése" msgid "Repeat track" msgstr "Szám ismétlése" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4262,7 +4310,7 @@ msgstr "A Tidal válaszából hiányoznak a lekérdezett elemek." msgid "Repopulate" msgstr "Újrafeltöltés" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Számok újraellenőrzése" @@ -4365,7 +4413,7 @@ msgstr "Eszköz biztonságos eltávolítása" msgid "Safely remove the device after copying" msgstr "Eszköz biztonságos eltávolítása másolás után" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4499,7 +4547,7 @@ msgstr "Keresés késleltetése" msgid "Search for album covers..." msgstr "Albumborítók keresése…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Keresés erre" @@ -4729,12 +4777,12 @@ msgstr "Megjelenítés a gyűjteményben…" msgid "Show in file browser" msgstr "Megnyitás a fájlböngészőben" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Megnyitás a fájlböngészőben…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Megjelenítés a különböző előadók között" @@ -4835,7 +4883,7 @@ msgstr "Méret:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4934,7 +4982,7 @@ msgstr "Számok rendezése eszerint" msgid "Sorting" msgstr "Rendezés" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Forrás" @@ -5247,7 +5295,7 @@ msgstr "" "A Strawberry most frissült verziójának szüksége van a teljes gyűjtemény " "újraolvasására az alább sorolt új funkciók használatához:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Más számok is vannak ebben az albumban" @@ -5358,7 +5406,7 @@ msgstr "" msgid "Time step" msgstr "Léptetés ideje" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5409,7 +5457,7 @@ msgstr "Összes átküldött bájt" msgid "Total network requests made" msgstr "Összes hálózati kérés" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5761,7 +5809,7 @@ msgstr "Borító nélkül:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Működés kapcsolat nélküli módban (csak gyorsítótárazás)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5779,7 +5827,16 @@ msgstr "Az összes lejátszásszám és értékelés fájlba írása" msgid "Write metadata when saving playlists" msgstr "Metaadatok írása a lejátszólisták mentésekor" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/id.po b/src/translations/id.po index 437f3d72..68c8a315 100644 --- a/src/translations/id.po +++ b/src/translations/id.po @@ -746,7 +746,7 @@ msgstr "Setelah menyalin..." msgid "Albu&m cover" msgstr "Sa&mpul album" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -766,7 +766,7 @@ msgstr "Album (kenyaringan ideal untuk semua trek)" msgid "Album - Disc" msgstr "Album - Cakram" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -855,7 +855,7 @@ msgstr "Selalu mulai memutar" msgid "An error occurred loading the iTunes database" msgstr "Sebuah galat terjadi saat memuat basis data iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Sebuah galat terjadi saat menulis metadata ke '%1'" @@ -884,7 +884,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "Tambahkan berkas/URL ke daftar putar" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -935,7 +935,7 @@ msgstr "" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1096,7 +1096,7 @@ msgstr "Perilaku" msgid "Best" msgstr "Terbaik" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1112,7 +1112,7 @@ msgid "Bit rate" msgstr "Laju bit" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1183,7 +1183,7 @@ msgstr "Pemutaran CD hanya tersedia dengan mesin GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1338,7 +1338,7 @@ msgstr "" msgid "Comma separated list of class:level, level is 0-3" msgstr "Daftar yang dipisahkan koma dari kelas:level, level adalah 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Komentar" @@ -1355,7 +1355,7 @@ msgstr "Lengkapi tag secara otomatis" msgid "Complete tags automatically..." msgstr "Lengkapi tag secara otomatis..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1437,7 +1437,7 @@ msgstr "Salin ke pustaka..." msgid "Copy to device" msgstr "" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Salin ke perangkat..." @@ -1448,6 +1448,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1462,6 +1472,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1693,11 +1707,11 @@ msgstr "Dansa" msgid "Database corruption detected." msgstr "Kerusakan basis data terdeteksi." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1750,7 +1764,7 @@ msgstr "Hapus berkas" msgid "Delete from device..." msgstr "Hapus dari perangkat..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Hapus dari diska..." @@ -1788,6 +1802,16 @@ msgstr "Buang antrean trek" msgid "Destination" msgstr "Tujuan" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detail..." @@ -1834,7 +1858,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Nonfungsi" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1878,7 +1902,7 @@ msgstr "" msgid "Don't repeat" msgstr "Jangan ulang" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Jangan tampilkan di artis beragam" @@ -1975,12 +1999,12 @@ msgstr "Sunting tag..." msgid "Edit track information" msgstr "Sunting informasi trek" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Sunting informasi trek..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Sunting informasi trek..." @@ -2130,7 +2154,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Setara dengan --log-level *: 3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Kesalahan" @@ -2139,6 +2163,11 @@ msgstr "Kesalahan" msgid "Error connecting MTP device %1" msgstr "Terjadi kesalahan saat menyambungkan perangkat MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Terjadi kesalahan saat menyalin lagu" @@ -2265,6 +2294,11 @@ msgstr "Durasi lesap" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2341,19 +2375,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "Berkas %1 bukanlah berkas audio yang benar." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2532,7 +2566,7 @@ msgstr "Setelan umum" msgid "Genius Authentication" msgstr "" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2640,7 +2674,7 @@ msgstr "Grup berdasarkan Genre/Artis album/Album" msgid "Group by Genre/Artist/Album" msgstr "Grup berdasarkan Genre/Artis/Album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2810,7 +2844,7 @@ msgstr "Sisipkan..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2830,6 +2864,11 @@ msgstr "" msgid "Intro tracks" msgstr "Trek intro" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Balasan tidak benar dari peramban web. Token tidak tersedia." @@ -2888,7 +2927,7 @@ msgstr "Sampul album besar" msgid "Large sidebar" msgstr "Bilah sisi besar" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2919,7 +2958,7 @@ msgstr "" msgid "Left" msgstr "Kiri" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Durasi" @@ -3026,7 +3065,7 @@ msgstr "Masuk" msgid "Long term prediction profile (LTP)" msgstr "Profil prediksi jangka panjang (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3061,13 +3100,22 @@ msgid "Lyrics providers" msgstr "" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Profil utama (MAIN)" @@ -3219,7 +3267,7 @@ msgstr "Monitor perubahan pustaka" msgid "Months" msgstr "" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Mood" @@ -3397,7 +3445,7 @@ msgid "None" msgstr "Nihil" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Tidak satu pun dari lagu yang dipilih cocok untuk disalin ke perangkat" @@ -3498,7 +3546,7 @@ msgstr "Buka perangkat" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3536,7 +3584,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "" @@ -3544,7 +3592,7 @@ msgstr "" msgid "Organizing files" msgstr "" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3651,7 +3699,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3672,7 +3720,7 @@ msgstr "Bilah sisi polos" msgid "Play" msgstr "Putar" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3928,12 +3976,12 @@ msgstr "Antre trek terpilih" msgid "Queue selected tracks to play next" msgstr "Antre trek terpilih untuk diputar selanjutnya" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Antre untuk diputar selanjutnya" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3959,7 +4007,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "" @@ -4159,7 +4207,7 @@ msgstr "Ulang daftar putar" msgid "Repeat track" msgstr "Ulang trek" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4195,7 +4243,7 @@ msgstr "Balasan dari Tidal tidak memiliki artikel yang diminta." msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Pindai ulang lagu" @@ -4298,7 +4346,7 @@ msgstr "Secara aman melepas perangkat" msgid "Safely remove the device after copying" msgstr "Secara aman melepas perangkat setelah menyalin" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4432,7 +4480,7 @@ msgstr "Jeda pencarian" msgid "Search for album covers..." msgstr "Cari sampul album..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Cari ini" @@ -4662,12 +4710,12 @@ msgstr "Tampilkan di pustaka..." msgid "Show in file browser" msgstr "Tampilkan di peramban berkas" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Tampilkan di peramban berkas..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Tampilkan di artis beragam" @@ -4768,7 +4816,7 @@ msgstr "Ukuran:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4867,7 +4915,7 @@ msgstr "" msgid "Sorting" msgstr "" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Sumber" @@ -5175,7 +5223,7 @@ msgstr "" "Versi Strawberry yang baru saja Anda perbarui membutuhkan pemindaian ulang " "pustaka menyeluruh karena fitur baru yang tercantum di bawah ini:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Ada lagu lainnya di dalam album ini" @@ -5288,7 +5336,7 @@ msgstr "" msgid "Time step" msgstr "Selang waktu" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5339,7 +5387,7 @@ msgstr "Jumlah byte yang ditransfer" msgid "Total network requests made" msgstr "Total permintaan jaringan yang dibuat" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5687,7 +5735,7 @@ msgstr "Tanpa sampul:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Bekerja di modus offline (Hanya cache scrobble)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5705,7 +5753,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Tulis metadata saat menyimpan daftar putar" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/it.po b/src/translations/it.po index 030260e2..c88c62ba 100644 --- a/src/translations/it.po +++ b/src/translations/it.po @@ -763,7 +763,7 @@ msgstr "Dopo la copia..." msgid "Albu&m cover" msgstr "Copertina albu&m" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -783,7 +783,7 @@ msgstr "Album (volume ideale per tutte le tracce)" msgid "Album - Disc" msgstr "Album - Disco" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -875,7 +875,7 @@ msgid "An error occurred loading the iTunes database" msgstr "" "Si è verificato un errore durante il caricamento del database di iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Si è verificato un errore durante la scrittura dei metadati in '%1'" @@ -904,7 +904,7 @@ msgstr "Aggiungi esplicito al titolo dell'album per gli album espliciti" msgid "Append files/URLs to the playlist" msgstr "Aggiungi file/URL alla playlist" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -959,7 +959,7 @@ msgstr "Arte manuale" msgid "Art Unset" msgstr "Copertina non impostata" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1120,7 +1120,7 @@ msgstr "Comportamento" msgid "Best" msgstr "Migliore" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1136,7 +1136,7 @@ msgid "Bit rate" msgstr "Bitrate" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1207,7 +1207,7 @@ msgstr "La riproduzione CD è disponibile unicamente tramite motore GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1362,7 +1362,7 @@ msgstr "Ricerca raccolta" msgid "Comma separated list of class:level, level is 0-3" msgstr "Elenco separato da virgole (classe:livello, dove livello è 0-3)" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Commento" @@ -1379,7 +1379,7 @@ msgstr "Completa automaticamente i tag" msgid "Complete tags automatically..." msgstr "Completa automaticamente i tag..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1462,7 +1462,7 @@ msgstr "Copia nella raccolta..." msgid "Copy to device" msgstr "Copia nel dispositivo" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copia nel dispositivo..." @@ -1475,6 +1475,16 @@ msgstr "" "Prima di disinstallare lo snap copia il straw.conf e straw.db dalla cartella " "~/snap per evitare di perdere la configurazione:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1489,6 +1499,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Impossibile aprire il file CUE '%1' per la lettura: '%2'" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "Impossibile aprire l'URL, apri questo URL nel browser" @@ -1722,11 +1736,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Rilevato danneggiamento del database." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1779,7 +1793,7 @@ msgstr "Elimina i file" msgid "Delete from device..." msgstr "Elimina da dispositivo..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Elimina dal disco..." @@ -1817,6 +1831,16 @@ msgstr "Rimuovi tracce dalla coda" msgid "Destination" msgstr "Destinazione" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Dettagli..." @@ -1863,7 +1887,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Disabilitata" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1907,7 +1931,7 @@ msgstr "Non visualizzare più questo messaggio." msgid "Don't repeat" msgstr "Non ripetere" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Non mostrare in artisti vari" @@ -2007,12 +2031,12 @@ msgstr "Modifica tag..." msgid "Edit track information" msgstr "Modifica informazioni traccia" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Modifica informazioni traccia..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Modifica le informazioni tracce..." @@ -2164,7 +2188,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalente a --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Errore" @@ -2173,6 +2197,11 @@ msgstr "Errore" msgid "Error connecting MTP device %1" msgstr "Errore durante la connessione MTP al dispositivo '%1'" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Errore durante la copia dei brani" @@ -2301,6 +2330,11 @@ msgstr "Durata dissolvenza" msgid "Failed SQL query: %1" msgstr "Interrogazione SQL non riuscita: %1" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2377,19 +2411,19 @@ msgstr "Il file '%1' non esiste." msgid "File %1 is not recognized as a valid audio file." msgstr "Il file '%1' non è stato riconosciuto come un file audio valido." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2570,7 +2604,7 @@ msgstr "Impostazioni generali" msgid "Genius Authentication" msgstr "Autenticazione Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2679,7 +2713,7 @@ msgstr "Raggruppa per genere/artista album/album" msgid "Group by Genre/Artist/Album" msgstr "Raggruppa per genere/artista/album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2856,7 +2890,7 @@ msgstr "Inserisci..." msgid "Install strawberry through PPA:" msgstr "Installa Strawberry tramite PPA:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2876,6 +2910,11 @@ msgstr "Vista schede internet" msgid "Intro tracks" msgstr "Tracce introduzione" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Risposta non valida dal browser web. Token mancante." @@ -2936,7 +2975,7 @@ msgstr "Copertina grande" msgid "Large sidebar" msgstr "Pannello laterale grande" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2967,7 +3006,7 @@ msgstr "Tracce meno preferite" msgid "Left" msgstr "Sinistra" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Durata" @@ -3074,7 +3113,7 @@ msgstr "Accedi" msgid "Long term prediction profile (LTP)" msgstr "Profilo con predizione di lungo termine (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3109,13 +3148,22 @@ msgid "Lyrics providers" msgstr "Fornitori di testi" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "Token MD5" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Profilo principale (MAIN)" @@ -3267,7 +3315,7 @@ msgstr "Monitora cambiamenti raccolta" msgid "Months" msgstr "Mesi" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Umore" @@ -3445,7 +3493,7 @@ msgid "None" msgstr "Nessuna" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Nessuno dei brani selezionati era adatto alla copia in un dispositivo" @@ -3549,7 +3597,7 @@ msgstr "Apri dispositivo" msgid "Open homepage" msgstr "Apri sito web" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3587,7 +3635,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organizza file" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organizza file..." @@ -3595,7 +3643,7 @@ msgstr "Organizza file..." msgid "Organizing files" msgstr "Organizzazione file" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3706,7 +3754,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3727,7 +3775,7 @@ msgstr "Barra laterale semplice" msgid "Play" msgstr "Riproduci" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3996,12 +4044,12 @@ msgstr "Accoda le tracce selezionate" msgid "Queue selected tracks to play next" msgstr "Accoda i brani selezionati per riprodurli successivamente" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Accoda cosa riprodurre dopo" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4027,7 +4075,7 @@ msgstr "Radio" msgid "Random" msgstr "Casuale" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Valutazione" @@ -4235,7 +4283,7 @@ msgstr "Ripeti playlist" msgid "Repeat track" msgstr "Ripeti traccia" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4271,7 +4319,7 @@ msgstr "Alla risposta del server Tidal mancano elementi della richiesta." msgid "Repopulate" msgstr "Ripopola" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Riscansione brano/i" @@ -4374,7 +4422,7 @@ msgstr "Rimuovi il dispositivo in sicurezza" msgid "Safely remove the device after copying" msgstr "Rimuovi il dispositivo in sicurezza al termine della copia" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4508,7 +4556,7 @@ msgstr "Ritardo ricerca" msgid "Search for album covers..." msgstr "Cerca copertine album..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Cerca questo" @@ -4743,12 +4791,12 @@ msgstr "Visualizza nella raccolta..." msgid "Show in file browser" msgstr "Visualizza nel navigatore file" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Visualizza nel navigatore file..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Visualizza in artisti vari" @@ -4849,7 +4897,7 @@ msgstr "Dimensioni:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4948,7 +4996,7 @@ msgstr "Ordina i brani per" msgid "Sorting" msgstr "Ordinamento" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Sorgente" @@ -5265,7 +5313,7 @@ msgstr "" "La versione di Strawberry appena aggiornata richiede una scansione completa " "della raccolta, a causa delle nuove funzionalità elencate di seguito:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Ci sono altri brani in questo album" @@ -5384,7 +5432,7 @@ msgstr "" msgid "Time step" msgstr "Intervallo di tempo" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5435,7 +5483,7 @@ msgstr "Totale byte trasferiti" msgid "Total network requests made" msgstr "Totale richieste di rete effettuate" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5789,7 +5837,7 @@ msgstr "Senza copertina:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Lavora in modalità offline (solo scrobble in cache)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5808,7 +5856,16 @@ msgstr "Scrivi tutti i numeri riproduzioni e valutazioni nei file" msgid "Write metadata when saving playlists" msgstr "Quando si salvano le playlist scrivi i metadati" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/ja.po b/src/translations/ja.po index 58e359c5..bf98eb4c 100644 --- a/src/translations/ja.po +++ b/src/translations/ja.po @@ -749,7 +749,7 @@ msgstr "コピー後..." msgid "Albu&m cover" msgstr "アルバムカバー(&m)" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -769,7 +769,7 @@ msgstr "アルバム (すべてのトラックで最適な音量)" msgid "Album - Disc" msgstr "アルバム - ディスク" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -858,7 +858,7 @@ msgstr "常に再生を開始する" msgid "An error occurred loading the iTunes database" msgstr "iTunes のデータベースを読み込み中にエラーが発生しました" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "メタデータを '%1' へ書き込み中にエラーが発生しました" @@ -887,7 +887,7 @@ msgstr "露骨な表現を含むアルバムのタイトルに露骨な表現を msgid "Append files/URLs to the playlist" msgstr "ファイル・URL をプレイリストに追加する" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -938,7 +938,7 @@ msgstr "手動アート" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1099,7 +1099,7 @@ msgstr "動作" msgid "Best" msgstr "良" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1115,7 +1115,7 @@ msgid "Bit rate" msgstr "ビットレート" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1186,7 +1186,7 @@ msgstr "CD の再生は GStreamer エンジンでのみ使用できます" msgid "CDDA" msgstr "オーディオ CD" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1341,7 +1341,7 @@ msgstr "コレクション検索" msgid "Comma separated list of class:level, level is 0-3" msgstr "コンマ区切りの クラス:レベル のリスト、レベルは 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "コメント" @@ -1358,7 +1358,7 @@ msgstr "タグの自動補完" msgid "Complete tags automatically..." msgstr "タグを自動補完..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1439,7 +1439,7 @@ msgstr "ライブラリへコピー..." msgid "Copy to device" msgstr "デバイスへコピー" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "デバイスへコピー..." @@ -1450,6 +1450,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1463,6 +1473,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "URLを開けません。ブラウザで開いてください。" @@ -1692,11 +1706,11 @@ msgstr "ダンス" msgid "Database corruption detected." msgstr "データベースの不整合が検出されました。" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1749,7 +1763,7 @@ msgstr "ファイルの削除" msgid "Delete from device..." msgstr "デバイスから削除..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "ディスクから削除..." @@ -1787,6 +1801,16 @@ msgstr "トラックをキューから削除" msgid "Destination" msgstr "フォルダー" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "詳細..." @@ -1833,7 +1857,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "無効" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1877,7 +1901,7 @@ msgstr "このメッセージを再度表示しない" msgid "Don't repeat" msgstr "リピートしない" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "さまざまなアーティストに表示しない" @@ -1974,12 +1998,12 @@ msgstr "タグの編集..." msgid "Edit track information" msgstr "トラック情報の編集" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "トラック情報の編集..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "トラック情報の編集..." @@ -2129,7 +2153,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "--log-levels *:3 と同じ" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "エラー" @@ -2138,6 +2162,11 @@ msgstr "エラー" msgid "Error connecting MTP device %1" msgstr "MTP デバイス %1 の接続エラー" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "曲のコピーエラー" @@ -2264,6 +2293,11 @@ msgstr "フェードの長さ" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2340,19 +2374,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "ファイル %1 は正常な音声ファイルではありません" -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2529,7 +2563,7 @@ msgstr "全般設定" msgid "Genius Authentication" msgstr "Genius 認証" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2637,7 +2671,7 @@ msgstr "ジャンル/アルバム、アーティスト/アルバムでグルー msgid "Group by Genre/Artist/Album" msgstr "ジャンル/アーティスト/アルバムでグループ化" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2803,7 +2837,7 @@ msgstr "挿入..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2823,6 +2857,11 @@ msgstr "" msgid "Intro tracks" msgstr "イントロ再生" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "ブラウザからの不正な応答 トークンがありません" @@ -2881,7 +2920,7 @@ msgstr "大きいアルバムカバー" msgid "Large sidebar" msgstr "大きいサイドバー" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2912,7 +2951,7 @@ msgstr "" msgid "Left" msgstr "左" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "長さ" @@ -3019,7 +3058,7 @@ msgstr "ログイン" msgid "Long term prediction profile (LTP)" msgstr "Long Term Prediction プロファイル (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3054,13 +3093,22 @@ msgid "Lyrics providers" msgstr "" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Main プロファイル (MAIN)" @@ -3212,7 +3260,7 @@ msgstr "ライブラリの変更を監視する" msgid "Months" msgstr "月" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "ムード" @@ -3388,7 +3436,7 @@ msgid "None" msgstr "なし" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "デバイスへのコピーに適切な曲が選択されていません" @@ -3487,7 +3535,7 @@ msgstr "デバイスを開く" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3525,7 +3573,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "ファイルを管理" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "ファイルを管理..." @@ -3533,7 +3581,7 @@ msgstr "ファイルを管理..." msgid "Organizing files" msgstr "ファイルを管理中" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3640,7 +3688,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3661,7 +3709,7 @@ msgstr "プレーンサイドバー" msgid "Play" msgstr "再生" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3919,12 +3967,12 @@ msgstr "選択されたトラックをキューに追加" msgid "Queue selected tracks to play next" msgstr "選択したトラックを次に再生する" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "次に再生する" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3950,7 +3998,7 @@ msgstr "" msgid "Random" msgstr "ランダム" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "評価" @@ -4150,7 +4198,7 @@ msgstr "プレイリストをリピート" msgid "Repeat track" msgstr "トラックをリピート" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4186,7 +4234,7 @@ msgstr "Tidal からの返信にクエリアイテムがありません。" msgid "Repopulate" msgstr "再装着" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "曲を再スキャン" @@ -4287,7 +4335,7 @@ msgstr "デバイスを安全に取り外す" msgid "Safely remove the device after copying" msgstr "コピー後にデバイスを安全に取り外す" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4421,7 +4469,7 @@ msgstr "" msgid "Search for album covers..." msgstr "アルバムカバーの検索..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "" @@ -4651,12 +4699,12 @@ msgstr "ライブラリーに表示..." msgid "Show in file browser" msgstr "ファイルブラウザーで表示" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "ファイルブラウザーで表示..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "さまざまなアーティストに表示" @@ -4757,7 +4805,7 @@ msgstr "サイズ:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4853,7 +4901,7 @@ msgstr "曲を並べ替え" msgid "Sorting" msgstr "整列" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "ソース" @@ -5159,7 +5207,7 @@ msgid "" "rescan because of the new features listed below:" msgstr "更新したこのバージョンの Strawberry は、次の新機能によりライブラリ全体の再スキャンが必要です。" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "このアルバムにはほかの曲があります" @@ -5256,7 +5304,7 @@ msgstr "" msgid "Time step" msgstr "時間刻み" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5307,7 +5355,7 @@ msgstr "合計転送バイト数" msgid "Total network requests made" msgstr "合計ネットワーク要求回数" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5651,7 +5699,7 @@ msgstr "カバーなし:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5669,7 +5717,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/ko.po b/src/translations/ko.po index 0e07277d..a4df951b 100644 --- a/src/translations/ko.po +++ b/src/translations/ko.po @@ -748,7 +748,7 @@ msgstr "복사한 후..." msgid "Albu&m cover" msgstr "앨범아트(&M)" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -768,7 +768,7 @@ msgstr "앨범(모든 트랙에 이상적인 음량)" msgid "Album - Disc" msgstr "앨범 - 디스크" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -857,7 +857,7 @@ msgstr "항상 재생 시작" msgid "An error occurred loading the iTunes database" msgstr "iTunes 데이터베이스를 불러오는 중 오류 발생" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "'%1'에 메타데이터를 쓰는 중 오류 발생" @@ -886,7 +886,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "재생 목록에 파일/URL 추가" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -937,7 +937,7 @@ msgstr "" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1098,7 +1098,7 @@ msgstr "행동" msgid "Best" msgstr "최고" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1114,7 +1114,7 @@ msgid "Bit rate" msgstr "비트 전송률" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1185,7 +1185,7 @@ msgstr "CD 재생은 GStreamer 엔진에서만 지원합니다." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1340,7 +1340,7 @@ msgstr "라이브러리 검색" msgid "Comma separated list of class:level, level is 0-3" msgstr "쉼표로 구분된 class:level 목록, level은 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "설명" @@ -1357,7 +1357,7 @@ msgstr "자동으로 태그 완성" msgid "Complete tags automatically..." msgstr "자동으로 태그 완성..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1438,7 +1438,7 @@ msgstr "라이브러리로 복사..." msgid "Copy to device" msgstr "디바이스에 복사" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "장치로 복사..." @@ -1449,6 +1449,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1462,6 +1472,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "URL을 열 수 없습니다. 웹 브라우저에서 여십시오" @@ -1689,11 +1703,11 @@ msgstr "댄스" msgid "Database corruption detected." msgstr "데이터베이스가 손상되었습니다." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1746,7 +1760,7 @@ msgstr "파일 삭제" msgid "Delete from device..." msgstr "장치에서 삭제..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "디스크에서 삭제..." @@ -1784,6 +1798,16 @@ msgstr "대기열에서 트랙 삭제" msgid "Destination" msgstr "대상" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "자세히..." @@ -1830,7 +1854,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "사용 안 함" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1874,7 +1898,7 @@ msgstr "메세지 다시 보지 않기" msgid "Don't repeat" msgstr "반복하지 않기" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "여러 아티스로 표시하지 않기" @@ -1971,12 +1995,12 @@ msgstr "태그 편집..." msgid "Edit track information" msgstr "트랙 정보 편집" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "트랙 정보 편집..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "트랙 정보 편집..." @@ -2126,7 +2150,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "--log-levels *:3과 동일함" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "오류" @@ -2135,6 +2159,11 @@ msgstr "오류" msgid "Error connecting MTP device %1" msgstr "MTP 장치 %1 연결 오류" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "노래 복사 오류" @@ -2261,6 +2290,11 @@ msgstr "페이드 시간" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2337,19 +2371,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "%1 파일은 올바른 오디오 파일이 아닌 것 같습니다." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2527,7 +2561,7 @@ msgstr "일반 설정" msgid "Genius Authentication" msgstr "" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2635,7 +2669,7 @@ msgstr "장르/앨범 아티스트/앨범으로 그룹" msgid "Group by Genre/Artist/Album" msgstr "장르/아티스트/앨범으로 그룹" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2801,7 +2835,7 @@ msgstr "삽입..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2821,6 +2855,11 @@ msgstr "" msgid "Intro tracks" msgstr "인트로 트랙" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "웹 브라우저에서 잘못된 응답을 받았습니다. 토큰이 없습니다." @@ -2879,7 +2918,7 @@ msgstr "큰 앨범아트" msgid "Large sidebar" msgstr "큰 사이드바" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2910,7 +2949,7 @@ msgstr "" msgid "Left" msgstr "왼쪽" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "길이" @@ -3017,7 +3056,7 @@ msgstr "로그인" msgid "Long term prediction profile (LTP)" msgstr "장기 예측 프로필(LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3052,13 +3091,22 @@ msgid "Lyrics providers" msgstr "가사 가져오기" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "메인 프로필(MAIN)" @@ -3210,7 +3258,7 @@ msgstr "라이브러리 변화 감지" msgid "Months" msgstr "" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "무드" @@ -3386,7 +3434,7 @@ msgid "None" msgstr "없음" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "선택한 음악을 장치에 복사하기에 적합하지 않음" @@ -3485,7 +3533,7 @@ msgstr "장치 열기" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3523,7 +3571,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "" @@ -3531,7 +3579,7 @@ msgstr "" msgid "Organizing files" msgstr "" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3638,7 +3686,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3659,7 +3707,7 @@ msgstr "일반 사이드바" msgid "Play" msgstr "재생" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3915,12 +3963,12 @@ msgstr "선택한 트랙을 대기열에 추가" msgid "Queue selected tracks to play next" msgstr "선택한 트랙을 다음에 재생하도록 대기열에 추가" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "다음에 재생할 대기열에 추가" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3946,7 +3994,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "" @@ -4146,7 +4194,7 @@ msgstr "재생 목록 반복" msgid "Repeat track" msgstr "한 곡 반복" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4182,7 +4230,7 @@ msgstr "Tidal 응답에 쿼리 항목이 없습니다." msgid "Repopulate" msgstr "다시 가져오기" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "노래 다시 검색" @@ -4283,7 +4331,7 @@ msgstr "안전하게 장치 제거" msgid "Safely remove the device after copying" msgstr "복사 후 안전하게 장치 제거" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4417,7 +4465,7 @@ msgstr "검색 지연 시간" msgid "Search for album covers..." msgstr "앨범아트 검색..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "다음 항목 검색" @@ -4647,12 +4695,12 @@ msgstr "라이브러리에 표시..." msgid "Show in file browser" msgstr "파일 탐색기에 표시" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "파일 탐색기에 표시..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "편집 음반으로 표시" @@ -4753,7 +4801,7 @@ msgstr "크기:" msgid "Ska" msgstr "스카" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4851,7 +4899,7 @@ msgstr "" msgid "Sorting" msgstr "" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "출처" @@ -5155,7 +5203,7 @@ msgid "" "rescan because of the new features listed below:" msgstr "Strawberry의 업데이트한 버전에 다음 기능이 추가되어 전체 라이브러리를 재검색해야 합니다:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "이 앨범에 다른 곡이 있습니다" @@ -5252,7 +5300,7 @@ msgstr "" msgid "Time step" msgstr "시간 간격" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5303,7 +5351,7 @@ msgstr "전송된 총 바이트" msgid "Total network requests made" msgstr "총 네트워크 요청 수" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5647,7 +5695,7 @@ msgstr "표지 없음:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "오프라인 모드로 작업(스크로블을 캐시에만 추가)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5665,7 +5713,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "재생 목록을 저장할 때 메타데이터 쓰기" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/nb.po b/src/translations/nb.po index 8a231288..6669e5ba 100644 --- a/src/translations/nb.po +++ b/src/translations/nb.po @@ -754,7 +754,7 @@ msgstr "Etter kopiering…" msgid "Albu&m cover" msgstr "Albu&m kover" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -774,7 +774,7 @@ msgstr "Album (ideell lydstyrkeutgjevning for alle spor)" msgid "Album - Disc" msgstr "Album - Disc" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -863,7 +863,7 @@ msgstr "Alltid start avspilling" msgid "An error occurred loading the iTunes database" msgstr "En feil oppsto ved innlasting av iTunes-databasen" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Det oppstod en feil når metadata skulle skrives til '%1'" @@ -892,7 +892,7 @@ msgstr "Legg til explicit i album tittel for explicit albumer" msgid "Append files/URLs to the playlist" msgstr "Tilføy filer/URLer til spillelista" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -945,7 +945,7 @@ msgstr "Manuelt kover" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1106,7 +1106,7 @@ msgstr "Adferd" msgid "Best" msgstr "Best" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1122,7 +1122,7 @@ msgid "Bit rate" msgstr "Bitrate" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1193,7 +1193,7 @@ msgstr "CD avspilling er kun mulig med gstreamer" msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1349,7 +1349,7 @@ msgstr "Samlingsøk" msgid "Comma separated list of class:level, level is 0-3" msgstr "Komma-separert liste av klasse:level, level er 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Kommentar" @@ -1366,7 +1366,7 @@ msgstr "Fyll ut etiketter automatisk" msgid "Complete tags automatically..." msgstr "Full ut etiketter automatisk…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1448,7 +1448,7 @@ msgstr "Kopier til samling…" msgid "Copy to device" msgstr "Kopier til enhet" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Kopier til enhet…" @@ -1461,6 +1461,16 @@ msgstr "" "Kopier din strawberry.conf og strawberry.db fil fra ~/snap mappen for å " "unngå at du mister innstillingene før du avinstallerer" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1475,6 +1485,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Kunne ikke åpne CUE fil %1 for lesing: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "Kunne ikke åpne URL. Prøv å åpne denne URLen i din nettleser" @@ -1706,11 +1720,11 @@ msgstr "Dansemusikk" msgid "Database corruption detected." msgstr "Oppdaget feil i databasen." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1763,7 +1777,7 @@ msgstr "Slett filer" msgid "Delete from device..." msgstr "Slett fra enhet…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Slett fra disk…" @@ -1801,6 +1815,16 @@ msgstr "Fjern sporet fra avspillingskøen" msgid "Destination" msgstr "Mål" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detaljer…" @@ -1847,7 +1871,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Avskrudd" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1891,7 +1915,7 @@ msgstr "Ikke vis denne meldingen igjen." msgid "Don't repeat" msgstr "Ikke gjenta" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Ikke vis under diverse artister" @@ -1990,12 +2014,12 @@ msgstr "Rediger etikett…" msgid "Edit track information" msgstr "Rediger spor informasjon" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Rediger spor informasjon…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Rediger spor informasjon…" @@ -2145,7 +2169,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Tilsvarer --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Feil" @@ -2154,6 +2178,11 @@ msgstr "Feil" msgid "Error connecting MTP device %1" msgstr "Feil ved tilkobling til MTP enhet %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Kunne ikke kopiere sanger" @@ -2280,6 +2309,11 @@ msgstr "Tonings-varighet" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2356,19 +2390,19 @@ msgstr "Fil %1 eksisterer ikke." msgid "File %1 is not recognized as a valid audio file." msgstr "Fil %1 er ikke gjenkjent som en lydfil" -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2547,7 +2581,7 @@ msgstr "Generelle innstillinger" msgid "Genius Authentication" msgstr "Genius autentisering" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2655,7 +2689,7 @@ msgstr "Grupper etter sjanger/album artist/album" msgid "Group by Genre/Artist/Album" msgstr "Grupper etter sjanger/artist/album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2828,7 +2862,7 @@ msgstr "Sett inn…" msgid "Install strawberry through PPA:" msgstr "Installer Strawberry gjennom PPA:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2848,6 +2882,11 @@ msgstr "Internett tabb visning" msgid "Intro tracks" msgstr "Introspor" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Ugyldig svar fra nettleseren. Mangler token." @@ -2906,7 +2945,7 @@ msgstr "Stort omslag" msgid "Large sidebar" msgstr "Stort sidefelt" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2937,7 +2976,7 @@ msgstr "Minst favoritt spor" msgid "Left" msgstr "Venstre" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Lengde" @@ -3044,7 +3083,7 @@ msgstr "Innlogging" msgid "Long term prediction profile (LTP)" msgstr "Profil for langtidspredikie (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3079,13 +3118,22 @@ msgid "Lyrics providers" msgstr "Lyrikk tilbyder" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5 token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Hovedprofil (MAIN)" @@ -3237,7 +3285,7 @@ msgstr "Overvåk endringer i samlingen" msgid "Months" msgstr "Måneder" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Mood" @@ -3413,7 +3461,7 @@ msgid "None" msgstr "Ingen" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Kunne ikke kopiere noen av de valgte sangene til en enhet" @@ -3512,7 +3560,7 @@ msgstr "Åpne enhet" msgid "Open homepage" msgstr "Åpne hjemmeside" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3550,7 +3598,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organiser filene" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organiser filene..." @@ -3558,7 +3606,7 @@ msgstr "Organiser filene..." msgid "Organizing files" msgstr "Organiserer filene" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3665,7 +3713,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3686,7 +3734,7 @@ msgstr "Enkelt sidefelt" msgid "Play" msgstr "Spill" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3949,12 +3997,12 @@ msgstr "Legg valgte spor i kø" msgid "Queue selected tracks to play next" msgstr "Legg valgte spor i kø for å spille som neste" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Legg i kø for å spille som neste" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3980,7 +4028,7 @@ msgstr "Radioer" msgid "Random" msgstr "Tilfeldig" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Vurdering" @@ -4184,7 +4232,7 @@ msgstr "Gjenta spilleliste" msgid "Repeat track" msgstr "Gjenta spor" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4220,7 +4268,7 @@ msgstr "Svar fra Tidal mangler query items." msgid "Repopulate" msgstr "Repopulate" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Reskann sang(er)" @@ -4323,7 +4371,7 @@ msgstr "Trygg fjerning av enhet" msgid "Safely remove the device after copying" msgstr "Kjør trygg fjerning av enhet etter kopiering" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4457,7 +4505,7 @@ msgstr "Søke forsinkelse" msgid "Search for album covers..." msgstr "Søk etter albumomslag…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Søk etter dette" @@ -4687,12 +4735,12 @@ msgstr "Vis i samling…" msgid "Show in file browser" msgstr "Vis i fil utforsker" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Vis i fil utforsker" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Vis under diverse artister" @@ -4793,7 +4841,7 @@ msgstr "Størrelse:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4892,7 +4940,7 @@ msgstr "Sorter sanger etter" msgid "Sorting" msgstr "Sortering" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Kilde" @@ -5202,7 +5250,7 @@ msgstr "" "Fordi du har oppdatert Strawberry til en nyere versjon, må hele samlingen " "søkes gjennom på nytt, som følge av disse nye funksjonene:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Det er andre sanger i dette albumet" @@ -5312,7 +5360,7 @@ msgstr "Tidal støtte er ikke offisiell og krever en API nøkkel." msgid "Time step" msgstr "Tidstrinn" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5363,7 +5411,7 @@ msgstr "Antall byte overført totalt" msgid "Total network requests made" msgstr "Antall nettverkforespørsler totalt" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5709,7 +5757,7 @@ msgstr "Uten omslag:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Jobb i frakoblet modus (bare cache scrobbler)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5729,7 +5777,16 @@ msgstr "Skriv alle spilletellere og vurdering til filer" msgid "Write metadata when saving playlists" msgstr "Skrev metadata når spilleliste lagres" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/nl.po b/src/translations/nl.po index d7880116..3ee2b315 100644 --- a/src/translations/nl.po +++ b/src/translations/nl.po @@ -763,7 +763,7 @@ msgstr "Na het kopiëren…" msgid "Albu&m cover" msgstr "Albu&m Hoes" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -783,7 +783,7 @@ msgstr "Album (ideaal volume voor alle nummers)" msgid "Album - Disc" msgstr "Album - cd" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -873,7 +873,7 @@ msgstr "Altijd afspelen" msgid "An error occurred loading the iTunes database" msgstr "Er is een fout opgetreden tijdens het laden van de iTunes-database" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Er is een fout opgetreden bij het wegschrijven van metadata naar ‘%1’" @@ -902,7 +902,7 @@ msgstr "Voeg expliciet toe aan de albumtitel voor expliciete albums" msgid "Append files/URLs to the playlist" msgstr "Bestanden/URLs aan afspeellijst toevoegen" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -955,7 +955,7 @@ msgstr "Hoes handmatig" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1116,7 +1116,7 @@ msgstr "Gedrag" msgid "Best" msgstr "Beste" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1132,7 +1132,7 @@ msgid "Bit rate" msgstr "Bitrate" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1203,7 +1203,7 @@ msgstr "" msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1359,7 +1359,7 @@ msgid "Comma separated list of class:level, level is 0-3" msgstr "" "Door komma's gescheiden lijst van van klasse:niveau, het niveau is 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Opmerking" @@ -1376,7 +1376,7 @@ msgstr "Labels automatisch voltooien" msgid "Complete tags automatically..." msgstr "Labels automatisch voltooien…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1459,7 +1459,7 @@ msgstr "Naar bibliotheek kopiëren…" msgid "Copy to device" msgstr "Kopieer naar toestel" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Naar apparaat kopiëren…" @@ -1472,6 +1472,16 @@ msgstr "" "Kopieer je strawberry.conf en strawberry.db van je ~/snap map om verlies van " "configuratie te voorkomen eer je de snap de-installeert:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1486,6 +1496,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Kon CUE-bestand %1 niet openen voor lezen: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "Kon de URL niet openen. Open de URL in je webbladereaar" @@ -1717,11 +1731,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1774,7 +1788,7 @@ msgstr "Bestanden verwijderen" msgid "Delete from device..." msgstr "Van apparaat verwijderen…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Van schijf verwijderen…" @@ -1812,6 +1826,16 @@ msgstr "Nummer uit wachtrij verwijderen" msgid "Destination" msgstr "Bestemming" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Details…" @@ -1858,7 +1882,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Uitgeschakeld" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1902,7 +1926,7 @@ msgstr "Toon deze boodschap niet meer." msgid "Don't repeat" msgstr "Niet herhalen" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Niet in diverse artiesten weergeven" @@ -2002,12 +2026,12 @@ msgstr "Label bewerken…" msgid "Edit track information" msgstr "Nummerinformatie bewerken" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Nummerinformatie bewerken…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Nummerinformatie bewerken…" @@ -2158,7 +2182,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Gelijkwaardig aan --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Fout" @@ -2167,6 +2191,11 @@ msgstr "Fout" msgid "Error connecting MTP device %1" msgstr "" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Fout tijdens het kopiëren van de nummers" @@ -2293,6 +2322,11 @@ msgstr "Uitvaagduur" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2369,19 +2403,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "" -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2561,7 +2595,7 @@ msgstr "Algemene instellingen" msgid "Genius Authentication" msgstr "" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2669,7 +2703,7 @@ msgstr "" msgid "Group by Genre/Artist/Album" msgstr "Groeperen op genre/artiest/album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2842,7 +2876,7 @@ msgstr "Invoegen…" msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2862,6 +2896,11 @@ msgstr "" msgid "Intro tracks" msgstr "Intro nummers" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "" @@ -2920,7 +2959,7 @@ msgstr "Grote albumhoes" msgid "Large sidebar" msgstr "Grote zijbalk" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2951,7 +2990,7 @@ msgstr "" msgid "Left" msgstr "Links" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Duur" @@ -3058,7 +3097,7 @@ msgstr "Inloggen" msgid "Long term prediction profile (LTP)" msgstr "Lange termijn voorspellingsprofiel (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3093,13 +3132,22 @@ msgid "Lyrics providers" msgstr "" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Normaal profiel (MAIN)" @@ -3251,7 +3299,7 @@ msgstr "De bibliotheek op wijzigingen blijven controleren" msgid "Months" msgstr "" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "" @@ -3429,7 +3477,7 @@ msgid "None" msgstr "Geen" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Geen van de geselecteerde nummers waren geschikt voor het kopiëren naar een " @@ -3530,7 +3578,7 @@ msgstr "Apparaat openen" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3568,7 +3616,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "" @@ -3576,7 +3624,7 @@ msgstr "" msgid "Organizing files" msgstr "" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3683,7 +3731,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3704,7 +3752,7 @@ msgstr "Normale zijbalk" msgid "Play" msgstr "Afspelen" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3964,12 +4012,12 @@ msgid "Queue selected tracks to play next" msgstr "" "Geselecteerde nummers in de wachtrij zetten om op volgorde af te spelen" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3995,7 +4043,7 @@ msgstr "Radio's" msgid "Random" msgstr "Willekeurig" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Beoordeling" @@ -4195,7 +4243,7 @@ msgstr "Afspeellijst herhalen" msgid "Repeat track" msgstr "Nummer herhalen" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4231,7 +4279,7 @@ msgstr "" msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Nummer(s) opnieuw scannen" @@ -4334,7 +4382,7 @@ msgstr "Apparaat veilig verwijderen" msgid "Safely remove the device after copying" msgstr "Apparaat veilig verwijderen na het kopiëren" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4468,7 +4516,7 @@ msgstr "Zoek vertraging" msgid "Search for album covers..." msgstr "Naar albumhoezen zoeken…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Zoek hier naar" @@ -4698,12 +4746,12 @@ msgstr "Tonen in bibliotheek..." msgid "Show in file browser" msgstr "In bestandsbeheer tonen" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "In bestandsbeheer tonen…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "In diverse artiesten weergeven" @@ -4804,7 +4852,7 @@ msgstr "Groote:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4900,7 +4948,7 @@ msgstr "Sorteer nummers op" msgid "Sorting" msgstr "Sorteren" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Bron" @@ -5214,7 +5262,7 @@ msgstr "" "De versie van Strawberry die u zojuist heeft ge-updated vereist vanwege de " "nieuwe onderdelen die hieronder staan een volledige herscan van de database:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Er zijn andere nummers in dit album" @@ -5331,7 +5379,7 @@ msgstr "" msgid "Time step" msgstr "TIjd stap" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5382,7 +5430,7 @@ msgstr "Totaal aantal verzonden bytes" msgid "Total network requests made" msgstr "Totaal aantal netwerk-verzoeken" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5729,7 +5777,7 @@ msgstr "Zonder albumhoes:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5749,7 +5797,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Schrijf metadata bij het opslaan van afspeellijsten" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/pl.po b/src/translations/pl.po index a795890f..577f49ba 100644 --- a/src/translations/pl.po +++ b/src/translations/pl.po @@ -763,7 +763,7 @@ msgstr "Po skopiowaniu…" msgid "Albu&m cover" msgstr "Okładka albu&mu" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -783,7 +783,7 @@ msgstr "Według albumu (najlepsza głośność dla wszystkich ścieżek)" msgid "Album - Disc" msgstr "Album - Płyta" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -872,7 +872,7 @@ msgstr "Odtwarzaj automatycznie" msgid "An error occurred loading the iTunes database" msgstr "Wystąpił błąd podczas ładowania bazy danych iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Wystąpił błąd podczas zapisu metadanych do '%1'" @@ -901,7 +901,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "Dodaj pliki/adresy URL do listy odtwarzania" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -952,7 +952,7 @@ msgstr "Manualnie" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1113,7 +1113,7 @@ msgstr "Zachowanie" msgid "Best" msgstr "Najlepsza" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1129,7 +1129,7 @@ msgid "Bit rate" msgstr "Przepływność" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1200,7 +1200,7 @@ msgstr "Odtwarzanie płyt CD jest możliwe tylko przy użyciu silnika GStreamer. msgid "CDDA" msgstr "CD-Audio" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1358,7 +1358,7 @@ msgstr "" "Rozdzielona przecinkami lista „klasa:poziom”, gdzie poziom ma wartość od 0 " "do 3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Komentarz" @@ -1375,7 +1375,7 @@ msgstr "Automatycznie uzupełnij znaczniki" msgid "Complete tags automatically..." msgstr "Automatycznie uzupełnij znaczniki…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1456,7 +1456,7 @@ msgstr "Skopiuj do kolekcji…" msgid "Copy to device" msgstr "Skopiuj na urządzenie" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Skopiuj na urządzenie…" @@ -1467,6 +1467,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1481,6 +1491,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1714,11 +1728,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "Wykryto uszkodzenie bazy danych!" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1771,7 +1785,7 @@ msgstr "Usuń pliki" msgid "Delete from device..." msgstr "Usuń z urządzenia…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Usuń z dysku…" @@ -1809,6 +1823,16 @@ msgstr "Usuń ścieżkę z kolejki" msgid "Destination" msgstr "Miejsce docelowe" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Szczegóły…" @@ -1855,7 +1879,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Wyłączone" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1899,7 +1923,7 @@ msgstr "Nie pokazuj tego ponownie." msgid "Don't repeat" msgstr "Nie powtarzaj" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Nie pokazuj w „różni artyści”" @@ -1996,12 +2020,12 @@ msgstr "Edytuj znacznik…" msgid "Edit track information" msgstr "Edytuj informacje o ścieżce" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Edytuj informacje o ścieżce…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Edytuj informacje o ścieżkach…" @@ -2153,7 +2177,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Równoważne z --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Błąd" @@ -2162,6 +2186,11 @@ msgstr "Błąd" msgid "Error connecting MTP device %1" msgstr "Błąd połączenia z urządzeniem MTP „%1”" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Błąd przy kopiowaniu utworów" @@ -2288,6 +2317,11 @@ msgstr "Czas przejścia" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2364,19 +2398,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "Plik „%1” nie jest rozpoznany jako plik dźwiękowy." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2556,7 +2590,7 @@ msgstr "Ustawienia ogólne" msgid "Genius Authentication" msgstr "Uwierzytelnianie Geniusa" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2666,7 +2700,7 @@ msgstr "Gatunek/Artysta albumu/Album" msgid "Group by Genre/Artist/Album" msgstr "Gatunek/Artysta/Album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2842,7 +2876,7 @@ msgstr "Wstaw…" msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2862,6 +2896,11 @@ msgstr "Widok zakładek internetowych" msgid "Intro tracks" msgstr "Czołówki" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Niepoprawna odpowiedź z przeglądarki internetowej. Brakuje tokenu." @@ -2922,7 +2961,7 @@ msgstr "Duża okładka albumu" msgid "Large sidebar" msgstr "Duży pasek boczny" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2953,7 +2992,7 @@ msgstr "Najmniej lubiane utwory" msgid "Left" msgstr "Lewy" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Długość" @@ -3060,7 +3099,7 @@ msgstr "Zaloguj się" msgid "Long term prediction profile (LTP)" msgstr "Profil przewidywania długoterminowego (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3095,13 +3134,22 @@ msgid "Lyrics providers" msgstr "Dostawcy tekstów" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Profil główny (MAIN)" @@ -3253,7 +3301,7 @@ msgstr "Monitoruj zmiany w kolekcji" msgid "Months" msgstr "Miesięcy" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Nastrój" @@ -3431,7 +3479,7 @@ msgid "None" msgstr "Brak" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Żaden z zaznaczonych utworów nie był odpowiedni do skopiowania na urządzenie" @@ -3534,7 +3582,7 @@ msgstr "Otwórz urządzenie" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3572,7 +3620,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organizuj pliki" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organizuj pliki…" @@ -3580,7 +3628,7 @@ msgstr "Organizuj pliki…" msgid "Organizing files" msgstr "Organizuję pliki" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3687,7 +3735,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3708,7 +3756,7 @@ msgstr "Pasek boczny bez efektów" msgid "Play" msgstr "Odtwarzaj" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3977,12 +4025,12 @@ msgid "Queue selected tracks to play next" msgstr "" "Dodaj zaznaczone ścieżki do kolejki, aby odtworzyć w następnej kolejności" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Dodaj do kolejki, aby następnie odtworzyć" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4008,7 +4056,7 @@ msgstr "" msgid "Random" msgstr "Losowo" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Ocena" @@ -4211,7 +4259,7 @@ msgstr "Powtarzaj listę odtwarzania" msgid "Repeat track" msgstr "Powtarzaj utwór" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4247,7 +4295,7 @@ msgstr "Brakuje elementów zapytania w odpowiedzi z Tidal." msgid "Repopulate" msgstr "Zapełnij od nowa" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Przeskanuj utwór/utwory ponownie" @@ -4350,7 +4398,7 @@ msgstr "Bezpiecznie usuń urządzenie" msgid "Safely remove the device after copying" msgstr "Bezpiecznie usuń urządzenie po skopiowaniu" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4484,7 +4532,7 @@ msgstr "Opóźnienie wyszukiwania" msgid "Search for album covers..." msgstr "Szukaj okładek…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Szukaj tego:" @@ -4714,12 +4762,12 @@ msgstr "Pokaż w kolekcji…" msgid "Show in file browser" msgstr "Pokaż w menedżerze plików" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Pokaż w menedżerze plików…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Pokaż w „różni artyści”" @@ -4820,7 +4868,7 @@ msgstr "Rozmiar:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4919,7 +4967,7 @@ msgstr "Sortuj utwory po" msgid "Sorting" msgstr "Sortowanie" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Źródło" @@ -5234,7 +5282,7 @@ msgstr "" "Wersja, do której właśnie zaktualizowano odtwarzacz Strawberry, wymaga " "odświeżenia całej biblioteki. Wynika to z wprowadzenia następujących zmian:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Na tym albumie są inne utwory" @@ -5345,7 +5393,7 @@ msgstr "" msgid "Time step" msgstr "Odstęp czasu" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5396,7 +5444,7 @@ msgstr "Całkowita liczba przesłanych bajtów" msgid "Total network requests made" msgstr "Całkowita liczba wykonanych zapytań sieciowych" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5748,7 +5796,7 @@ msgstr "Bez okładki:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Pracuj w trybie offline (tylko scrobble z pamięci podręcznej)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5767,7 +5815,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "Zapisuj medatane podczas zapisywania list odtwarzania" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/pt_BR.po b/src/translations/pt_BR.po index 25e444f7..218d6310 100644 --- a/src/translations/pt_BR.po +++ b/src/translations/pt_BR.po @@ -748,7 +748,7 @@ msgstr "Depois de copiar..." msgid "Albu&m cover" msgstr "" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -768,7 +768,7 @@ msgstr "Álbum (volume ideal para todas as faixas)" msgid "Album - Disc" msgstr "Álbum - Disco" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -857,7 +857,7 @@ msgstr "Sempre começar tocando" msgid "An error occurred loading the iTunes database" msgstr "Ocorreu um erro no carregamento do banco de dados do iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Ocorreu um erro de escrita de metadados para '%1'" @@ -886,7 +886,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "Acrescentar arquivos/sites para a lista de reprodução" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -937,7 +937,7 @@ msgstr "" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1098,7 +1098,7 @@ msgstr "Comportamento" msgid "Best" msgstr "Melhor" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1114,7 +1114,7 @@ msgid "Bit rate" msgstr "Taxa de bits" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1185,7 +1185,7 @@ msgstr "A reprodução de CDs só está disponível com o mecanismo GStreamer." msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "" @@ -1340,7 +1340,7 @@ msgstr "" msgid "Comma separated list of class:level, level is 0-3" msgstr "Lista separada por vírgulas de classe: o nível, o nível é 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Comentário" @@ -1357,7 +1357,7 @@ msgstr "Completar tags automaticamente" msgid "Complete tags automatically..." msgstr "Preencher tags automaticamente..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1439,7 +1439,7 @@ msgstr "Copiar para biblioteca..." msgid "Copy to device" msgstr "" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Copiar para o dispositivo..." @@ -1450,6 +1450,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1464,6 +1474,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1695,11 +1709,11 @@ msgstr "Dance" msgid "Database corruption detected." msgstr "" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1752,7 +1766,7 @@ msgstr "Excluir arquivos" msgid "Delete from device..." msgstr "Apagar do dispositivo..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Apagar do disco..." @@ -1790,6 +1804,16 @@ msgstr "Retirar faixa da fila" msgid "Destination" msgstr "Destino" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detalhes..." @@ -1836,7 +1860,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Desativado" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1880,7 +1904,7 @@ msgstr "" msgid "Don't repeat" msgstr "Não repetir" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Não exibir em vários artistas" @@ -1977,12 +2001,12 @@ msgstr "Editar tag..." msgid "Edit track information" msgstr "Editar informações da faixa" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Editar informações da faixa..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Editar informações da faixa..." @@ -2132,7 +2156,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Equivalente ao --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Erro" @@ -2141,6 +2165,11 @@ msgstr "Erro" msgid "Error connecting MTP device %1" msgstr "Erro ao conectar ao dispositivo MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Erro ao copiar músicas" @@ -2267,6 +2296,11 @@ msgstr "Duração da dimunuição" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2343,19 +2377,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "" -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2534,7 +2568,7 @@ msgstr "Configurações gerais" msgid "Genius Authentication" msgstr "" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2644,7 +2678,7 @@ msgstr "" msgid "Group by Genre/Artist/Album" msgstr "Organizar por Gênero/Artista/Álbum" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2817,7 +2851,7 @@ msgstr "Inserir..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2837,6 +2871,11 @@ msgstr "" msgid "Intro tracks" msgstr "Introdução das faixas" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Resposta inválida do servidor web. Faltando o token. " @@ -2895,7 +2934,7 @@ msgstr "Capa grande de álbum" msgid "Large sidebar" msgstr "Barra lateral grande" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2926,7 +2965,7 @@ msgstr "" msgid "Left" msgstr "Esquerda" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Duração" @@ -3033,7 +3072,7 @@ msgstr "Login" msgid "Long term prediction profile (LTP)" msgstr "Perfil de previsão a longo prazo (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3068,13 +3107,22 @@ msgid "Lyrics providers" msgstr "" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" +msgid "MD5 token (Recommended)" msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Menu perfil (PRINCIPAL)" @@ -3226,7 +3274,7 @@ msgstr "Vigiar mudanças na biblioteca" msgid "Months" msgstr "" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "" @@ -3404,7 +3452,7 @@ msgid "None" msgstr "Nenhum" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "" "Nenhuma das músicas selecionadas estão adequadas para copiar para um " @@ -3505,7 +3553,7 @@ msgstr "Abrir dispositivo" msgid "Open homepage" msgstr "" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3543,7 +3591,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "" @@ -3551,7 +3599,7 @@ msgstr "" msgid "Organizing files" msgstr "" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3658,7 +3706,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3679,7 +3727,7 @@ msgstr "Barra lateral simples" msgid "Play" msgstr "Reproduzir" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3935,12 +3983,12 @@ msgstr "Colocar as faixas selecionadas na fila" msgid "Queue selected tracks to play next" msgstr "" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3966,7 +4014,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "" @@ -4166,7 +4214,7 @@ msgstr "Repetir lista de reprodução" msgid "Repeat track" msgstr "Repetir uma faixa" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4202,7 +4250,7 @@ msgstr "" msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "" @@ -4307,7 +4355,7 @@ msgstr "Remover o dispositivo com segurança" msgid "Safely remove the device after copying" msgstr "Remover o dispositivo com segurança após copiar" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4441,7 +4489,7 @@ msgstr "" msgid "Search for album covers..." msgstr "Procurar por capas dos álbuns..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Buscar por isso" @@ -4671,12 +4719,12 @@ msgstr "Mostrar na biblioteca..." msgid "Show in file browser" msgstr "" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Mostrar no navegador de arquivos..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Exibir em vários artistas" @@ -4777,7 +4825,7 @@ msgstr "Tamanho:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4873,7 +4921,7 @@ msgstr "" msgid "Sorting" msgstr "" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Fonte" @@ -5181,7 +5229,7 @@ msgstr "" "A versão do Strawberry para a qual você atualizou requer um reescaneamento " "completo da biblioteca por causa dos novos recursos listados abaixo:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Há outras músicas neste álbum" @@ -5293,7 +5341,7 @@ msgstr "" msgid "Time step" msgstr "Intervalo de tempo" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5344,7 +5392,7 @@ msgstr "Total de bytes transferido" msgid "Total network requests made" msgstr "Total de requisições de rede feitas" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5690,7 +5738,7 @@ msgstr "Sem capas:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5708,7 +5756,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/ru.po b/src/translations/ru.po index 1f7541fb..3c4ce0a8 100644 --- a/src/translations/ru.po +++ b/src/translations/ru.po @@ -780,7 +780,7 @@ msgstr "После копирования…" msgid "Albu&m cover" msgstr "О&бложка альбома" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -800,7 +800,7 @@ msgstr "Альбом (идеальная громкость всех треко msgid "Album - Disc" msgstr "Альбом - Диск" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "Артист альбома" @@ -889,7 +889,7 @@ msgstr "Всегда начинать воспроизведение" msgid "An error occurred loading the iTunes database" msgstr "Произошла ошибка при загрузке базы данных iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Ошибка при записи метаданных в «%1»" @@ -918,7 +918,7 @@ msgstr "Добавлять «Explicit» в имена альбомов с нец msgid "Append files/URLs to the playlist" msgstr "Добавить файлы/адреса в плейлист" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -971,7 +971,7 @@ msgstr "Обложка ручная" msgid "Art Unset" msgstr "Обложка не задана" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1132,7 +1132,7 @@ msgstr "Поведение" msgid "Best" msgstr "Лучшее" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "Разрядность" @@ -1148,7 +1148,7 @@ msgid "Bit rate" msgstr "Битрейт" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1219,7 +1219,7 @@ msgstr "Воспроизведение CD доступно только с дв msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE-файл" @@ -1374,7 +1374,7 @@ msgstr "Поиск фонотеки" msgid "Comma separated list of class:level, level is 0-3" msgstr "Разделённый запятыми список «класс:уровень», где уровень от 0 до 3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Комментарий" @@ -1391,7 +1391,7 @@ msgstr "Автозаполнение тегов" msgid "Complete tags automatically..." msgstr "Автозаполнение тегов…" -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1472,7 +1472,7 @@ msgstr "Копировать в фонотеку…" msgid "Copy to device" msgstr "Копировать на устройство" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Копировать на устройство…" @@ -1485,6 +1485,16 @@ msgstr "" "Скопируйте ваши strawberry.conf и strawberry.db из вашего каталога ~/snap, " "чтобы избежать потери настроек, перед удалением snap:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1499,6 +1509,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Не удалось открыть CUE-файл %1 для чтения: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1732,11 +1746,11 @@ msgstr "Танец" msgid "Database corruption detected." msgstr "Обнаружено повреждение базы данных." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "Дата создания" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "Дата изменения" @@ -1789,7 +1803,7 @@ msgstr "Удалить файлы" msgid "Delete from device..." msgstr "Удалить с носителя…" -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Удалить с диска…" @@ -1827,6 +1841,16 @@ msgstr "Убрать трек из очереди" msgid "Destination" msgstr "Назначение" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Подробнее…" @@ -1873,7 +1897,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Отключено" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1917,7 +1941,7 @@ msgstr "Не показывать это сообщение снова." msgid "Don't repeat" msgstr "Не повторять" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Не показывать в «Различных артистах»" @@ -2016,12 +2040,12 @@ msgstr "Править тег…" msgid "Edit track information" msgstr "Правка сведений о треке" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Править сведения о треке…" -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Править сведения о треках…" @@ -2171,7 +2195,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Аналогично --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Ошибка" @@ -2180,6 +2204,11 @@ msgstr "Ошибка" msgid "Error connecting MTP device %1" msgstr "Ошибка подключения устройства MTP %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Ошибка копирования композиций" @@ -2306,6 +2335,11 @@ msgstr "Длительность затухания" msgid "Failed SQL query: %1" msgstr "Ошибка запроса SQL: %1" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2382,19 +2416,19 @@ msgstr "Файл %1 не существует." msgid "File %1 is not recognized as a valid audio file." msgstr "Файл %1 не распознан как допустимый аудиофайл." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "Имя файла" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "Имя файла (без пути)" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "Размер файла" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "Тип файла" @@ -2573,7 +2607,7 @@ msgstr "Общие настройки" msgid "Genius Authentication" msgstr "Аутентификация Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2681,7 +2715,7 @@ msgstr "Группировать по жанру/артисту альбома/ msgid "Group by Genre/Artist/Album" msgstr "Группировать по жанру/артисту/альбому" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2856,7 +2890,7 @@ msgstr "Вставить…" msgid "Install strawberry through PPA:" msgstr "Установить Strawberry через PPA:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "Встроенная громкость" @@ -2876,6 +2910,11 @@ msgstr "Обзор вкладок в Интернете" msgid "Intro tracks" msgstr "Вступительные треки" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Неверный ответ от веб-браузера. Отсутствует токен." @@ -2936,7 +2975,7 @@ msgstr "Крупная обложка альбома" msgid "Large sidebar" msgstr "Широкая боковая панель" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "Последний раз" @@ -2967,7 +3006,7 @@ msgstr "Нелюбимые треки" msgid "Left" msgstr "Левый канал" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Длина" @@ -3074,7 +3113,7 @@ msgstr "Вход" msgid "Long term prediction profile (LTP)" msgstr "Профиль Long term prediction (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "Диапазон громкости" @@ -3109,13 +3148,22 @@ msgid "Lyrics providers" msgstr "Поставщики текста песен" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "Токен MD5" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Основной профиль (MAIN)" @@ -3268,7 +3316,7 @@ msgstr "Следить за изменениями фонотеки" msgid "Months" msgstr "Месяцы" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Тон" @@ -3447,7 +3495,7 @@ msgid "None" msgstr "Нет" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Ни одна из выбранных песен не подходит для копирования на устройство" @@ -3549,7 +3597,7 @@ msgstr "Открыть устройство" msgid "Open homepage" msgstr "Открыть домашнюю страницу" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3587,7 +3635,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Организовать файлы" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Организовать файлы…" @@ -3595,7 +3643,7 @@ msgstr "Организовать файлы…" msgid "Organizing files" msgstr "Организация файлов" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "Год оригинала" @@ -3707,7 +3755,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "Выполнять нормализацию громкости дорожки" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3728,7 +3776,7 @@ msgstr "Обычная боковая панель" msgid "Play" msgstr "Играть" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "Разы" @@ -3998,12 +4046,12 @@ msgstr "Выбранные треки в очередь" msgid "Queue selected tracks to play next" msgstr "Очередь выбранных треков для последующего воспроизведения" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Добавить в начало очереди" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4029,7 +4077,7 @@ msgstr "Радио" msgid "Random" msgstr "Случайное" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Оценка" @@ -4236,7 +4284,7 @@ msgstr "Повторять плейлист" msgid "Repeat track" msgstr "Повторять трек" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4272,7 +4320,7 @@ msgstr "В ответе от Tidal отсутствуют элементы за msgid "Repopulate" msgstr "Пересоздать" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Пересканировать песню(и)" @@ -4375,7 +4423,7 @@ msgstr "Безопасно извлечь устройство" msgid "Safely remove the device after copying" msgstr "Безопасно извлечь устройство после копирования" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "Частота" @@ -4510,7 +4558,7 @@ msgstr "Задержка поиска" msgid "Search for album covers..." msgstr "Поиск обложек альбомов…" -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Поиск этого" @@ -4742,12 +4790,12 @@ msgstr "Показать в фонотеке…" msgid "Show in file browser" msgstr "Показать в проводнике" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Показать в проводнике…" -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Показывать в «Различных артистах»" @@ -4848,7 +4896,7 @@ msgstr "Размер:" msgid "Ska" msgstr "Ска" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "Пропуски" @@ -4947,7 +4995,7 @@ msgstr "Сортировать песни по" msgid "Sorting" msgstr "Сортировка" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Источник" @@ -5264,7 +5312,7 @@ msgstr "" "Обновлённая версия Strawberry требует повторного сканирования фонотеки из-за " "следующих новых возможностей:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "В альбоме присутствуют другие композиции" @@ -5374,7 +5422,7 @@ msgstr "" msgid "Time step" msgstr "Шаг времени" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5425,7 +5473,7 @@ msgstr "Всего передано байт" msgid "Total network requests made" msgstr "Всего выполнено сетевых запросов" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5778,7 +5826,7 @@ msgstr "Без обложек:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Работать в автономном режиме (только кэшировать скробблы)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5798,7 +5846,16 @@ msgstr "Записать счётчики прослушивания и оцен msgid "Write metadata when saving playlists" msgstr "Записывать метаданные при сохранении плейлистов" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/sv.po b/src/translations/sv.po index fa70260d..0918f326 100644 --- a/src/translations/sv.po +++ b/src/translations/sv.po @@ -767,7 +767,7 @@ msgstr "Efter kopiering..." msgid "Albu&m cover" msgstr "Albu&momslag" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -787,7 +787,7 @@ msgstr "Album (lämplig ljudstyrka för alla spår)" msgid "Album - Disc" msgstr "Album - Skiva" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "Albumartist" @@ -876,7 +876,7 @@ msgstr "Alltid starta uppspelning" msgid "An error occurred loading the iTunes database" msgstr "Ett fel uppstod vid inläsning av iTunes-databasen" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Ett fel uppstod när metadata skulle skrivas till \"%1\"" @@ -905,7 +905,7 @@ msgstr "Lägg uttryckligen till albumtitel för explicita album" msgid "Append files/URLs to the playlist" msgstr "Lägg till filer/webbadresser till spellistan" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -958,7 +958,7 @@ msgstr "Manuella omslag" msgid "Art Unset" msgstr "Omslaget inte inställt" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1119,7 +1119,7 @@ msgstr "Beteende" msgid "Best" msgstr "Bästa" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1135,7 +1135,7 @@ msgid "Bit rate" msgstr "Bithastighet" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1206,7 +1206,7 @@ msgstr "CD-uppspelning är endast tillgänglig med GStreamer-motorn." msgid "CDDA" msgstr "CD-ljud" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1363,7 +1363,7 @@ msgstr "Samlingssökning" msgid "Comma separated list of class:level, level is 0-3" msgstr "Kommaseparerad lista över class:level; level är 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Kommentar" @@ -1380,7 +1380,7 @@ msgstr "Fyll i taggar automatiskt" msgid "Complete tags automatically..." msgstr "Fyll i taggar automatiskt..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1461,7 +1461,7 @@ msgstr "Kopiera till samling..." msgid "Copy to device" msgstr "Kopiera till enhet" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Kopiera till enhet..." @@ -1474,6 +1474,16 @@ msgstr "" "Kopiera din strawberry.conf och strawberry.db från din ~/snap-mapp för att " "undvika att förlora konfigurationen innan du avinstallerar snap:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1488,6 +1498,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Det gick inte att öppna CUE-filen %1 för läsning: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1722,11 +1736,11 @@ msgstr "Dans" msgid "Database corruption detected." msgstr "Databasskada upptäcktes." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "Datum skapat" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "Datum ändrat" @@ -1779,7 +1793,7 @@ msgstr "Ta bort filer" msgid "Delete from device..." msgstr "Ta bort från enhet..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Ta bort från disk..." @@ -1817,6 +1831,16 @@ msgstr "Ta bort spår från kön" msgid "Destination" msgstr "Destination" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Detaljer..." @@ -1863,7 +1887,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Inaktiverad" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1907,7 +1931,7 @@ msgstr "Visa inte det här meddelandet igen." msgid "Don't repeat" msgstr "Upprepa inte" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Visa inte i diverse artister" @@ -2006,12 +2030,12 @@ msgstr "Redigera tagg..." msgid "Edit track information" msgstr "Redigera spårinformation" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Redigera spårinformation..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Redigera spårinformation..." @@ -2161,7 +2185,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Motsvarar --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Fel" @@ -2170,6 +2194,11 @@ msgstr "Fel" msgid "Error connecting MTP device %1" msgstr "Fel vid anslutning av MTP-enhet %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Fel vid kopiering av låtar" @@ -2296,6 +2325,11 @@ msgstr "Toningsvaraktighet" msgid "Failed SQL query: %1" msgstr "Misslyckad SQL-förfråga: %1" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2372,19 +2406,19 @@ msgstr "Filen %1 finns inte." msgid "File %1 is not recognized as a valid audio file." msgstr "Filen %1 känns inte igen som en giltig ljudfil." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "Filnamn" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "Filnamn (utan sökväg)" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "Filstorlek" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "Filtyp" @@ -2563,7 +2597,7 @@ msgstr "Allmänna inställningar" msgid "Genius Authentication" msgstr "Genius-autentisering" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2671,7 +2705,7 @@ msgstr "Gruppera efter genre/albumartist/album" msgid "Group by Genre/Artist/Album" msgstr "Gruppera efter genre/artist/album" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2845,7 +2879,7 @@ msgstr "Infoga..." msgid "Install strawberry through PPA:" msgstr "Installera strawberry via PPA:" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "Integrerad ljudstyrka" @@ -2865,6 +2899,11 @@ msgstr "Internet-flikvy" msgid "Intro tracks" msgstr "Introduktionsspår" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Ogiltigt svar från webbläsaren. Saknar token." @@ -2925,7 +2964,7 @@ msgstr "Stort albumomslag" msgid "Large sidebar" msgstr "Stort sidofält" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "Senast spelade" @@ -2956,7 +2995,7 @@ msgstr "Minst omtyckta spår" msgid "Left" msgstr "Vänster" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Längd" @@ -3063,7 +3102,7 @@ msgstr "Logga in" msgid "Long term prediction profile (LTP)" msgstr "Långsiktig förutsägelseprofil (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "Ljudstyrkeintervall" @@ -3098,13 +3137,22 @@ msgid "Lyrics providers" msgstr "Låttextleverantörer" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5-token" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Huvudprofil (MAIN)" @@ -3256,7 +3304,7 @@ msgstr "Bevaka ändringar i samlingen" msgid "Months" msgstr "Månader" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Stämning" @@ -3435,7 +3483,7 @@ msgid "None" msgstr "Ingen" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Ingen av de valda låtarna lämpar sig för kopiering till en enhet" @@ -3537,7 +3585,7 @@ msgstr "Öppna enhet" msgid "Open homepage" msgstr "Öppna webbplats" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3575,7 +3623,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Organisera filer" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Organisera filer..." @@ -3583,7 +3631,7 @@ msgstr "Organisera filer..." msgid "Organizing files" msgstr "Organiserar filer" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "Originalår" @@ -3691,7 +3739,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "Utför normalisering av spårets ljudstyrka" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3712,7 +3760,7 @@ msgstr "Vanligt sidofält" msgid "Play" msgstr "Spela" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "Antal spelningar" @@ -3980,12 +4028,12 @@ msgstr "Lägg till valda spår i kön" msgid "Queue selected tracks to play next" msgstr "Lägg till valda spår i kön för att spela som nästa" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Lägg till i kön för att spela som nästa" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4011,7 +4059,7 @@ msgstr "Radiokanaler" msgid "Random" msgstr "Slumpat" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Betyg" @@ -4217,7 +4265,7 @@ msgstr "Upprepa spellista" msgid "Repeat track" msgstr "Upprepa spår" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4253,7 +4301,7 @@ msgstr "Svar från Tidal saknar förfrågningsobjekt." msgid "Repopulate" msgstr "Skapa en ny blandning" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Skanna om av låt(ar)..." @@ -4356,7 +4404,7 @@ msgstr "Säker borttagning av enhet" msgid "Safely remove the device after copying" msgstr "Säker borttagning av enheten efter kopiering" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "Samplingsfrekvens" @@ -4490,7 +4538,7 @@ msgstr "Sökfördröjning" msgid "Search for album covers..." msgstr "Sök efter albumomslag..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Sök efter det här" @@ -4722,12 +4770,12 @@ msgstr "Visa i samlingen..." msgid "Show in file browser" msgstr "Visa i filhanteraren" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Visa i filhanterare..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Visa i diverse artister" @@ -4828,7 +4876,7 @@ msgstr "Storlek:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "Hoppa över räkning" @@ -4927,7 +4975,7 @@ msgstr "Sortera låtar efter" msgid "Sorting" msgstr "Sortering" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Källa" @@ -5243,7 +5291,7 @@ msgstr "" "Den version av Strawberry som du just har uppdaterat till kräver en " "fullständig omskanning av samlingen på grund av de nya funktionerna nedan:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "Det finns andra låtar i det här albumet" @@ -5357,7 +5405,7 @@ msgstr "" msgid "Time step" msgstr "Tidssteg" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5408,7 +5456,7 @@ msgstr "Totalt överförda byte" msgid "Total network requests made" msgstr "Totalt antal nätverksförfrågningar" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5760,7 +5808,7 @@ msgstr "Utan omslag:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Arbeta i frånkopplat läge (cacha endast skrobblingar)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5780,7 +5828,16 @@ msgstr "Skriv alla antal spelningar och betyg till filer" msgid "Write metadata when saving playlists" msgstr "Skriv metadata när spellistor sparas" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/uk.po b/src/translations/uk.po index 5ab03b33..66f1bd00 100644 --- a/src/translations/uk.po +++ b/src/translations/uk.po @@ -757,7 +757,7 @@ msgstr "Після копіювання..." msgid "Albu&m cover" msgstr "Обкладинка &альбому" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -777,7 +777,7 @@ msgstr "Альбом (ідеальна гучність для всіх комп msgid "Album - Disc" msgstr "Альбом - Диск" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -866,7 +866,7 @@ msgstr "Завжди починати відтворення" msgid "An error occurred loading the iTunes database" msgstr "Виникла помилка завантаження бази даних iTunes" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "Трапилася помилка під час запису метаданих до '%1'" @@ -895,7 +895,7 @@ msgstr "Додати явний текст до назви альбому для msgid "Append files/URLs to the playlist" msgstr "Додати файли/адреси до списку відтворення" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -948,7 +948,7 @@ msgstr "Вручну" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1109,7 +1109,7 @@ msgstr "Поведінка" msgid "Best" msgstr "Найкраще" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1125,7 +1125,7 @@ msgid "Bit rate" msgstr "Бітова швидкість" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1196,7 +1196,7 @@ msgstr "Відтворення компакт-дисків доступне ли msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1358,7 +1358,7 @@ msgid "Comma separated list of class:level, level is 0-3" msgstr "" "Список, розділений комами, виду клас:рівень, рівень може бути від 0 до 3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "Коментар" @@ -1375,7 +1375,7 @@ msgstr "Заповнити мітки автоматично" msgid "Complete tags automatically..." msgstr "Заповнити мітки автоматично..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1458,7 +1458,7 @@ msgstr "Скопіювати до фонотеки..." msgid "Copy to device" msgstr "Скопіювати до пристрою" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "Копіюваня до пристрою..." @@ -1471,6 +1471,16 @@ msgstr "" "Перш ніж видаляти snap, скопіюйте файли strawberry.conf і strawberry.db з " "каталогу ~/snap, щоб не втратити свою конфігурацію:" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1485,6 +1495,10 @@ msgstr "" msgid "Could not open CUE file %1 for reading: %2" msgstr "Не вдалось відкрити CUE-файл %1 для читання: %2" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "Не вдалось відкрити адресу. Перейдіть за цією адресу у браузері" @@ -1716,11 +1730,11 @@ msgstr "Танцювальна" msgid "Database corruption detected." msgstr "Виявлено пошкодження бази даних." -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1773,7 +1787,7 @@ msgstr "Видалити файли" msgid "Delete from device..." msgstr "Видалити з пристрою..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "Видалити з диска..." @@ -1811,6 +1825,16 @@ msgstr "Вилучити композицію з черги" msgid "Destination" msgstr "Призначення" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "Детальніше..." @@ -1857,7 +1881,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "Вимкнено" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1901,7 +1925,7 @@ msgstr "Більше не показувати це повідомлення." msgid "Don't repeat" msgstr "Не повторювати" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "Не показувати в «різних виконавцях»" @@ -2000,12 +2024,12 @@ msgstr "Редагувати тег..." msgid "Edit track information" msgstr "Редагувати дані композиції" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "Редагувати дані композиції..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "Редагувати дані композицій..." @@ -2155,7 +2179,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "Відповідає --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "Помилка" @@ -2164,6 +2188,11 @@ msgstr "Помилка" msgid "Error connecting MTP device %1" msgstr "Не вдалось підключитись до MTP-пристрою %1" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "Не вдалось скопіювати композиції" @@ -2292,6 +2321,11 @@ msgstr "Тривалість згасання" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2368,19 +2402,19 @@ msgstr "Файл %1 не існує." msgid "File %1 is not recognized as a valid audio file." msgstr "Файл %1 не розпізнано як дійсний аудіофайл." -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2559,7 +2593,7 @@ msgstr "Загальні налаштування" msgid "Genius Authentication" msgstr "Автентифікація на Genius" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2668,7 +2702,7 @@ msgstr "Групувати за жанром/виконавцем альбому msgid "Group by Genre/Artist/Album" msgstr "Групувати за жанром/виконавцем/альбомом" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2843,7 +2877,7 @@ msgstr "Вставити..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2863,6 +2897,11 @@ msgstr "Подання вкладок з Інтернету" msgid "Intro tracks" msgstr "Вступні композиції" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "Недійсна відповідь з веб-браузера. Відсутній маркер." @@ -2923,7 +2962,7 @@ msgstr "Велика обкладинка альбому" msgid "Large sidebar" msgstr "Велика бічна панель" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2954,7 +2993,7 @@ msgstr "Найменш улюблені композиції" msgid "Left" msgstr "Ліворуч" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "Тривалість" @@ -3061,7 +3100,7 @@ msgstr "Увійти" msgid "Long term prediction profile (LTP)" msgstr "Профіль довготривалого передбачення (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3096,13 +3135,22 @@ msgid "Lyrics providers" msgstr "Постачальники текстів пісень" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "Маркер MD5" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "Основний профіль (MAIN)" @@ -3254,7 +3302,7 @@ msgstr "Стежити за змінами у фонотеці" msgid "Months" msgstr "Місяці" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "Настрій" @@ -3432,7 +3480,7 @@ msgid "None" msgstr "Немає" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "Жодна з вибраних композицій не придатна для копіювання на пристрій" @@ -3535,7 +3583,7 @@ msgstr "Відкрити пристрій" msgid "Open homepage" msgstr "Відкрити домашню сторінку" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3573,7 +3621,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "Впорядкування файлів" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "Впорядкувати файли..." @@ -3581,7 +3629,7 @@ msgstr "Впорядкувати файли..." msgid "Organizing files" msgstr "Впорядкування файлів" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3690,7 +3738,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3711,7 +3759,7 @@ msgstr "Звичайна бічна панель" msgid "Play" msgstr "Відтворити" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3979,12 +4027,12 @@ msgstr "Додати до черги обрані композиції" msgid "Queue selected tracks to play next" msgstr "Відтворити наступними обрані композиції" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "Відтворити наступним" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -4010,7 +4058,7 @@ msgstr "Радіостанції" msgid "Random" msgstr "Випадково" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "Рейтинг" @@ -4216,7 +4264,7 @@ msgstr "Повторювати список відтворення" msgid "Repeat track" msgstr "Повторювати композицію" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4252,7 +4300,7 @@ msgstr "Відповідь з Tidal не містить елементи зап msgid "Repopulate" msgstr "Повторно заповнити" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "Сканування композицій" @@ -4357,7 +4405,7 @@ msgstr "Безпечно відключити пристрій" msgid "Safely remove the device after copying" msgstr "Безпечно відключити пристрій після копіювання" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4491,7 +4539,7 @@ msgstr "Затримка пошуку" msgid "Search for album covers..." msgstr "Шукати обкладинки альбомів..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "Шукати наступне" @@ -4721,12 +4769,12 @@ msgstr "Показати у фонотеці..." msgid "Show in file browser" msgstr "Показати в оглядачі файлів" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "Показати в оглядачі файлів..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "Показувати в різних виконавцях" @@ -4827,7 +4875,7 @@ msgstr "Розмір:" msgid "Ska" msgstr "Ска" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4926,7 +4974,7 @@ msgstr "Сортувати композиції за" msgid "Sorting" msgstr "Сортування" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "Джерело" @@ -5241,7 +5289,7 @@ msgstr "" "Для версії Strawberry, яку ви щойно встановили, потрібно повне сканування " "фонотеки через наступні нові можливості:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "У цьому альбомі є інші композиції" @@ -5350,7 +5398,7 @@ msgstr "" msgid "Time step" msgstr "Крок за часом" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5401,7 +5449,7 @@ msgstr "Всього передано байт" msgid "Total network requests made" msgstr "Всього зроблено запитів до мережі" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5752,7 +5800,7 @@ msgstr "Без обкладинки:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "Робота в автономному режимі (лише записувати дані скроблінгу в кеш)" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5771,7 +5819,16 @@ msgstr "Записати кількість відтворювань і рейт msgid "Write metadata when saving playlists" msgstr "Записати метадані під час збереження списків відтворення" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 diff --git a/src/translations/zh_CN.po b/src/translations/zh_CN.po index 0a5fd13a..9a87996c 100644 --- a/src/translations/zh_CN.po +++ b/src/translations/zh_CN.po @@ -745,7 +745,7 @@ msgstr "复制后..." msgid "Albu&m cover" msgstr "专辑封面(&M)" -#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1365 +#: collection/savedgroupingmanager.cpp:98 playlist/playlist.cpp:1369 #: organize/organizedialog.cpp:105 ../build/src/ui_groupbydialog.h:194 #: ../build/src/ui_groupbydialog.h:216 ../build/src/ui_groupbydialog.h:238 #: ../build/src/ui_albumcoversearcher.h:108 @@ -765,7 +765,7 @@ msgstr "专辑(所有曲目采用合适音量)" msgid "Album - Disc" msgstr "专辑 - 碟片" -#: playlist/playlist.cpp:1372 +#: playlist/playlist.cpp:1376 msgid "Album Artist" msgstr "" @@ -854,7 +854,7 @@ msgstr "总是开始播放" msgid "An error occurred loading the iTunes database" msgstr "加载 iTunes 数据库时出错" -#: playlist/playlist.cpp:426 dialogs/edittagdialog.cpp:1450 +#: playlist/playlist.cpp:430 dialogs/edittagdialog.cpp:1450 #, qt-format msgid "An error occurred writing metadata to '%1'" msgstr "向 '%1' 写入元数据时出错" @@ -883,7 +883,7 @@ msgstr "" msgid "Append files/URLs to the playlist" msgstr "添加文件/URL 到播放列表" -#: collection/collectionview.cpp:350 +#: collection/collectionview.cpp:366 #: smartplaylists/smartplaylistsviewcontainer.cpp:65 #: widgets/fileviewlist.cpp:42 internet/internetsearchview.cpp:316 #: internet/internetcollectionview.cpp:315 radios/radioview.cpp:69 @@ -934,7 +934,7 @@ msgstr "艺术手册" msgid "Art Unset" msgstr "" -#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1364 +#: collection/savedgroupingmanager.cpp:95 playlist/playlist.cpp:1368 #: organize/organizedialog.cpp:106 ../build/src/ui_groupbydialog.h:192 #: ../build/src/ui_groupbydialog.h:214 ../build/src/ui_groupbydialog.h:236 #: ../build/src/ui_albumcoversearcher.h:104 @@ -1095,7 +1095,7 @@ msgstr "行为" msgid "Best" msgstr "最佳" -#: playlist/playlist.cpp:1382 +#: playlist/playlist.cpp:1386 msgid "Bit Depth" msgstr "" @@ -1111,7 +1111,7 @@ msgid "Bit rate" msgstr "位速率" #: context/contextview.cpp:166 collection/savedgroupingmanager.cpp:149 -#: playlist/playlist.cpp:1383 ../build/src/ui_groupbydialog.h:210 +#: playlist/playlist.cpp:1387 ../build/src/ui_groupbydialog.h:210 #: ../build/src/ui_groupbydialog.h:232 ../build/src/ui_groupbydialog.h:254 #: ../build/src/ui_transcoderoptionsaac.h:132 #: ../build/src/ui_transcoderoptionsopus.h:76 @@ -1182,7 +1182,7 @@ msgstr "只有 GStreamer 引擎可使用 CD 回放。" msgid "CDDA" msgstr "CDDA" -#: playlist/playlist.cpp:1396 +#: playlist/playlist.cpp:1400 msgid "CUE" msgstr "CUE" @@ -1337,7 +1337,7 @@ msgstr "媒体库搜索" msgid "Comma separated list of class:level, level is 0-3" msgstr "class:level 列表用逗号分隔,level 范围 0-3" -#: playlist/playlist.cpp:1392 smartplaylists/smartplaylistsearchterm.cpp:391 +#: playlist/playlist.cpp:1396 smartplaylists/smartplaylistsearchterm.cpp:391 #: organize/organizedialog.cpp:117 ../build/src/ui_edittagdialog.h:918 msgid "Comment" msgstr "备注" @@ -1354,7 +1354,7 @@ msgstr "自动补全标签" msgid "Complete tags automatically..." msgstr "自动补全标签..." -#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1373 +#: collection/savedgroupingmanager.cpp:128 playlist/playlist.cpp:1377 #: organize/organizedialog.cpp:109 ../build/src/ui_groupbydialog.h:204 #: ../build/src/ui_groupbydialog.h:226 ../build/src/ui_groupbydialog.h:248 #: ../build/src/ui_edittagdialog.h:915 @@ -1435,7 +1435,7 @@ msgstr "复制到媒体库..." msgid "Copy to device" msgstr "复制到设备" -#: core/mainwindow.cpp:758 collection/collectionview.cpp:361 +#: core/mainwindow.cpp:758 collection/collectionview.cpp:381 #: playlist/playlistlistcontainer.cpp:92 widgets/fileviewlist.cpp:48 msgid "Copy to device..." msgstr "复制到设备..." @@ -1446,6 +1446,16 @@ msgid "" "avoid losing configuration before you uninstall the snap:" msgstr "" +#: device/gpoddevice.cpp:241 +#, qt-format +msgid "Could not copy %1 to %2: %3" +msgstr "" + +#: core/filesystemmusicstorage.cpp:98 +#, qt-format +msgid "Could not copy file %1 to %2." +msgstr "" + #: transcoder/transcoder.cpp:72 #, qt-format msgid "" @@ -1458,6 +1468,10 @@ msgstr "无法创建GStreamer元素 \"%1\" - 请确认您已安装了所需GStre msgid "Could not open CUE file %1 for reading: %2" msgstr "" +#: device/mtpconnection.cpp:75 device/mtpconnection.cpp:109 +msgid "Could not open MTP device." +msgstr "" + #: scrobbler/scrobblingapi20.cpp:223 msgid "Could not open URL. Please open this URL in your browser" msgstr "" @@ -1685,11 +1699,11 @@ msgstr "舞曲" msgid "Database corruption detected." msgstr "检测到数据库损坏。" -#: playlist/playlist.cpp:1390 +#: playlist/playlist.cpp:1394 msgid "Date Created" msgstr "" -#: playlist/playlist.cpp:1389 +#: playlist/playlist.cpp:1393 msgid "Date Modified" msgstr "" @@ -1742,7 +1756,7 @@ msgstr "删除文件" msgid "Delete from device..." msgstr "从设备删除..." -#: core/mainwindow.cpp:760 collection/collectionview.cpp:363 +#: core/mainwindow.cpp:760 collection/collectionview.cpp:383 #: widgets/fileviewlist.cpp:49 msgid "Delete from disk..." msgstr "从硬盘删除..." @@ -1780,6 +1794,16 @@ msgstr "移除曲目" msgid "Destination" msgstr "目标" +#: core/filesystemmusicstorage.cpp:92 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite" +msgstr "" + +#: core/filesystemmusicstorage.cpp:73 +#, qt-format +msgid "Destination file %1 exists, but not allowed to overwrite." +msgstr "" + #: ../build/src/ui_transcodedialog.h:235 msgid "Details..." msgstr "详情..." @@ -1826,7 +1850,7 @@ msgctxt "Refers to a disabled notification type in Notification settings." msgid "Disabled" msgstr "禁用" -#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1367 +#: collection/savedgroupingmanager.cpp:116 playlist/playlist.cpp:1371 #: organize/organizedialog.cpp:113 ../build/src/ui_groupbydialog.h:196 #: ../build/src/ui_groupbydialog.h:218 ../build/src/ui_groupbydialog.h:240 #: ../build/src/ui_edittagdialog.h:908 @@ -1870,7 +1894,7 @@ msgstr "不再显示此消息。" msgid "Don't repeat" msgstr "不循环播放" -#: collection/collectionview.cpp:376 +#: collection/collectionview.cpp:396 msgid "Don't show in various artists" msgstr "不在群星中显示" @@ -1967,12 +1991,12 @@ msgstr "编辑标签..." msgid "Edit track information" msgstr "编辑曲目信息" -#: collection/collectionview.cpp:366 widgets/fileviewlist.cpp:52 +#: collection/collectionview.cpp:386 widgets/fileviewlist.cpp:52 #: ../build/src/ui_mainwindow.h:642 msgid "Edit track information..." msgstr "编辑曲目信息..." -#: collection/collectionview.cpp:367 +#: collection/collectionview.cpp:387 msgid "Edit tracks information..." msgstr "编辑曲目信息..." @@ -2122,7 +2146,7 @@ msgid "Equivalent to --log-levels *:3" msgstr "相当于 --log-levels *:3" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "Error" msgstr "错误" @@ -2131,6 +2155,11 @@ msgstr "错误" msgid "Error connecting MTP device %1" msgstr "连接 MTP 设备 %1 时发生错误" +#: device/mtploader.cpp:77 +#, qt-format +msgid "Error connecting MTP device %1: %2" +msgstr "" + #: organize/organizeerrordialog.cpp:71 msgid "Error copying songs" msgstr "复制曲目出错" @@ -2257,6 +2286,11 @@ msgstr "淡入淡出时长" msgid "Failed SQL query: %1" msgstr "" +#: core/filesystemmusicstorage.cpp:57 +#, qt-format +msgid "Failed to create directory %1." +msgstr "" + #: covermanager/albumcoverchoicecontroller.cpp:379 #: covermanager/albumcoverchoicecontroller.cpp:396 #, qt-format @@ -2333,19 +2367,19 @@ msgstr "" msgid "File %1 is not recognized as a valid audio file." msgstr "" -#: playlist/playlist.cpp:1385 +#: playlist/playlist.cpp:1389 msgid "File Name" msgstr "" -#: playlist/playlist.cpp:1386 +#: playlist/playlist.cpp:1390 msgid "File Name (without path)" msgstr "" -#: playlist/playlist.cpp:1387 +#: playlist/playlist.cpp:1391 msgid "File Size" msgstr "" -#: playlist/playlist.cpp:1388 +#: playlist/playlist.cpp:1392 msgid "File Type" msgstr "" @@ -2522,7 +2556,7 @@ msgstr "常规设置" msgid "Genius Authentication" msgstr "" -#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1371 +#: collection/savedgroupingmanager.cpp:125 playlist/playlist.cpp:1375 #: organize/organizedialog.cpp:116 ../build/src/ui_groupbydialog.h:198 #: ../build/src/ui_groupbydialog.h:220 ../build/src/ui_groupbydialog.h:242 #: ../build/src/ui_edittagdialog.h:917 @@ -2630,7 +2664,7 @@ msgstr "按流派/专辑艺术家/专辑分组" msgid "Group by Genre/Artist/Album" msgstr "按流派/艺人/专辑分组" -#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1375 +#: collection/savedgroupingmanager.cpp:134 playlist/playlist.cpp:1379 #: organize/organizedialog.cpp:111 ../build/src/ui_groupbydialog.h:206 #: ../build/src/ui_groupbydialog.h:228 ../build/src/ui_groupbydialog.h:250 #: ../build/src/ui_edittagdialog.h:909 @@ -2796,7 +2830,7 @@ msgstr "插入..." msgid "Install strawberry through PPA:" msgstr "" -#: playlist/playlist.cpp:1398 +#: playlist/playlist.cpp:1402 msgid "Integrated Loudness" msgstr "" @@ -2816,6 +2850,11 @@ msgstr "互联网标签页视图" msgid "Intro tracks" msgstr "代表曲目" +#: device/mtpconnection.cpp:57 +#, qt-format +msgid "Invalid MTP device: %1" +msgstr "" + #: scrobbler/scrobblingapi20.cpp:257 msgid "Invalid reply from web browser. Missing token." msgstr "" @@ -2874,7 +2913,7 @@ msgstr "大专辑封面" msgid "Large sidebar" msgstr "大侧边栏" -#: playlist/playlist.cpp:1379 +#: playlist/playlist.cpp:1383 msgid "Last Played" msgstr "" @@ -2905,7 +2944,7 @@ msgstr "" msgid "Left" msgstr "左" -#: context/contextview.cpp:163 playlist/playlist.cpp:1368 +#: context/contextview.cpp:163 playlist/playlist.cpp:1372 #: organize/organizedialog.cpp:118 ../build/src/ui_edittagdialog.h:888 msgid "Length" msgstr "长度" @@ -3012,7 +3051,7 @@ msgstr "登录" msgid "Long term prediction profile (LTP)" msgstr "长期预测 (LTP)" -#: playlist/playlist.cpp:1399 +#: playlist/playlist.cpp:1403 msgid "Loudness Range" msgstr "" @@ -3047,13 +3086,22 @@ msgid "Lyrics providers" msgstr "歌词提供方" #: ../build/src/ui_subsonicsettingspage.h:251 -msgid "MD5 token" -msgstr "MD5 令牌" +msgid "MD5 token (Recommended)" +msgstr "" #: ../build/src/ui_transcodersettingspage.h:194 msgid "MP3" msgstr "MP3" +#: device/mtpconnection.cpp:100 +msgid "MTP device not found." +msgstr "" + +#: device/mtpconnection.cpp:86 +#, qt-format +msgid "MTP error: %1" +msgstr "" + #: ../build/src/ui_transcoderoptionsaac.h:135 msgid "Main profile (MAIN)" msgstr "主要档案(MAIN)" @@ -3205,7 +3253,7 @@ msgstr "监控媒体库的更改" msgid "Months" msgstr "月份" -#: playlist/playlist.cpp:1394 +#: playlist/playlist.cpp:1398 msgid "Mood" msgstr "情绪" @@ -3381,7 +3429,7 @@ msgid "None" msgstr "无" #: core/mainwindow.cpp:2625 core/mainwindow.cpp:2776 -#: collection/collectionview.cpp:587 +#: collection/collectionview.cpp:701 msgid "None of the selected songs were suitable for copying to a device" msgstr "已选择的曲目均不适合复制到设备" @@ -3480,7 +3528,7 @@ msgstr "打开设备" msgid "Open homepage" msgstr "打开主页" -#: collection/collectionview.cpp:352 +#: collection/collectionview.cpp:368 #: smartplaylists/smartplaylistsviewcontainer.cpp:67 #: widgets/fileviewlist.cpp:44 internet/internetsearchview.cpp:318 #: internet/internetcollectionview.cpp:317 radios/radioview.cpp:77 @@ -3518,7 +3566,7 @@ msgstr "Opus" msgid "Organize Files" msgstr "整理文件" -#: core/mainwindow.cpp:754 collection/collectionview.cpp:359 +#: core/mainwindow.cpp:754 collection/collectionview.cpp:379 msgid "Organize files..." msgstr "整理文件..." @@ -3526,7 +3574,7 @@ msgstr "整理文件..." msgid "Organizing files" msgstr "正在整理文件" -#: playlist/playlist.cpp:1370 +#: playlist/playlist.cpp:1374 msgid "Original Year" msgstr "" @@ -3633,7 +3681,7 @@ msgstr "" msgid "Perform track loudness normalization" msgstr "" -#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1374 +#: collection/savedgroupingmanager.cpp:131 playlist/playlist.cpp:1378 #: organize/organizedialog.cpp:110 ../build/src/ui_groupbydialog.h:205 #: ../build/src/ui_groupbydialog.h:227 ../build/src/ui_groupbydialog.h:249 #: ../build/src/ui_edittagdialog.h:919 @@ -3654,7 +3702,7 @@ msgstr "普通侧边栏" msgid "Play" msgstr "播放" -#: playlist/playlist.cpp:1377 +#: playlist/playlist.cpp:1381 msgid "Play Count" msgstr "" @@ -3910,12 +3958,12 @@ msgstr "将选定曲目加入队列" msgid "Queue selected tracks to play next" msgstr "" -#: core/mainwindow.cpp:1961 collection/collectionview.cpp:356 +#: core/mainwindow.cpp:1961 collection/collectionview.cpp:372 #: internet/internetcollectionview.cpp:321 msgid "Queue to play next" msgstr "" -#: core/mainwindow.cpp:1953 collection/collectionview.cpp:355 +#: core/mainwindow.cpp:1953 collection/collectionview.cpp:371 #: smartplaylists/smartplaylistsviewcontainer.cpp:70 #: internet/internetsearchview.cpp:321 internet/internetcollectionview.cpp:320 msgid "Queue track" @@ -3941,7 +3989,7 @@ msgstr "" msgid "Random" msgstr "" -#: playlist/playlist.cpp:1395 ../build/src/ui_edittagdialog.h:922 +#: playlist/playlist.cpp:1399 ../build/src/ui_edittagdialog.h:922 msgid "Rating" msgstr "" @@ -4141,7 +4189,7 @@ msgstr "播放列表循环" msgid "Repeat track" msgstr "单曲循环" -#: collection/collectionview.cpp:351 +#: collection/collectionview.cpp:367 #: smartplaylists/smartplaylistsviewcontainer.cpp:66 #: widgets/fileviewlist.cpp:43 internet/internetsearchview.cpp:317 #: internet/internetcollectionview.cpp:316 radios/radioview.cpp:73 @@ -4177,7 +4225,7 @@ msgstr "" msgid "Repopulate" msgstr "" -#: collection/collectionview.cpp:372 +#: collection/collectionview.cpp:392 msgid "Rescan song(s)" msgstr "重新扫描歌曲..." @@ -4278,7 +4326,7 @@ msgstr "安全移除设备" msgid "Safely remove the device after copying" msgstr "复制后安全移除设备" -#: playlist/playlist.cpp:1381 +#: playlist/playlist.cpp:1385 msgid "Sample Rate" msgstr "" @@ -4412,7 +4460,7 @@ msgstr "延迟搜索" msgid "Search for album covers..." msgstr "搜索专辑封面..." -#: internet/internetsearchview.cpp:339 +#: collection/collectionview.cpp:376 internet/internetsearchview.cpp:339 msgid "Search for this" msgstr "" @@ -4642,12 +4690,12 @@ msgstr "在媒体库中显示..." msgid "Show in file browser" msgstr "在文件管理器中显示" -#: core/mainwindow.cpp:753 collection/collectionview.cpp:368 +#: core/mainwindow.cpp:753 collection/collectionview.cpp:388 #: widgets/fileviewlist.cpp:53 msgid "Show in file browser..." msgstr "在文件管理器中显示..." -#: collection/collectionview.cpp:375 +#: collection/collectionview.cpp:395 msgid "Show in various artists" msgstr "在群星中显示" @@ -4748,7 +4796,7 @@ msgstr "大小:" msgid "Ska" msgstr "Ska" -#: playlist/playlist.cpp:1378 +#: playlist/playlist.cpp:1382 msgid "Skip Count" msgstr "" @@ -4844,7 +4892,7 @@ msgstr "" msgid "Sorting" msgstr "排序" -#: playlist/playlist.cpp:1393 +#: playlist/playlist.cpp:1397 msgid "Source" msgstr "来源" @@ -5148,7 +5196,7 @@ msgid "" "rescan because of the new features listed below:" msgstr "已更新Strawberry,由于添加了如下特性,您需要更新您的收藏:" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "There are other songs in this album" msgstr "此专辑中还有其它歌曲" @@ -5245,7 +5293,7 @@ msgstr "" msgid "Time step" msgstr "时间步长" -#: playlist/playlist.cpp:1363 organize/organizedialog.cpp:104 +#: playlist/playlist.cpp:1367 organize/organizedialog.cpp:104 #: ../build/src/ui_contextsettingspage.h:422 #: ../build/src/ui_edittagdialog.h:913 #: ../build/src/ui_trackselectiondialog.h:210 @@ -5296,7 +5344,7 @@ msgstr "已传输字节总数" msgid "Total network requests made" msgstr "已发出网络连接总数" -#: playlist/playlist.cpp:1366 organize/organizedialog.cpp:112 +#: playlist/playlist.cpp:1370 organize/organizedialog.cpp:112 #: ../build/src/ui_edittagdialog.h:921 #: ../build/src/ui_trackselectiondialog.h:212 msgid "Track" @@ -5639,7 +5687,7 @@ msgstr "无封面:" msgid "Work in offline mode (Only cache scrobbles)" msgstr "" -#: collection/collectionview.cpp:483 +#: collection/collectionview.cpp:503 msgid "" "Would you like to move the other songs on this album to Various Artists as " "well?" @@ -5657,7 +5705,16 @@ msgstr "" msgid "Write metadata when saving playlists" msgstr "" -#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1369 +#: device/gpoddevice.cpp:288 +msgid "Writing database failed." +msgstr "" + +#: device/gpoddevice.cpp:284 +#, qt-format +msgid "Writing database failed: %1" +msgstr "" + +#: collection/savedgroupingmanager.cpp:119 playlist/playlist.cpp:1373 #: organize/organizedialog.cpp:114 ../build/src/ui_groupbydialog.h:199 #: ../build/src/ui_groupbydialog.h:221 ../build/src/ui_groupbydialog.h:243 #: ../build/src/ui_edittagdialog.h:912 From 53fc939e353a4b10c57d26a1764414ca3bed3aa3 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 7 Feb 2024 01:34:46 +0100 Subject: [PATCH 25/68] ScrobblingAPI20: Ignore permission related error Last.fm returns permission denied error when servers are overloaded, ignore this error instead. Fixes #442 --- src/scrobbler/scrobblingapi20.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/scrobbler/scrobblingapi20.cpp b/src/scrobbler/scrobblingapi20.cpp index 7163c34d..72a9565f 100644 --- a/src/scrobbler/scrobblingapi20.cpp +++ b/src/scrobbler/scrobblingapi20.cpp @@ -174,13 +174,10 @@ ScrobblingAPI20::ReplyResult ScrobblingAPI20::GetJsonObject(QNetworkReply *reply reply_error_type = ReplyResult::APIError; } const ScrobbleErrorCode lastfm_error_code = static_cast(error_code); - if (reply->error() == QNetworkReply::ContentAccessDenied || - reply->error() == QNetworkReply::ContentOperationNotPermittedError || - reply->error() == QNetworkReply::AuthenticationRequiredError || + if (reply->error() == QNetworkReply::AuthenticationRequiredError || lastfm_error_code == ScrobbleErrorCode::InvalidSessionKey || lastfm_error_code == ScrobbleErrorCode::UnauthorizedToken || lastfm_error_code == ScrobbleErrorCode::LoginRequired || - lastfm_error_code == ScrobbleErrorCode::AuthenticationFailed || lastfm_error_code == ScrobbleErrorCode::APIKeySuspended ) { // Session is probably expired From 5bd8f35dc07210025f021e41b5ba9eb2f7cfb33d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 7 Feb 2024 01:46:12 +0100 Subject: [PATCH 26/68] Update Changelog --- Changelog | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Changelog b/Changelog index a3a7ca41..7a587210 100644 --- a/Changelog +++ b/Changelog @@ -2,6 +2,16 @@ Strawberry Music Player ======================= ChangeLog +Unreleased: + + Bugfixes: + * Fixed crash when pressing CTRL + C (#1359). + * (macOS/Windows) Fixed dash and hls streaming, plugins were missing. + + Enhancements: + * Improve error messages when connecting and copying to devices. + * Allow enter to be used with multiselection to add songs to playlist (#1360) + Version 1.0.23 (2024.01.11): Bugfixes: From dd6b9bb38d1ffe620ee938b44aefefc9e7938f38 Mon Sep 17 00:00:00 2001 From: Adam Hill Date: Sat, 3 Feb 2024 19:03:21 -0800 Subject: [PATCH 27/68] MainWindow: Add function to display progress on taskbar --- src/core/mainwindow.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/core/mainwindow.h | 4 ++++ 2 files changed, 44 insertions(+) diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 350c9828..0195f2c0 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -73,6 +73,10 @@ #include #include #include +#ifdef HAVE_DBUS +# include +# include +#endif #include "core/logging.h" @@ -1269,6 +1273,11 @@ void MainWindow::Exit() { return; // Don't quit the application now: wait for the fadeout finished signal } } + +#ifdef HAVE_DBUS + UpdateTaskbarProgress(false, 0, 0); +#endif + DoExit(); } @@ -1321,6 +1330,10 @@ void MainWindow::MediaStopped() { tray_icon_->SetProgress(0); tray_icon_->SetStopped(); +#ifdef HAVE_DBUS + UpdateTaskbarProgress(false, 0, 0); +#endif + song_playing_ = Song(); song_ = Song(); album_cover_ = AlbumCoverImageResult(); @@ -1397,6 +1410,10 @@ void MainWindow::SongChanged(const Song &song) { setWindowTitle(song.PrettyTitleWithArtist()); tray_icon_->SetProgress(0); +#ifdef HAVE_DBUS + UpdateTaskbarProgress(false, 0, 0); +#endif + SendNowPlaying(); const bool enable_change_art = song.is_collection_song() && !song.effective_albumartist().isEmpty() && !song.album().isEmpty(); @@ -1686,6 +1703,10 @@ void MainWindow::Seeked(const qint64 microseconds) { const qint64 length = app_->player()->GetCurrentItem()->Metadata().length_nanosec() / kNsecPerSec; tray_icon_->SetProgress(static_cast(static_cast(position) / static_cast(length) * 100.0)); +#ifdef HAVE_DBUS + UpdateTaskbarProgress(true, position, length); +#endif + } void MainWindow::UpdateTrackPosition() { @@ -1700,6 +1721,10 @@ void MainWindow::UpdateTrackPosition() { // Update the tray icon every 10 seconds if (position % 10 == 0) tray_icon_->SetProgress(static_cast(static_cast(position) / static_cast(length) * 100.0)); +#ifdef HAVE_DBUS + UpdateTaskbarProgress(true, position, length); +#endif + // Send Scrobble if (app_->scrobbler()->enabled() && item->Metadata().is_metadata_good()) { Playlist *playlist = app_->playlist_manager()->active(); @@ -1726,6 +1751,21 @@ void MainWindow::UpdateTrackSliderPosition() { } +#ifdef HAVE_DBUS +void MainWindow::UpdateTaskbarProgress(const bool visible, const double position, const double length) { + + QVariantMap map; + QDBusMessage msg = QDBusMessage::createSignal(QStringLiteral("/org/strawberrymusicplayer/strawberry"), QStringLiteral("com.canonical.Unity.LauncherEntry"), QStringLiteral("Update")); + + map.insert(QStringLiteral("progress-visible"), visible); + map.insert(QStringLiteral("progress"), position / length); + msg << QString("application://org.strawberrymusicplayer.strawberry.desktop") << map; + + QDBusConnection::sessionBus().send(msg); + +} +#endif + void MainWindow::ApplyAddBehaviour(const BehaviourSettingsPage::AddBehaviour b, MimeData *mimedata) { switch (b) { diff --git a/src/core/mainwindow.h b/src/core/mainwindow.h index 31a71017..6053f92e 100644 --- a/src/core/mainwindow.h +++ b/src/core/mainwindow.h @@ -290,6 +290,10 @@ class MainWindow : public QMainWindow, public PlatformInterface { void SetToggleScrobblingIcon(const bool value); +#ifdef HAVE_DBUS + void UpdateTaskbarProgress(const bool visible, const double position, const double length); +#endif + private: Ui_MainWindow *ui_; #ifdef Q_OS_WIN From 679f0e1cd8a96688d8a60796b064bb6fca9b7474 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 00:10:36 +0100 Subject: [PATCH 28/68] CI: Trigger on release --- .github/workflows/build.yml | 100 ++++++++++++++---------------------- 1 file changed, 38 insertions(+), 62 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 23328b67..33447dcd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,10 @@ name: Build -on: [push, pull_request] +on: + push: + pull_request: + types: [opened, synchronize, reopened] + release: + types: [published] jobs: @@ -149,19 +154,19 @@ jobs: /usr/src/packages/SRPMS/*.rpm /usr/src/packages/RPMS/x86_64/*.rpm - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/source ${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}} - name: rsync source - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SOURCES/*.xz ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/source/ - name: rsync rpms - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SRPMS/*.rpm /usr/src/packages/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}}/ @@ -257,16 +262,16 @@ jobs: /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/fedora/${{matrix.fedora_version}} - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/fedora/${{matrix.fedora_version}}/ @@ -367,16 +372,16 @@ jobs: /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/openmandriva/${{matrix.openmandriva_version}} - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/openmandriva/${{matrix.openmandriva_version}}/ @@ -469,16 +474,16 @@ jobs: /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/mageia/${{matrix.mageia_version}} - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/mageia/${{matrix.mageia_version}}/ @@ -565,16 +570,16 @@ jobs: name: debian-${{matrix.debian_version}} path: "*.deb" - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/debian/${{matrix.debian_version}} - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var *.deb ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/debian/${{matrix.debian_version}}/ @@ -666,16 +671,16 @@ jobs: *.deb *.ddeb - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/ubuntu/${{matrix.ubuntu_version}} - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var *.deb *.ddeb ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/ubuntu/${{matrix.ubuntu_version}}/ @@ -762,15 +767,11 @@ jobs: gpg_private_key: ${{secrets.UBUNTU_PPA_GPG_PRIVATE_KEY}} - name: dpkg-buildpackage run: dpkg-buildpackage -S -d -k573D197B5EA20EDF - - name: Set is release - run: echo "is_release=$(grep '^\s*set\s*(\s*INCLUDE_GIT_REVISION\s\+OFF\s*)\s*$' cmake/Version.cmake >/dev/null 2>&1 && echo 1 || echo 0)" >> $GITHUB_ENV - - name: Get release version - run: echo "release_version=$(git describe --tags --exact-match ${GITHUB_SHA} 2>/dev/null | head -1)" >> $GITHUB_ENV - name: Upload Unstable PPA - if: env.is_release != '1' && env.release_version == '' + if: github.event_name == 'push' run: dput ppa:jonaski/strawberry-unstable ../*_source.changes - name: Upload Stable PPA - if: env.is_release == '1' && env.release_version != '' + if: github.event_name == 'release' run: dput ppa:jonaski/strawberry ../*_source.changes @@ -894,16 +895,10 @@ jobs: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - - name: Set is release - run: echo "is_release=$(grep '^\s*set\s*(\s*INCLUDE_GIT_REVISION\s\+OFF\s*)\s*$' cmake/Version.cmake >/dev/null 2>&1 && echo 1 || echo 0)" >> $GITHUB_ENV - - - name: Get release version - run: echo "release_version=$(git describe --tags --exact-match ${GITHUB_SHA} 2>/dev/null | head -1)" >> $GITHUB_ENV - - name: Set Upload path if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos') run: | - if [ "${{env.is_release}}" = "1" ] && ! [ "${{env.release_version}}" = "" ]; then + if [ "${{github.event_name}}" = "release" ]; then echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_ENV else echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_ENV @@ -1012,12 +1007,9 @@ jobs: working-directory: build run: make dmg - - name: Set is release - run: echo "is_release=$(grep '^\s*set\s*(\s*INCLUDE_GIT_REVISION\s\+OFF\s*)\s*$' cmake/Version.cmake >/dev/null 2>&1 && echo 1 || echo 0)" >> $GITHUB_ENV - - name: Set Upload path run: | - if [ "${{env.is_release}}" = "1" ]; then + if [ "${{github.event_name}}" = "release" ]; then echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_ENV else echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_ENV @@ -1201,18 +1193,18 @@ jobs: path: build/StrawberrySetup*.exe - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/windows/mingw - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/StrawberrySetup*.exe ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/windows/mingw/ @@ -1568,7 +1560,7 @@ jobs: rsync-windows-msvc-builds: name: Rsync Windows MSVC builds - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') runs-on: ubuntu-latest needs: - build-windows-msvc @@ -1587,17 +1579,15 @@ jobs: key: ${{secrets.SSH_KEY}} - name: Create server path shell: bash - if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/windows/msvc - name: rsync shell: bash - if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var builds/*/StrawberrySetup-*-msvc-*.exe ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/windows/msvc/ upload-release: name: Upload release - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.event_name == 'release' runs-on: ubuntu-latest needs: - build-opensuse @@ -1618,41 +1608,27 @@ jobs: with: fetch-depth: 0 - - name: Set is release - run: echo "is_release=$(grep '^\s*set\s*(\s*INCLUDE_GIT_REVISION\s\+OFF\s*)\s*$' cmake/Version.cmake >/dev/null 2>&1 && echo 1 || echo 0)" >> $GITHUB_ENV - - - name: Get release version - run: echo "release_version=$(git describe --tags --exact-match ${GITHUB_SHA} 2>/dev/null | head -1)" >> $GITHUB_ENV - - - name: Show release version - if: env.release_version != '' - run: echo "Release version:" ${{env.release_version}} - - name: Show release assets - if: env.release_version != '' env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - run: hub release show -f "%as" ${{env.release_version}} + run: hub release show -f "%as" ${{github.tagname}} - name: Download artifacts - if: env.release_version != '' uses: actions/download-artifact@v4 with: path: artifacts - name: SSH key setup - if: env.release_version != '' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{secrets.SSH_KEY}} - name: Add artifacts to release - if: env.is_release == '1' && env.release_version != '' env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: | - echo "Release version: ${{env.release_version}}" + echo "Release version: ${{github.tagname}}" filenames=() files=() a_files=() @@ -1663,7 +1639,7 @@ jobs: continue fi filenames+=("${filename}") - existing_asset=$(hub release show -f "%as" ${{env.release_version}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) + existing_asset=$(hub release show -f "%as" ${{github.tagname}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) if [ "${existing_asset}" = "" ]; then echo "Adding file: ${filename}" files+=("$i") @@ -1680,5 +1656,5 @@ jobs: fi if ! [ "${a_files_list}" = "" ]; then echo "Adding files to GitHub release: ${files_list}" - hub release edit -m "Strawberry ${{env.release_version}}" ${a_files_list} "${{env.release_version}}" + hub release edit -m "Strawberry ${{github.tagname}}" ${a_files_list} "${{github.tagname}}" fi From 0168182af5c2d6add006364b00b7643f8731d019 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 00:14:19 +0100 Subject: [PATCH 29/68] CddaDevice: Add missing override --- src/device/cddadevice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/cddadevice.h b/src/device/cddadevice.h index 20d3296d..a0c9953d 100644 --- a/src/device/cddadevice.h +++ b/src/device/cddadevice.h @@ -51,7 +51,7 @@ class CddaDevice : public ConnectedDevice { bool Init() override; void Refresh() override; - bool CopyToStorage(const CopyJob&, QString&) { return false; } + bool CopyToStorage(const CopyJob&, QString&) override { return false; } bool DeleteFromStorage(const MusicStorage::DeleteJob&) override { return false; } static QStringList url_schemes() { return QStringList() << "cdda"; } From 56f1a93c4e813cab2589da89ed8d5802dd6beba8 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 01:19:39 +0100 Subject: [PATCH 30/68] CI: Fix tag name variable typo --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 33447dcd..ebe500fc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -686,7 +686,7 @@ jobs: upload-ubuntu-ppa: name: Upload Ubuntu PPA - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.event_name == 'release' || (github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci'))) runs-on: ubuntu-latest strategy: fail-fast: false @@ -1611,7 +1611,7 @@ jobs: - name: Show release assets env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - run: hub release show -f "%as" ${{github.tagname}} + run: hub release show -f "%as" ${{github.event.release.tag_name}} - name: Download artifacts uses: actions/download-artifact@v4 @@ -1628,7 +1628,7 @@ jobs: env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: | - echo "Release version: ${{github.tagname}}" + echo "Release version: ${{github.event.release.tag_name}}" filenames=() files=() a_files=() @@ -1639,7 +1639,7 @@ jobs: continue fi filenames+=("${filename}") - existing_asset=$(hub release show -f "%as" ${{github.tagname}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) + existing_asset=$(hub release show -f "%as" ${{github.event.release.tag_name}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) if [ "${existing_asset}" = "" ]; then echo "Adding file: ${filename}" files+=("$i") @@ -1656,5 +1656,5 @@ jobs: fi if ! [ "${a_files_list}" = "" ]; then echo "Adding files to GitHub release: ${files_list}" - hub release edit -m "Strawberry ${{github.tagname}}" ${a_files_list} "${{github.tagname}}" + hub release edit -m "Strawberry ${{github.event.release.tag_name}}" ${a_files_list} "${{github.event.release.tag_name}}" fi From 923d0f2b7a061bfa890e25bc5580dce1e9dbb496 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 12:12:54 +0100 Subject: [PATCH 31/68] CI: Use common SSH upload job --- .github/workflows/build.yml | 208 ++++++++++++------------------------ 1 file changed, 66 insertions(+), 142 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ebe500fc..93d41cce 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -142,32 +142,24 @@ jobs: CC: gcc-10 CXX: g++-10 run: rpmbuild -ba ../dist/unix/strawberry.spec - - name: Set opensuse subdir - run: echo "opensuse_subdir=$(echo ${{matrix.opensuse_version}} | sed 's/leap:/lp/g' | sed 's/\.//g')" > $GITHUB_ENV - - name: Upload artifacts - if: matrix.opensuse_version != 'tumbleweed' + - name: Set subdir + id: set-subdir + run: echo "subdir=$(echo ${{matrix.opensuse_version}} | sed 's/leap:/lp/g' | sed 's/\.//g')" > $GITHUB_OUTPUT + - name: Upload source + if: matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' uses: actions/upload-artifact@v4 with: - name: opensuse-${{env.opensuse_subdir}}-qt${{matrix.qt_version}} + name: source path: | /usr/src/packages/SOURCES/*.xz + - name: Upload rpm + if: matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' + uses: actions/upload-artifact@v4 + with: + name: opensuse-${{steps.set-subdir.outputs.subdir}} + path: | /usr/src/packages/SRPMS/*.rpm /usr/src/packages/RPMS/x86_64/*.rpm - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/source ${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}} - - name: rsync source - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SOURCES/*.xz ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/source/ - - name: rsync rpms - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SRPMS/*.rpm /usr/src/packages/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}}/ build-fedora: @@ -261,18 +253,6 @@ jobs: path: | /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/fedora/${{matrix.fedora_version}} - - name: rsync - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/fedora/${{matrix.fedora_version}}/ build-openmandriva: @@ -365,24 +345,13 @@ jobs: working-directory: build run: rpmbuild -ba ../dist/unix/strawberry.spec - name: Upload artifacts + if: matrix.opensuse_version != 'cooker' uses: actions/upload-artifact@v4 with: name: openmandriva-${{matrix.openmandriva_version}} path: | /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/openmandriva/${{matrix.openmandriva_version}} - - name: rsync - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/openmandriva/${{matrix.openmandriva_version}}/ build-mageia: @@ -473,18 +442,6 @@ jobs: path: | /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/mageia/${{matrix.mageia_version}} - - name: rsync - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/mageia/${{matrix.mageia_version}}/ build-debian: @@ -569,18 +526,6 @@ jobs: with: name: debian-${{matrix.debian_version}} path: "*.deb" - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/debian/${{matrix.debian_version}} - - name: rsync - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var *.deb ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/debian/${{matrix.debian_version}}/ build-ubuntu: @@ -670,18 +615,6 @@ jobs: path: | *.deb *.ddeb - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/ubuntu/${{matrix.ubuntu_version}} - - name: rsync - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var *.deb *.ddeb ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/ubuntu/${{matrix.ubuntu_version}}/ upload-ubuntu-ppa: @@ -889,28 +822,29 @@ jobs: run: make dmg - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos') + if: github.repository == 'strawberrymusicplayer/strawberry' && (github.event_name == 'release' || (github.event_name == 'push' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos'))) uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Set Upload path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos') + id: set-upload-path + if: github.repository == 'strawberrymusicplayer/strawberry' && (github.event_name == 'release' || (github.event_name == 'push' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos'))) run: | if [ "${{github.event_name}}" = "release" ]; then - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_ENV + echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_OUTPUT else - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_ENV + echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_OUTPUT fi - name: Create server path - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{env.upload_path}} + if: steps.set-upload-path.outputs.upload_path != '' + run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{steps.set-upload-path.outputs.upload_path}} - name: rsync - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{env.upload_path}}/ + if: steps.set-upload-path.outputs.upload_path != '' + run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{steps.set-upload-path.outputs.upload_path}}/ build-macos-private: @@ -1008,18 +942,19 @@ jobs: run: make dmg - name: Set Upload path + id: set-upload-path run: | if [ "${{github.event_name}}" = "release" ]; then - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_ENV + echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_OUTPUT else - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_ENV + echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_OUTPUT fi - name: Create server path - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{env.upload_path}} + run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{steps.set-upload-path.outputs.upload_path}} - name: rsync - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{env.upload_path}}/ + run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{steps.set-upload-path.outputs.upload_path}}/ build-windows-mingw: @@ -1192,21 +1127,6 @@ jobs: name: windows-mingw-${{matrix.arch}}-${{matrix.buildtype}} path: build/StrawberrySetup*.exe - - name: SSH key setup - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - - name: Create server path - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/windows/mingw - - - name: rsync - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/StrawberrySetup*.exe ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/windows/mingw/ - build-windows-msvc: name: Build Windows MSVC @@ -1558,35 +1478,57 @@ jobs: path: build/StrawberrySetup*.exe - rsync-windows-msvc-builds: - name: Rsync Windows MSVC builds - if: github.event_name == 'push' && github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') + upload: + name: Upload + if: github.repository == 'strawberrymusicplayer/strawberry' && (github.event_name == 'release' || (github.event_name == 'push' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci'))) runs-on: ubuntu-latest needs: + - build-opensuse + - build-fedora + - build-debian + - build-ubuntu + - build-windows-mingw - build-windows-msvc steps: + - name: Install packages + env: + DEBIAN_FRONTEND: noninteractive + run: sudo apt install -y git rsync + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Download artifacts uses: actions/download-artifact@v4 with: - path: builds - pattern: windows-msvc-* - - name: View files - run: find builds + path: artifacts - name: SSH key setup uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{secrets.SSH_KEY}} - - name: Create server path - shell: bash - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/windows/msvc - - name: rsync - shell: bash - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var builds/*/StrawberrySetup-*-msvc-*.exe ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/windows/msvc/ + - name: Upload + run: | + for i in $(find artifacts -type f); do + if [ "${{github.event_name}}" = "release" ]; then + upload_path="${{secrets.RELEASES_PATH}}/" + else + distro=$(echo "$i" | cut -d '/' -f 2) + if [ "$(echo debian-bookworm | grep '-' || true)" = "" ]; then + upload_path="${{secrets.BUILDS_PATH}}/${distro}/" + else + distro_name=$(echo "${distro}" | cut -d '-' -f 1) + distro_version=$(echo "${distro}" | cut -d '-' -f 2) + upload_path="${{secrets.BUILDS_PATH}}/${distro_name}/${distro_version}/" + fi + fi + ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${upload_path} + rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var $i ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${upload_path}/ + done - upload-release: - name: Upload release + attach: + name: Attach to release if: github.event_name == 'release' runs-on: ubuntu-latest needs: @@ -1597,40 +1539,28 @@ jobs: - build-windows-mingw - build-windows-msvc steps: - - name: Install packages env: DEBIAN_FRONTEND: noninteractive - run: sudo apt install -y git rsync hub - + run: sudo apt install -y git hub - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Show release assets env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: hub release show -f "%as" ${{github.event.release.tag_name}} - - name: Download artifacts uses: actions/download-artifact@v4 with: path: artifacts - - - name: SSH key setup - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{secrets.SSH_KEY}} - - name: Add artifacts to release env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: | echo "Release version: ${{github.event.release.tag_name}}" filenames=() - files=() a_files=() for i in $(find artifacts -type f); do filename=$(basename $i) @@ -1642,19 +1572,13 @@ jobs: existing_asset=$(hub release show -f "%as" ${{github.event.release.tag_name}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) if [ "${existing_asset}" = "" ]; then echo "Adding file: ${filename}" - files+=("$i") a_files+=("-a" "${i}") else echo "Release already has file: ${filename}" fi done - files_list="${files[@]}" a_files_list="${a_files[@]}" - if ! [ "${files_list}" = "" ]; then - echo "Uploading files: ${files_list}" - rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var ${files_list} ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.RELEASES_PATH}}/ - fi if ! [ "${a_files_list}" = "" ]; then - echo "Adding files to GitHub release: ${files_list}" + echo "Adding files to GitHub release" hub release edit -m "Strawberry ${{github.event.release.tag_name}}" ${a_files_list} "${{github.event.release.tag_name}}" fi From 5e4b1932608aa0c09d23220ba83bceef020b5e1f Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 12:17:04 +0100 Subject: [PATCH 32/68] CI: Fix greping variable --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 93d41cce..6e257b2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1514,7 +1514,7 @@ jobs: upload_path="${{secrets.RELEASES_PATH}}/" else distro=$(echo "$i" | cut -d '/' -f 2) - if [ "$(echo debian-bookworm | grep '-' || true)" = "" ]; then + if [ "$(echo "$i" | grep '-' || true)" = "" ]; then upload_path="${{secrets.BUILDS_PATH}}/${distro}/" else distro_name=$(echo "${distro}" | cut -d '-' -f 1) From 19836e88984dd92089a6b8a4721a282de985c56f Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 12:24:29 +0100 Subject: [PATCH 33/68] CI: Fix variable typo --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e257b2a..d04711d3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -345,7 +345,7 @@ jobs: working-directory: build run: rpmbuild -ba ../dist/unix/strawberry.spec - name: Upload artifacts - if: matrix.opensuse_version != 'cooker' + if: matrix.openmandriva_version != 'cooker' uses: actions/upload-artifact@v4 with: name: openmandriva-${{matrix.openmandriva_version}} From 6bdd9ad4dd14917af69625b0b5c4ef9d75b18ee7 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 11 Feb 2024 23:52:22 +0100 Subject: [PATCH 34/68] GstEnginePipeline: Only hard-code playbin3 with gst 1.22 --- src/engine/gstenginepipeline.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index 1dd3391a..5f4b3a20 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -335,7 +335,7 @@ bool GstEnginePipeline::InitFromUrl(const QUrl &media_url, const QUrl &stream_ur guint version_major = 0, version_minor = 0, version_micro = 0, version_nano = 0; gst_plugins_base_version(&version_major, &version_minor, &version_micro, &version_nano); - if (QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor), static_cast(version_micro)), QVersionNumber(1, 22, 0)) >= 0) { + if (QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor)), QVersionNumber(1, 22)) == 0) { pipeline_ = CreateElement("playbin3", "pipeline", nullptr, error); } else { From 05381096aa47b04117254f09d5954c0b2ab801ff Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 12 Feb 2024 16:57:51 +0100 Subject: [PATCH 35/68] RadioParadiseService: Use API to receive streams --- src/radios/radioparadiseservice.cpp | 103 ++++++++++++++++++++++++---- src/radios/radioparadiseservice.h | 14 +++- 2 files changed, 104 insertions(+), 13 deletions(-) diff --git a/src/radios/radioparadiseservice.cpp b/src/radios/radioparadiseservice.cpp index d5434fb2..3ff54792 100644 --- a/src/radios/radioparadiseservice.cpp +++ b/src/radios/radioparadiseservice.cpp @@ -1,6 +1,6 @@ /* * Strawberry Music Player - * Copyright 2021, Jonas Kvinge + * Copyright 2021-2024, Jonas Kvinge * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,28 +19,107 @@ #include #include +#include +#include +#include +#include +#include +#include "core/application.h" +#include "core/networkaccessmanager.h" +#include "core/taskmanager.h" #include "core/iconloader.h" #include "radioparadiseservice.h" #include "radiochannel.h" +const char *RadioParadiseService::kApiChannelsUrl = "https://api.radioparadise.com/api/list_streams"; + RadioParadiseService::RadioParadiseService(Application *app, SharedPtr network, QObject *parent) : RadioService(Song::Source::RadioParadise, "Radio Paradise", IconLoader::Load("radioparadise"), app, network, parent) {} QUrl RadioParadiseService::Homepage() { return QUrl("https://radioparadise.com/"); } QUrl RadioParadiseService::Donate() { return QUrl("https://payments.radioparadise.com/rp2s-content.php?name=Support&file=support"); } -void RadioParadiseService::GetChannels() { +void RadioParadiseService::Abort() { - emit NewChannels(RadioChannelList() - << RadioChannel(source_, "Main Mix 320k AAC", QUrl("https://stream.radioparadise.com/aac-320")) - << RadioChannel(source_, "Mellow Mix 320k AAC", QUrl("https://stream.radioparadise.com/mellow-320")) - << RadioChannel(source_, "Rock Mix 320k AAC", QUrl("https://stream.radioparadise.com/rock-320")) - << RadioChannel(source_, "World/Etc Mix 320k AAC", QUrl("https://stream.radioparadise.com/world-etc-320")) - << RadioChannel(source_, "Main Mix FLAC", QUrl("https://stream.radioparadise.com/flacm")) - << RadioChannel(source_, "Mellow Mix FLAC", QUrl("https://stream.radioparadise.com/mellow-flacm")) - << RadioChannel(source_, "Rock Mix FLAC", QUrl("https://stream.radioparadise.com/rock-flacm")) - << RadioChannel(source_, "World/Etc Mix FLAC", QUrl("https://stream.radioparadise.com/world-etc-flacm")) - ); + while (!replies_.isEmpty()) { + QNetworkReply *reply = replies_.takeFirst(); + QObject::disconnect(reply, nullptr, this, nullptr); + if (reply->isRunning()) reply->abort(); + reply->deleteLater(); + } + + channels_.clear(); + +} + +void RadioParadiseService::GetChannels() { + + Abort(); + + QUrl url(kApiChannelsUrl); + QNetworkRequest req(url); + QNetworkReply *reply = network_->get(req); + replies_ << reply; + const int task_id = app_->task_manager()->StartTask(tr("Getting %1 channels").arg(name_)); + QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, task_id]() { GetChannelsReply(reply, task_id); }); + +} + +void RadioParadiseService::GetChannelsReply(QNetworkReply *reply, const int task_id) { + + if (replies_.contains(reply)) replies_.removeAll(reply); + reply->deleteLater(); + + QJsonObject object = ExtractJsonObj(reply); + if (object.isEmpty()) { + app_->task_manager()->SetTaskFinished(task_id); + emit NewChannels(); + return; + } + + if (!object.contains("channels") || !object["channels"].isArray()) { + Error("Missing JSON channels array.", object); + app_->task_manager()->SetTaskFinished(task_id); + emit NewChannels(); + return; + } + QJsonArray array_channels = object["channels"].toArray(); + + RadioChannelList channels; + for (const QJsonValueRef value_channel : array_channels) { + if (!value_channel.isObject()) continue; + QJsonObject obj_channel = value_channel.toObject(); + if (!obj_channel.contains("chan_name") || !obj_channel.contains("streams")) { + continue; + } + QString name = obj_channel["chan_name"].toString(); + QJsonValue value_streams = obj_channel["streams"]; + if (!value_streams.isArray()) { + continue; + } + QJsonArray array_streams = obj_channel["streams"].toArray(); + for (const QJsonValueRef value_stream : array_streams) { + if (!value_stream.isObject()) continue; + QJsonObject obj_stream = value_stream.toObject(); + if (!obj_stream.contains("label") || !obj_stream.contains("url")) { + continue; + } + QString label = obj_stream["label"].toString(); + QString url = obj_stream["url"].toString(); + if (!url.contains(QRegularExpression("^[0-9a-zA-Z]*:\\/\\/", QRegularExpression::CaseInsensitiveOption))) { + url.prepend("https://"); + } + RadioChannel channel; + channel.source = source_; + channel.name = name + " - " + label; + channel.url.setUrl(url); + channels << channel; + } + } + + app_->task_manager()->SetTaskFinished(task_id); + + emit NewChannels(channels); } diff --git a/src/radios/radioparadiseservice.h b/src/radios/radioparadiseservice.h index bf43ad04..2341ad82 100644 --- a/src/radios/radioparadiseservice.h +++ b/src/radios/radioparadiseservice.h @@ -1,6 +1,6 @@ /* * Strawberry Music Player - * Copyright 2021, Jonas Kvinge + * Copyright 2021-2024, Jonas Kvinge * * Strawberry is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,9 +24,11 @@ #include #include "radioservice.h" +#include "radiochannel.h" class Application; class NetworkAccessManager; +class QNetworkReply; class RadioParadiseService : public RadioService { Q_OBJECT @@ -37,8 +39,18 @@ class RadioParadiseService : public RadioService { QUrl Homepage() override; QUrl Donate() override; + void Abort(); + public slots: void GetChannels() override; + + private slots: + void GetChannelsReply(QNetworkReply *reply, const int task_id); + + private: + static const char *kApiChannelsUrl; + QList replies_; + RadioChannelList channels_; }; #endif // RADIOPARADISESERVICE_H From 7770aba877031fd29666ce5e2f421c317512dfc1 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 14 Feb 2024 18:46:23 +0100 Subject: [PATCH 36/68] GstEngine: Add pipewiresink --- src/engine/gstengine.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 32080c22..1e4342fc 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -413,14 +413,19 @@ EngineBase::OutputDetailsList GstEngine::GetOutputsList() const { GList *const features = gst_registry_get_feature_list(registry, GST_TYPE_ELEMENT_FACTORY); for (GList *future = features; future; future = g_list_next(future)) { GstElementFactory *factory = GST_ELEMENT_FACTORY(future->data); - const gchar *metadata = gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS); - if (QString(metadata).startsWith("Sink/Audio", Qt::CaseInsensitive)) { - OutputDetails output; - output.name = QString::fromUtf8(gst_plugin_feature_get_name(future->data)); - output.description = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_DESCRIPTION)); - if (output.name == "wasapi2sink" && output.description == "Stream audio to an audio capture device through WASAPI") { - output.description.append("2"); + const QString metadata = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS)); + const QString name = QString::fromUtf8(gst_plugin_feature_get_name(future->data)); + if (metadata.startsWith("Sink/Audio", Qt::CaseInsensitive) || name == "pipewiresink") { + QString description = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_DESCRIPTION)); + if (name == "wasapi2sink" && description == "Stream audio to an audio capture device through WASAPI") { + description.append("2"); } + else if (name == "pipewiresink" && description == "Send video to PipeWire") { + description = "Send audio to PipeWire"; + } + OutputDetails output; + output.name = name; + output.description = description; if (output.name == kAutoSink) output.iconname = "soundcard"; else if (output.name == kALSASink || output.name == kOSS4Sink) output.iconname = "alsa"; else if (output.name == kJackAudioSink) output.iconname = "jack"; From 6b1c14f875e5464f3d19a9448bbc886efc589976 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 16 Feb 2024 00:29:17 +0100 Subject: [PATCH 37/68] GstEngine: Make sure asiosink is detected --- src/engine/gstengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 1e4342fc..95cf34cf 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -415,7 +415,7 @@ EngineBase::OutputDetailsList GstEngine::GetOutputsList() const { GstElementFactory *factory = GST_ELEMENT_FACTORY(future->data); const QString metadata = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS)); const QString name = QString::fromUtf8(gst_plugin_feature_get_name(future->data)); - if (metadata.startsWith("Sink/Audio", Qt::CaseInsensitive) || name == "pipewiresink") { + if (metadata.startsWith("Sink/Audio", Qt::CaseInsensitive) || name == "pipewiresink" || (metadata.startsWith("Source/Audio", Qt::CaseInsensitive) && name.contains("sink"))) { QString description = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_DESCRIPTION)); if (name == "wasapi2sink" && description == "Stream audio to an audio capture device through WASAPI") { description.append("2"); From cb44c71733c5bfbed1ae7d803883a501e4d570de Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 16 Feb 2024 21:38:08 +0100 Subject: [PATCH 38/68] DirectSoundDeviceFinder: Add waveformsink --- src/engine/directsounddevicefinder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/directsounddevicefinder.cpp b/src/engine/directsounddevicefinder.cpp index 64ec1285..263932cb 100644 --- a/src/engine/directsounddevicefinder.cpp +++ b/src/engine/directsounddevicefinder.cpp @@ -35,7 +35,7 @@ #include "enginedevice.h" #include "core/logging.h" -DirectSoundDeviceFinder::DirectSoundDeviceFinder() : DeviceFinder("directsound", { "directsound", "dsound", "directsoundsink", "directx", "directx2" }) {} +DirectSoundDeviceFinder::DirectSoundDeviceFinder() : DeviceFinder("directsound", { "directsound", "dsound", "directsoundsink", "directx", "directx2", "waveformsink" }) {} EngineDeviceList DirectSoundDeviceFinder::ListDevices() { State state; From a354f6bdc57dab17a29b54663fa86436abeaf7bc Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 16 Feb 2024 21:38:33 +0100 Subject: [PATCH 39/68] GstEnginePipeline: Set device-clsid --- src/engine/gstenginepipeline.cpp | 33 +++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index 5f4b3a20..8194947c 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -448,7 +448,38 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { break; } } - + else if (g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "device-clsid")) { +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + switch (device_.metaType().id()) { +#else + switch (device_.type()) { +#endif +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + case QMetaType::QString:{ +#else + case QVariant::String:{ +#endif + QString device = device_.toString(); + if (!device.isEmpty()) { + qLog(Debug) << "Setting device-clsid" << device << "for" << output_; + g_object_set(G_OBJECT(audiosink_), "device-clsid", device.toUtf8().constData(), nullptr); + } + break; + } +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + case QMetaType::QByteArray:{ +#else + case QVariant::ByteArray:{ +#endif + QByteArray device = device_.toByteArray(); + if (!device.isEmpty()) { + qLog(Debug) << "Setting device-clsid" << device_ << "for" << output_; + g_object_set(G_OBJECT(audiosink_), "device-clsid", device.constData(), nullptr); + } + break; + } + } + } else if (g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "port-pattern")) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) switch (device_.metaType().id()) { From 06fac2b7a37ce7091d472a9f78e41b51a34674e6 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 16 Feb 2024 18:23:18 +0100 Subject: [PATCH 40/68] CI: Copy all gstreamer plugins for mingw and msvc --- .github/workflows/build.yml | 68 ++----------------------------------- 1 file changed, 2 insertions(+), 66 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d04711d3..d71dd708 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1042,7 +1042,7 @@ jobs: - name: Copy gstreamer plugins working-directory: build - run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/gstreamer-1.0/{libgstadaptivedemux2.dll,libgstaes.dll,libgstaiff.dll,libgstapetag.dll,libgstapp.dll,libgstasf.dll,libgstasfmux.dll,libgstaudioconvert.dll,libgstaudiofx.dll,libgstaudiomixer.dll,libgstaudioparsers.dll,libgstaudiorate.dll,libgstaudioresample.dll,libgstaudiotestsrc.dll,libgstautodetect.dll,libgstbs2b.dll,libgstcoreelements.dll,libgstdash.dll,libgstdirectsound.dll,libgstequalizer.dll,libgstfaac.dll,libgstfaad.dll,libgstfdkaac.dll,libgstflac.dll,libgstgio.dll,libgstgme.dll,libgsthls.dll,libgsticydemux.dll,libgstid3demux.dll,libgstid3tag.dll,libgstisomp4.dll,libgstlame.dll,libgstmpegpsdemux.dll,libgstmpegpsmux.dll,libgstmpegtsdemux.dll,libgstmpegtsmux.dll,libgstlibav.dll,libgstmpg123.dll,libgstmusepack.dll,libgstogg.dll,libgstopenmpt.dll,libgstopus.dll,libgstopusparse.dll,libgstpbtypes.dll,libgstplayback.dll,libgstreplaygain.dll,libgstrtp.dll,libgstrtsp.dll,libgstsoup.dll,libgstspectrum.dll,libgstspeex.dll,libgsttaglib.dll,libgsttcp.dll,libgsttwolame.dll,libgsttypefindfunctions.dll,libgstudp.dll,libgstvolume.dll,libgstvorbis.dll,libgstwasapi.dll,libgstwavenc.dll,libgstwavpack.dll,libgstwavparse.dll,libgstxingmux.dll} ${GITHUB_WORKSPACE}/build/gstreamer-plugins/ + run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/gstreamer-1.0/*.dll ${GITHUB_WORKSPACE}/build/gstreamer-plugins/ - name: Copy extra binaries working-directory: build @@ -1333,71 +1333,7 @@ jobs: - name: Copy gstreamer plugins shell: cmd working-directory: build - run: | - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstadaptivedemux2.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaes.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaiff.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstapetag.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstapp.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstasf.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstasfmux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudioconvert.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiofx.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiomixer.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudioparsers.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiorate.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudioresample.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiotestsrc.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstautodetect.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstbs2b.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstcoreelements.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstdash.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstdirectsound.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstequalizer.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstfaac.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstfaad.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstfdkaac.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstflac.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstgio.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstgme.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsthls.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsticydemux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstid3demux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstid3tag.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstisomp4.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstlame.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegpsdemux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegpsmux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegtsdemux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpegtsmux.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstlibav.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpg123.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmusepack.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstogg.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstopenmpt.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstopus.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstopusparse.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstpbtypes.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstplayback.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstreplaygain.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstrtp.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstrtsp.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstsoup.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstspectrum.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstspeex.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttaglib.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttcp.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttwolame.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttypefindfunctions.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstudp.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstvolume.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstvorbis.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwasapi.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwasapi2.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwavenc.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwavpack.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwavparse.dll .\gstreamer-plugins\ - copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstxingmux.dll .\gstreamer-plugins\ + run: copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\*.dll .\gstreamer-plugins\ - name: Download copydlldeps.sh shell: bash From 67cc69179b23a3ef7bf64a0a575a6fc74c73845e Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 16 Feb 2024 18:23:35 +0100 Subject: [PATCH 41/68] nsi: Update gstreamer plugins --- dist/windows/strawberry.nsi.in | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/dist/windows/strawberry.nsi.in b/dist/windows/strawberry.nsi.in index 1247cb46..40751ba4 100644 --- a/dist/windows/strawberry.nsi.in +++ b/dist/windows/strawberry.nsi.in @@ -663,11 +663,11 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=libgstid3tag.dll" "gstreamer-plugins\libgstid3tag.dll" File "/oname=libgstisomp4.dll" "gstreamer-plugins\libgstisomp4.dll" File "/oname=libgstlame.dll" "gstreamer-plugins\libgstlame.dll" + File "/oname=libgstlibav.dll" "gstreamer-plugins\libgstlibav.dll" File "/oname=libgstmpegpsdemux.dll" "gstreamer-plugins\libgstmpegpsdemux.dll" File "/oname=libgstmpegpsmux.dll" "gstreamer-plugins\libgstmpegpsmux.dll" File "/oname=libgstmpegtsdemux.dll" "gstreamer-plugins\libgstmpegtsdemux.dll" File "/oname=libgstmpegtsmux.dll" "gstreamer-plugins\libgstmpegtsmux.dll" - File "/oname=libgstlibav.dll" "gstreamer-plugins\libgstlibav.dll" File "/oname=libgstmpg123.dll" "gstreamer-plugins\libgstmpg123.dll" File "/oname=libgstmusepack.dll" "gstreamer-plugins\libgstmusepack.dll" File "/oname=libgstogg.dll" "gstreamer-plugins\libgstogg.dll" @@ -690,6 +690,7 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=libgstvolume.dll" "gstreamer-plugins\libgstvolume.dll" File "/oname=libgstvorbis.dll" "gstreamer-plugins\libgstvorbis.dll" File "/oname=libgstwasapi.dll" "gstreamer-plugins\libgstwasapi.dll" + File "/oname=libgstwaveform.dll" "gstreamer-plugins\libgstwaveform.dll" File "/oname=libgstwavenc.dll" "gstreamer-plugins\libgstwavenc.dll" File "/oname=libgstwavpack.dll" "gstreamer-plugins\libgstwavpack.dll" File "/oname=libgstwavparse.dll" "gstreamer-plugins\libgstwavparse.dll" @@ -704,6 +705,7 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=gstapp.dll" "gstreamer-plugins\gstapp.dll" File "/oname=gstasf.dll" "gstreamer-plugins\gstasf.dll" File "/oname=gstasfmux.dll" "gstreamer-plugins\gstasfmux.dll" + File "/oname=gstasio.dll" "gstreamer-plugins\gstasio.dll" File "/oname=gstaudioconvert.dll" "gstreamer-plugins\gstaudioconvert.dll" File "/oname=gstaudiofx.dll" "gstreamer-plugins\gstaudiofx.dll" File "/oname=gstaudiomixer.dll" "gstreamer-plugins\gstaudiomixer.dll" @@ -729,11 +731,11 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=gstid3tag.dll" "gstreamer-plugins\gstid3tag.dll" File "/oname=gstisomp4.dll" "gstreamer-plugins\gstisomp4.dll" File "/oname=gstlame.dll" "gstreamer-plugins\gstlame.dll" + File "/oname=gstlibav.dll" "gstreamer-plugins\gstlibav.dll" File "/oname=gstmpegpsdemux.dll" "gstreamer-plugins\gstmpegpsdemux.dll" File "/oname=gstmpegpsmux.dll" "gstreamer-plugins\gstmpegpsmux.dll" File "/oname=gstmpegtsdemux.dll" "gstreamer-plugins\gstmpegtsdemux.dll" File "/oname=gstmpegtsmux.dll" "gstreamer-plugins\gstmpegtsmux.dll" - File "/oname=gstlibav.dll" "gstreamer-plugins\gstlibav.dll" File "/oname=gstmpg123.dll" "gstreamer-plugins\gstmpg123.dll" File "/oname=gstmusepack.dll" "gstreamer-plugins\gstmusepack.dll" File "/oname=gstogg.dll" "gstreamer-plugins\gstogg.dll" @@ -756,8 +758,8 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=gstvolume.dll" "gstreamer-plugins\gstvolume.dll" File "/oname=gstvorbis.dll" "gstreamer-plugins\gstvorbis.dll" File "/oname=gstwasapi.dll" "gstreamer-plugins\gstwasapi.dll" - ; Disable wasapi2 until issue (https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870) is fixed. - ;File "/oname=gstwasapi2.dll" "gstreamer-plugins\gstwasapi2.dll" + File "/oname=gstwasapi2.dll" "gstreamer-plugins\gstwasapi2.dll" + File "/oname=gstwaveform.dll" "gstreamer-plugins\gstwaveform.dll" File "/oname=gstwavenc.dll" "gstreamer-plugins\gstwavenc.dll" File "/oname=gstwavpack.dll" "gstreamer-plugins\gstwavpack.dll" File "/oname=gstwavparse.dll" "gstreamer-plugins\gstwavparse.dll" @@ -1166,11 +1168,11 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\libgstid3tag.dll" Delete "$INSTDIR\gstreamer-plugins\libgstisomp4.dll" Delete "$INSTDIR\gstreamer-plugins\libgstlame.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstlibav.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmpegpsdemux.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmpegpsmux.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmpegtsdemux.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmpegtsmux.dll" - Delete "$INSTDIR\gstreamer-plugins\libgstlibav.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmpg123.dll" Delete "$INSTDIR\gstreamer-plugins\libgstmusepack.dll" Delete "$INSTDIR\gstreamer-plugins\libgstogg.dll" @@ -1193,6 +1195,7 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\libgstvolume.dll" Delete "$INSTDIR\gstreamer-plugins\libgstvorbis.dll" Delete "$INSTDIR\gstreamer-plugins\libgstwasapi.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstwaveform.dll" Delete "$INSTDIR\gstreamer-plugins\libgstwavenc.dll" Delete "$INSTDIR\gstreamer-plugins\libgstwavpack.dll" Delete "$INSTDIR\gstreamer-plugins\libgstwavparse.dll" @@ -1209,6 +1212,7 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\gstapp.dll" Delete "$INSTDIR\gstreamer-plugins\gstasf.dll" Delete "$INSTDIR\gstreamer-plugins\gstasfmux.dll" + Delete "$INSTDIR\gstreamer-plugins\gstasio.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudioconvert.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudiofx.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudiomixer.dll" @@ -1234,11 +1238,11 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\gstid3tag.dll" Delete "$INSTDIR\gstreamer-plugins\gstisomp4.dll" Delete "$INSTDIR\gstreamer-plugins\gstlame.dll" + Delete "$INSTDIR\gstreamer-plugins\gstlibav.dll" Delete "$INSTDIR\gstreamer-plugins\gstmpegpsdemux.dll" Delete "$INSTDIR\gstreamer-plugins\gstmpegpsmux.dll" Delete "$INSTDIR\gstreamer-plugins\gstmpegtsdemux.dll" Delete "$INSTDIR\gstreamer-plugins\gstmpegtsmux.dll" - Delete "$INSTDIR\gstreamer-plugins\gstlibav.dll" Delete "$INSTDIR\gstreamer-plugins\gstmpg123.dll" Delete "$INSTDIR\gstreamer-plugins\gstmusepack.dll" Delete "$INSTDIR\gstreamer-plugins\gstogg.dll" @@ -1262,6 +1266,7 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\gstvorbis.dll" Delete "$INSTDIR\gstreamer-plugins\gstwasapi.dll" Delete "$INSTDIR\gstreamer-plugins\gstwasapi2.dll" + Delete "$INSTDIR\gstreamer-plugins\gstwaveform.dll" Delete "$INSTDIR\gstreamer-plugins\gstwavenc.dll" Delete "$INSTDIR\gstreamer-plugins\gstwavpack.dll" Delete "$INSTDIR\gstreamer-plugins\gstwavparse.dll" From ff28e7c86e7e4bed6d300be66a31c73ed40dc667 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 17 Feb 2024 00:40:55 +0100 Subject: [PATCH 42/68] Add ASIO device finder --- src/CMakeLists.txt | 2 +- src/engine/asiodevicefinder.cpp | 92 +++++++++++++++++++++++++++++++++ src/engine/asiodevicefinder.h | 41 +++++++++++++++ src/engine/devicefinders.cpp | 2 + 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 src/engine/asiodevicefinder.cpp create mode 100644 src/engine/asiodevicefinder.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b695dd6b..c8f06b3c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -850,7 +850,7 @@ optional_source(WIN32 HEADERS core/windows7thumbbar.h ) -optional_source(MSVC SOURCES engine/uwpdevicefinder.cpp) +optional_source(MSVC SOURCES engine/uwpdevicefinder.cpp engine/asiodevicefinder.cpp) optional_source(HAVE_SUBSONIC SOURCES diff --git a/src/engine/asiodevicefinder.cpp b/src/engine/asiodevicefinder.cpp new file mode 100644 index 00000000..5373b83e --- /dev/null +++ b/src/engine/asiodevicefinder.cpp @@ -0,0 +1,92 @@ +/* + * Strawberry Music Player + * Copyright 2024, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#include +#include +#include +#include + +#include + +#include "asiodevicefinder.h" +#include "enginedevice.h" +#include "core/logging.h" + +AsioDeviceFinder::AsioDeviceFinder() : DeviceFinder("asio", { "asiosink" }) {} + +EngineDeviceList AsioDeviceFinder::ListDevices() { + + EngineDeviceList devices; + + HKEY reg_key = nullptr; + LSTATUS status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"software\\asio", 0, KEY_READ, ®_key); + + for (DWORD i = 0; status == ERROR_SUCCESS; i++) { + WCHAR key_name[256]; + status = RegEnumKeyW(reg_key, i, key_name, sizeof(key_name)); + EngineDevice device = GetDevice(reg_key, key_name); + if (device.value.isValid()) { + devices.append(device); + } + } + + if (reg_key) { + RegCloseKey(reg_key); + } + + return devices; + +} + +EngineDevice AsioDeviceFinder::GetDevice(HKEY reg_key, LPWSTR key_name) { + + HKEY sub_key = nullptr; + const QScopeGuard scopeguard_sub_key = qScopeGuard([sub_key]() { + if (sub_key) { + RegCloseKey(sub_key); + } + }); + + LSTATUS status = RegOpenKeyExW(reg_key, key_name, 0, KEY_READ, &sub_key); + if (status != ERROR_SUCCESS) { + return EngineDevice(); + } + + DWORD type = REG_SZ; + WCHAR clsid_data[256]{}; + DWORD clsid_data_size = sizeof(clsid_data); + status = RegQueryValueExW(sub_key, L"clsid", 0, &type, (LPBYTE)clsid_data, &clsid_data_size); + if (status != ERROR_SUCCESS) { + return EngineDevice(); + } + + EngineDevice device; + device.value = QString::fromStdWString(clsid_data); + device.description = QString::fromStdWString(key_name); + + WCHAR desc_data[256]{}; + DWORD desc_data_size = sizeof(desc_data); + status = RegQueryValueExW(sub_key, L"description", 0, &type, (LPBYTE)desc_data, &desc_data_size); + if (status == ERROR_SUCCESS) { + device.description = QString::fromStdWString(desc_data); + } + + return device; + +} diff --git a/src/engine/asiodevicefinder.h b/src/engine/asiodevicefinder.h new file mode 100644 index 00000000..a6d66860 --- /dev/null +++ b/src/engine/asiodevicefinder.h @@ -0,0 +1,41 @@ +/* + * Strawberry Music Player + * Copyright 2024, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#ifndef ASIODEVICEFINDER_H +#define ASIODEVICEFINDER_H + +#include "config.h" + +#include + +#include "devicefinder.h" +#include "enginedevice.h" + +class AsioDeviceFinder : public DeviceFinder { + public: + explicit AsioDeviceFinder(); + + virtual bool Initialize() { return true; } + virtual EngineDeviceList ListDevices(); + + private: + EngineDevice GetDevice(HKEY reg_key, LPWSTR key_name); +}; + +#endif // ASIODEVICEFINDER_H diff --git a/src/engine/devicefinders.cpp b/src/engine/devicefinders.cpp index 4f86c425..2c5f93a1 100644 --- a/src/engine/devicefinders.cpp +++ b/src/engine/devicefinders.cpp @@ -45,6 +45,7 @@ # include "mmdevicefinder.h" # ifdef _MSC_VER # include "uwpdevicefinder.h" +# include "asiodevicefinder.h" # endif // _MSC_VER #endif // Q_OS_WIN32 @@ -73,6 +74,7 @@ void DeviceFinders::Init() { device_finders.append(new MMDeviceFinder); # ifdef _MSC_VER device_finders.append(new UWPDeviceFinder); + device_finders.append(new AsioDeviceFinder); # endif // _MSC_VER #endif // Q_OS_WIN32 From 8f89bf64025c3359f7cfe0fc5512ba91bb811313 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 18 Feb 2024 14:24:20 +0100 Subject: [PATCH 43/68] Replace tabs with spaces --- 3rdparty/getopt/getopt.cpp | 6 +++--- README.md | 6 +++--- data/icons.qrc | 4 ++-- src/core/song.cpp | 2 +- src/globalshortcuts/keymapper_x11.h | 2 +- src/playlist/dynamicplaylistcontrols.ui | 6 +++--- src/playlist/playlistsequence.cpp | 12 ++++++------ 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/3rdparty/getopt/getopt.cpp b/3rdparty/getopt/getopt.cpp index d1e7935e..f4089735 100644 --- a/3rdparty/getopt/getopt.cpp +++ b/3rdparty/getopt/getopt.cpp @@ -62,7 +62,7 @@ enum ENUM_ORDERING { // // -// Ansi structures and functions follow +// Ansi structures and functions follow // // @@ -409,7 +409,7 @@ int _getopt_long_only_r_a(int argc, char *const *argv, const char *options, cons // // -// Unicode Structures and Functions +// Unicode Structures and Functions // // @@ -750,4 +750,4 @@ int _getopt_long_r_w(int argc, wchar_t *const *argv, const wchar_t *options, con int _getopt_long_only_r_w(int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index, struct _getopt_data_w *d); int _getopt_long_only_r_w(int argc, wchar_t *const *argv, const wchar_t *options, const struct option_w *long_options, int *opt_index, struct _getopt_data_w *d) { return _getopt_internal_r_w(argc, argv, options, long_options, opt_index, 1, d, 0); -} \ No newline at end of file +} diff --git a/README.md b/README.md index d75d76ff..eab2d734 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Resources: * We do not take feature requests from users on GitHub. Any issues related to feature requests will be closed. This does not necessarily mean that we won't add new features, but we don't have time to take feature requests or answer questions about new features from users. It is still possible to suggest or discuss new features on the forum (https://forum.strawberrymusicplayer.org/). * We do not maintain the Flatpak package. Do not report issues related to Flatpak unless the issue can be reproduced with a native package, use Flatpak support instead https://flatpak.org/about/ -### :moneybag: Sponsoring +### :moneybag: Sponsoring The program is free software, released under GPL. If you like this program and can make use of it, consider sponsoring or donating to help fund the project. There are currently 4 options for sponsoring: @@ -97,7 +97,7 @@ Optional dependencies: You should also install the gstreamer plugins base and good, and optionally bad, ugly and libav to support all audio formats. -### :wrench: Compiling from source +### :wrench: Compiling from source ### Get the code: @@ -118,6 +118,6 @@ Strawberry is backwards compatible with Qt 5, to compile with Qt 5 use: To compile on Windows with Visual Studio 2019 or 2022, see https://github.com/strawberrymusicplayer/strawberry-msvc -### :penguin: Packaging status +### :penguin: Packaging status [![Packaging status](https://repology.org/badge/vertical-allrepos/strawberry.svg?exclude_unsupported=1)](https://repology.org/metapackage/strawberry/versions) diff --git a/data/icons.qrc b/data/icons.qrc index 59e94625..847f5c96 100644 --- a/data/icons.qrc +++ b/data/icons.qrc @@ -290,8 +290,8 @@ icons/48x48/moodbar.png icons/48x48/love.png icons/48x48/subsonic.png - icons/48x48/tidal.png - icons/48x48/qobuz.png + icons/48x48/tidal.png + icons/48x48/qobuz.png icons/48x48/multimedia-player-ipod-standard-black.png icons/48x48/radio.png icons/48x48/somafm.png diff --git a/src/core/song.cpp b/src/core/song.cpp index f8402d02..b5630e59 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -136,7 +136,7 @@ const QStringList Song::kColumns = QStringList() << "title" << "ebur128_integrated_loudness_lufs" << "ebur128_loudness_range_lu" - ; + ; const QString Song::kColumnSpec = Song::kColumns.join(", "); const QString Song::kBindSpec = Utilities::Prepend(":", Song::kColumns).join(", "); diff --git a/src/globalshortcuts/keymapper_x11.h b/src/globalshortcuts/keymapper_x11.h index f00afc29..0e9fbbac 100644 --- a/src/globalshortcuts/keymapper_x11.h +++ b/src/globalshortcuts/keymapper_x11.h @@ -223,7 +223,7 @@ static const QMap keymapper_x11_ = { // clazy:exclude=non-pod { Qt::Key_MediaPrevious, XF86XK_AudioPrev }, { Qt::Key_MediaNext, XF86XK_AudioNext }, { Qt::Key_MediaRecord, XF86XK_AudioRecord }, - { Qt::Key_MediaPause, XF86XK_AudioPause }, + { Qt::Key_MediaPause, XF86XK_AudioPause }, { Qt::Key_HomePage, XF86XK_HomePage }, { Qt::Key_Favorites, XF86XK_Favorites }, { Qt::Key_Search, XF86XK_Search }, diff --git a/src/playlist/dynamicplaylistcontrols.ui b/src/playlist/dynamicplaylistcontrols.ui index 3ad3e8cb..bd6585c6 100644 --- a/src/playlist/dynamicplaylistcontrols.ui +++ b/src/playlist/dynamicplaylistcontrols.ui @@ -12,17 +12,17 @@ #container { - background: rgba(200, 200, 200, 50%); + background: rgba(200, 200, 200, 50%); border-radius: 10px; border: 1px solid rgba(200, 200, 200, 75%); } #label1 { - font-weight: bold; + font-weight: bold; } #label2 { - font-size: 7.5pt; + font-size: 7.5pt; } diff --git a/src/playlist/playlistsequence.cpp b/src/playlist/playlistsequence.cpp index 207d0689..bcb7bb98 100644 --- a/src/playlist/playlistsequence.cpp +++ b/src/playlist/playlistsequence.cpp @@ -171,7 +171,7 @@ void PlaylistSequence::SetRepeatMode(const RepeatMode mode) { case RepeatMode::Album: ui_->action_repeat_album->setChecked(true); break; case RepeatMode::Playlist: ui_->action_repeat_playlist->setChecked(true); break; case RepeatMode::OneByOne: ui_->action_repeat_onebyone->setChecked(true); break; - case RepeatMode::Intro: ui_->action_repeat_intro->setChecked(true); break; + case RepeatMode::Intro: ui_->action_repeat_intro->setChecked(true); break; } @@ -234,11 +234,11 @@ void PlaylistSequence::CycleRepeatMode() { RepeatMode mode = RepeatMode::Off; //we cycle through the repeat modes switch (repeat_mode()) { - case RepeatMode::Off: mode = RepeatMode::Track; break; - case RepeatMode::Track: mode = RepeatMode::Album; break; - case RepeatMode::Album: mode = RepeatMode::Playlist; break; - case RepeatMode::Playlist: mode = RepeatMode::OneByOne; break; - case RepeatMode::OneByOne: mode = RepeatMode::Intro; break; + case RepeatMode::Off: mode = RepeatMode::Track; break; + case RepeatMode::Track: mode = RepeatMode::Album; break; + case RepeatMode::Album: mode = RepeatMode::Playlist; break; + case RepeatMode::Playlist: mode = RepeatMode::OneByOne; break; + case RepeatMode::OneByOne: mode = RepeatMode::Intro; break; case RepeatMode::Intro: break; } From 667548f3ed831f1c26355c688fe0c9882be871fe Mon Sep 17 00:00:00 2001 From: buckmelanoma <43704682+buckmelanoma@users.noreply.github.com> Date: Sun, 18 Feb 2024 10:10:24 -0800 Subject: [PATCH 44/68] InternetSongsView: Use DescriptionForSource instead of TextForSource DescriptionForSource provides uppercase names in the filter menu instead of the lowercase names provided by TextForSource --- src/internet/internetsongsview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internet/internetsongsview.cpp b/src/internet/internetsongsview.cpp index 648e0488..8eff8896 100644 --- a/src/internet/internetsongsview.cpp +++ b/src/internet/internetsongsview.cpp @@ -56,7 +56,7 @@ InternetSongsView::InternetSongsView(Application *app, InternetServicePtr servic ui_->filter_widget->SetSettingsGroup(settings_group); ui_->filter_widget->Init(service_->songs_collection_model()); - QAction *action_configure = new QAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this); + QAction *action_configure = new QAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this); QObject::connect(action_configure, &QAction::triggered, this, &InternetSongsView::OpenSettingsDialog); ui_->filter_widget->AddMenuAction(action_configure); From 593a04d0479e7af1fb4ca89bc6cd0e0f01330cbe Mon Sep 17 00:00:00 2001 From: buckmelanoma <43704682+buckmelanoma@users.noreply.github.com> Date: Sun, 18 Feb 2024 10:46:56 -0800 Subject: [PATCH 45/68] InternetSearchView: Use DescriptionForSource instead of TextForSource DescriptionForSource provides uppercase names in the filter menu instead of the lowercase names provided by TextForSource --- src/internet/internetsearchview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internet/internetsearchview.cpp b/src/internet/internetsearchview.cpp index 922217a9..4628826e 100644 --- a/src/internet/internetsearchview.cpp +++ b/src/internet/internetsearchview.cpp @@ -176,7 +176,7 @@ void InternetSearchView::Init(Application *app, InternetServicePtr service) { QMenu *settings_menu = new QMenu(this); settings_menu->addActions(group_by_actions_->actions()); settings_menu->addSeparator(); - settings_menu->addAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog); + settings_menu->addAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog); ui_->settings->setMenu(settings_menu); swap_models_timer_->setSingleShot(true); From 306b3f72d81c5bc801b02b83b3a511e00a6dce4d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 19 Feb 2024 23:07:27 +0100 Subject: [PATCH 46/68] SettingsPage: Pass on scroll event to page If the settings widget does not have focus, pass the event to the page for scrolling down instead of changing the setting. Fixes #1380 --- src/settings/settingspage.cpp | 46 +++++++++++++++++++++++++++++++++++ src/settings/settingspage.h | 5 ++++ 2 files changed, 51 insertions(+) diff --git a/src/settings/settingspage.cpp b/src/settings/settingspage.cpp index 4220cc88..4507f6e7 100644 --- a/src/settings/settingspage.cpp +++ b/src/settings/settingspage.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -63,15 +64,26 @@ void SettingsPage::Init(QWidget *ui_widget) { radiobuttons_ << qMakePair(radiobutton, radiobutton->isChecked()); } else if (QComboBox *combobox = qobject_cast(w)) { + combobox->setFocusPolicy(Qt::StrongFocus); + combobox->installEventFilter(this); comboboxes_ << qMakePair(combobox, combobox->currentText()); } else if (QSpinBox *spinbox = qobject_cast(w)) { + spinbox->setFocusPolicy(Qt::StrongFocus); + spinbox->installEventFilter(this); spinboxes_ << qMakePair(spinbox, spinbox->value()); } + else if (QDoubleSpinBox *double_spinbox = qobject_cast(w)) { + double_spinbox->setFocusPolicy(Qt::StrongFocus); + double_spinbox->installEventFilter(this); + double_spinboxes_ << qMakePair(double_spinbox, double_spinbox->value()); + } else if (QLineEdit *lineedit = qobject_cast(w)) { lineedits_ << qMakePair(lineedit, lineedit->text()); } else if (QSlider *slider = qobject_cast(w)) { + slider->setFocusPolicy(Qt::StrongFocus); + slider->installEventFilter(this); sliders_ << qMakePair(slider, slider->value()); } } @@ -114,6 +126,11 @@ void SettingsPage::Apply() { changed_ = true; qLog(Info) << spinbox.first->objectName() << "is changed for" << windowTitle() << "settings."; } + for (QPair &double_spinbox : double_spinboxes_) { + if (double_spinbox.first->value() == double_spinbox.second) continue; + changed_ = true; + qLog(Info) << double_spinbox.first->objectName() << "is changed for" << windowTitle() << "settings."; + } for (QPair &lineedit : lineedits_) { if (lineedit.first->text() == lineedit.second) continue; changed_ = true; @@ -161,3 +178,32 @@ void SettingsPage::ComboBoxLoadFromSettingsByIndex(const QSettings &s, QComboBox } +bool SettingsPage::eventFilter(QObject *obj, QEvent *e) { + + if (e->type() == QEvent::Wheel) { + if (QComboBox *combobox = qobject_cast(obj)) { + if (!combobox->hasFocus()) { + return event(e); + } + } + else if (QSpinBox *spinbox = qobject_cast(obj)) { + if (!spinbox->hasFocus()) { + return event(e); + } + } + else if (QDoubleSpinBox *double_spinbox = qobject_cast(obj)) { + if (!double_spinbox->hasFocus()) { + return event(e); + } + } + else if (QSlider *slider = qobject_cast(obj)) { + if (!slider->hasFocus()) { + return event(e); + } + } + } + + return false; + +} + diff --git a/src/settings/settingspage.h b/src/settings/settingspage.h index aa6aea96..584bca6c 100644 --- a/src/settings/settingspage.h +++ b/src/settings/settingspage.h @@ -39,6 +39,7 @@ class QCheckBox; class QComboBox; class QRadioButton; class QSpinBox; +class QDoubleSpinBox; class QSlider; class QLineEdit; class QShowEvent; @@ -75,6 +76,9 @@ class SettingsPage : public QWidget { virtual void Save() = 0; virtual void Cancel() {} + protected: + bool eventFilter(QObject *obj, QEvent *e) override; + signals: void NotificationPreview(const OSDBase::Behaviour, const QString&, const QString&); @@ -86,6 +90,7 @@ class SettingsPage : public QWidget { QList> radiobuttons_; QList> comboboxes_; QList> spinboxes_; + QList> double_spinboxes_; QList> sliders_; QList> lineedits_; }; From f84ce3f1d173ad41c4c7c5b6a25eb1df17d4089e Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 20 Feb 2024 01:08:00 +0100 Subject: [PATCH 47/68] Add exclusive mode option for WASAPI --- src/engine/enginebase.cpp | 3 ++ src/engine/enginebase.h | 2 ++ src/engine/gstengine.cpp | 6 ++++ src/engine/gstengine.h | 2 ++ src/engine/gstenginepipeline.cpp | 12 ++++++++ src/engine/gstenginepipeline.h | 2 ++ src/engine/vlcengine.cpp | 5 ++++ src/engine/vlcengine.h | 1 + src/settings/backendsettingspage.cpp | 18 ++++++++++++ src/settings/backendsettingspage.ui | 43 +++++++++++++++++++++++++++- 10 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/engine/enginebase.cpp b/src/engine/enginebase.cpp index d40b8fed..fdd93017 100644 --- a/src/engine/enginebase.cpp +++ b/src/engine/enginebase.cpp @@ -39,6 +39,7 @@ EngineBase::EngineBase(QObject *parent) : QObject(parent), + exclusive_mode_(false), volume_control_(true), volume_(100), beginning_nanosec_(0), @@ -167,6 +168,8 @@ void EngineBase::ReloadSettings() { output_ = s.value("output").toString(); device_ = s.value("device"); + exclusive_mode_ = s.value("exclusive_mode", false).toBool(); + volume_control_ = s.value("volume_control", true).toBool(); channels_enabled_ = s.value("channels_enabled", false).toBool(); diff --git a/src/engine/enginebase.h b/src/engine/enginebase.h index 00afc663..bf7a5de5 100644 --- a/src/engine/enginebase.h +++ b/src/engine/enginebase.h @@ -129,6 +129,7 @@ class EngineBase : public QObject { virtual QString DefaultOutput() = 0; virtual bool CustomDeviceSupport(const QString &output) = 0; virtual bool ALSADeviceSupport(const QString &output) = 0; + virtual bool ExclusiveModeSupport(const QString &output) = 0; // Plays a media stream represented with the URL 'u' from the given 'beginning' to the given 'end' (usually from 0 to a song's length). // Both markers should be passed in nanoseconds. 'end' can be negative, indicating that the real length of 'u' stream is unknown. @@ -188,6 +189,7 @@ class EngineBase : public QObject { void VolumeChanged(const uint volume); protected: + bool exclusive_mode_; bool volume_control_; uint volume_; quint64 beginning_nanosec_; diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 95cf34cf..980187cd 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -73,6 +73,7 @@ const char *GstEngine::kAVDTPSink = "avdtpsink"; const char *GstEngine::InterAudiosink = "interaudiosink"; const char *GstEngine::kDirectSoundSink = "directsoundsink"; const char *GstEngine::kOSXAudioSink = "osxaudiosink"; +const char *GstEngine::kWASAPISink = "wasapisink"; const int GstEngine::kDiscoveryTimeoutS = 10; const qint64 GstEngine::kTimerIntervalNanosec = 1000 * kNsecPerMsec; // 1s const qint64 GstEngine::kPreloadGapNanosec = 8000 * kNsecPerMsec; // 8s @@ -459,6 +460,10 @@ bool GstEngine::ALSADeviceSupport(const QString &output) { return (output == kALSASink); } +bool GstEngine::ExclusiveModeSupport(const QString &output) { + return output == kWASAPISink; +} + void GstEngine::ReloadSettings() { EngineBase::ReloadSettings(); @@ -794,6 +799,7 @@ SharedPtr GstEngine::CreatePipeline() { SharedPtr ret = make_shared(); ret->set_output_device(output_, device_); + ret->set_exclusive_mode(exclusive_mode_); ret->set_volume_enabled(volume_control_); ret->set_stereo_balancer_enabled(stereo_balancer_enabled_); ret->set_equalizer_enabled(equalizer_enabled_); diff --git a/src/engine/gstengine.h b/src/engine/gstengine.h index 8ceecaa9..be7828f7 100644 --- a/src/engine/gstengine.h +++ b/src/engine/gstengine.h @@ -81,6 +81,7 @@ class GstEngine : public EngineBase, public GstBufferConsumer { QString DefaultOutput() override { return kAutoSink; } bool CustomDeviceSupport(const QString &output) override; bool ALSADeviceSupport(const QString &output) override; + bool ExclusiveModeSupport(const QString &output) override; void SetStartup(GstStartup *gst_startup) { gst_startup_ = gst_startup; } void EnsureInitialized() { gst_startup_->EnsureInitialized(); } @@ -152,6 +153,7 @@ class GstEngine : public EngineBase, public GstBufferConsumer { static const char *InterAudiosink; static const char *kDirectSoundSink; static const char *kOSXAudioSink; + static const char *kWASAPISink; static const int kDiscoveryTimeoutS; static const qint64 kTimerIntervalNanosec; static const qint64 kPreloadGapNanosec; diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index 8194947c..dd2f89e6 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -74,6 +74,7 @@ GstEnginePipeline::GstEnginePipeline(QObject *parent) : QObject(parent), id_(sId++), valid_(false), + exclusive_mode_(false), volume_enabled_(true), stereo_balancer_enabled_(false), eq_enabled_(false), @@ -221,6 +222,10 @@ void GstEnginePipeline::set_output_device(const QString &output, const QVariant } +void GstEnginePipeline::set_exclusive_mode(const bool exclusive_mode) { + exclusive_mode_ = exclusive_mode; +} + void GstEnginePipeline::set_volume_enabled(const bool enabled) { volume_enabled_ = enabled; } @@ -520,6 +525,13 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { } + if (g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "exclusive")) { + if (exclusive_mode_) { + qLog(Debug) << "Setting exclusive mode for" << output_; + } + g_object_set(G_OBJECT(audiosink_), "exclusive", exclusive_mode_, nullptr); + } + #ifndef Q_OS_WIN32 if (g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "volume")) { qLog(Debug) << output_ << "has volume, enabling volume synchronization."; diff --git a/src/engine/gstenginepipeline.h b/src/engine/gstenginepipeline.h index 7119855c..8db5deac 100644 --- a/src/engine/gstenginepipeline.h +++ b/src/engine/gstenginepipeline.h @@ -62,6 +62,7 @@ class GstEnginePipeline : public QObject { // Call these setters before Init void set_output_device(const QString &output, const QVariant &device); + void set_exclusive_mode(const bool exclusive_mode); void set_volume_enabled(const bool enabled); void set_stereo_balancer_enabled(const bool enabled); void set_equalizer_enabled(const bool enabled); @@ -202,6 +203,7 @@ class GstEnginePipeline : public QObject { bool valid_; QString output_; QVariant device_; + bool exclusive_mode_; bool volume_enabled_; bool stereo_balancer_enabled_; bool eq_enabled_; diff --git a/src/engine/vlcengine.cpp b/src/engine/vlcengine.cpp index 5741733a..a1bc449e 100644 --- a/src/engine/vlcengine.cpp +++ b/src/engine/vlcengine.cpp @@ -264,6 +264,11 @@ bool VLCEngine::ALSADeviceSupport(const QString &output) { return (output == "alsa"); } +bool VLCEngine::ExclusiveModeSupport(const QString &output) { + Q_UNUSED(output); + return false; +} + uint VLCEngine::position() const { if (!Initialized() || !libvlc_media_player_is_playing(player_)) return 0; diff --git a/src/engine/vlcengine.h b/src/engine/vlcengine.h index c62ba831..c7982ba7 100644 --- a/src/engine/vlcengine.h +++ b/src/engine/vlcengine.h @@ -70,6 +70,7 @@ class VLCEngine : public EngineBase { QString DefaultOutput() override { return ""; } bool CustomDeviceSupport(const QString &output) override; bool ALSADeviceSupport(const QString &output) override; + bool ExclusiveModeSupport(const QString &output) override; private: libvlc_instance_t *instance_; diff --git a/src/settings/backendsettingspage.cpp b/src/settings/backendsettingspage.cpp index b59a8105..29103bb9 100644 --- a/src/settings/backendsettingspage.cpp +++ b/src/settings/backendsettingspage.cpp @@ -96,6 +96,12 @@ BackendSettingsPage::BackendSettingsPage(SettingsDialog *dialog, QWidget *parent QObject::connect(ui_->checkbox_channels, &QCheckBox::toggled, ui_->widget_channels, &QSpinBox::setEnabled); QObject::connect(ui_->button_buffer_defaults, &QPushButton::clicked, this, &BackendSettingsPage::BufferDefaults); +#ifdef Q_OS_WIN32 + ui_->widget_exclusive_mode->show(); +#else + ui_->widget_exclusive_mode->hide(); +#endif + } BackendSettingsPage::~BackendSettingsPage() { @@ -149,6 +155,10 @@ void BackendSettingsPage::Load() { ui_->widget_alsa_plugin->hide(); #endif +#ifdef Q_OS_WIN32 + ui_->checkbox_exclusive_mode->setChecked(s.value("exclusive_mode", false).toBool()); +#endif + if (EngineInitialized()) Load_Engine(enginetype); ui_->checkbox_volume_control->setChecked(s.value("volume_control", true).toBool()); @@ -333,6 +343,10 @@ void BackendSettingsPage::Load_Output(QString output, QVariant device) { if (ui_->combobox_output->count() >= 1) Load_Device(output, device); +#ifdef Q_OS_WIN32 + ui_->widget_exclusive_mode->setEnabled(engine()->ExclusiveModeSupport(output)); +#endif + FadingOptionsChanged(); } @@ -481,6 +495,10 @@ void BackendSettingsPage::Save() { else s.remove("alsaplugin"); #endif +#ifdef Q_OS_WIN32 + s.setValue("exclusive_mode", ui_->checkbox_exclusive_mode->isChecked()); +#endif + s.setValue("volume_control", ui_->checkbox_volume_control->isChecked()); s.setValue("channels_enabled", ui_->checkbox_channels->isChecked()); diff --git a/src/settings/backendsettingspage.ui b/src/settings/backendsettingspage.ui index a9399bfa..041435b4 100644 --- a/src/settings/backendsettingspage.ui +++ b/src/settings/backendsettingspage.ui @@ -7,7 +7,7 @@ 0 0 717 - 1245 + 1259 @@ -153,6 +153,47 @@ + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Exclusive mode (Experimental) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + From 12288a2622caf8af30a3feb04150c14ce87063d8 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 20 Feb 2024 01:22:40 +0100 Subject: [PATCH 48/68] BackendSettingsPage: Fix enabling/disabling exclusive mode --- src/settings/backendsettingspage.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/settings/backendsettingspage.cpp b/src/settings/backendsettingspage.cpp index 29103bb9..ecafea01 100644 --- a/src/settings/backendsettingspage.cpp +++ b/src/settings/backendsettingspage.cpp @@ -341,12 +341,12 @@ void BackendSettingsPage::Load_Output(QString output, QVariant device) { ui_->groupbox_ebur128->setEnabled(false); } - if (ui_->combobox_output->count() >= 1) Load_Device(output, device); - #ifdef Q_OS_WIN32 ui_->widget_exclusive_mode->setEnabled(engine()->ExclusiveModeSupport(output)); #endif + if (ui_->combobox_output->count() >= 1) Load_Device(output, device); + FadingOptionsChanged(); } @@ -568,6 +568,11 @@ void BackendSettingsPage::OutputChanged(const int index) { if (!configloaded_ || !EngineInitialized()) return; EngineBase::OutputDetails output = ui_->combobox_output->itemData(index).value(); + +#ifdef Q_OS_WIN32 + ui_->widget_exclusive_mode->setEnabled(engine()->ExclusiveModeSupport(output.name)); +#endif + Load_Device(output.name, QVariant()); } From fb00d68aa7ce98c4abae4b36eb630e0055ef5f4e Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 20 Feb 2024 22:47:47 +0100 Subject: [PATCH 49/68] Update Changelog --- Changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Changelog b/Changelog index 7a587210..ffbf9ae8 100644 --- a/Changelog +++ b/Changelog @@ -6,11 +6,18 @@ Unreleased: Bugfixes: * Fixed crash when pressing CTRL + C (#1359). + * Pass on scroll events to page in settings to avoid changing settings when scrolling with mouse (#1380). * (macOS/Windows) Fixed dash and hls streaming, plugins were missing. Enhancements: * Improve error messages when connecting and copying to devices. * Allow enter to be used with multiselection to add songs to playlist (#1360) + * Add song progress to taskbar using D-Bus. + * Use API to receive Radio Paradise channels. + * (Unix) Add experimental GStreamer pipewire support. + * (Windows) Add experimental exclusive mode for WASAPI. + * (Windows MSVC) Add ASIO support. + * (Windows MSVC) Add back WASAPI2. Version 1.0.23 (2024.01.11): From 82894b94f475d59a92324530fd7e8d4ab19574f9 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 23 Feb 2024 21:59:06 +0100 Subject: [PATCH 50/68] CI: Set vsversion to 2022 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d71dd708..125aa795 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1226,7 +1226,7 @@ jobs: with: arch: ${{matrix.arch}} sdk: 10.0.20348.0 - vsversion: 17 + vsversion: 2022 toolset: 14.3 - name: Checkout From 9baec288c3fee6ad1d9412a544d9ff70ff7db85f Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 23 Feb 2024 22:57:00 +0100 Subject: [PATCH 51/68] CI: Set FFTW3_DIR --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 125aa795..a987f8d7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,6 +1268,7 @@ jobs: -DUSE_TAGLIB=ON -DPKG_CONFIG_EXECUTABLE="${{env.prefix_path_forwardslash}}/bin/pkg-config.exe" -DICU_ROOT="${{env.prefix_path_forwardslash}}" + -DFFTW3_DIR="${{env.prefix_path_forwardslash}}" - name: Run Make shell: cmd From ce7c3e80390cfdb381c3e961770577307a7a7a8d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 24 Feb 2024 01:18:02 +0100 Subject: [PATCH 52/68] CI: Use gh instead of hub --- .github/workflows/build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a987f8d7..34dbba7c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1479,7 +1479,7 @@ jobs: - name: Install packages env: DEBIAN_FRONTEND: noninteractive - run: sudo apt install -y git hub + run: sudo apt install -y git jq gh - name: Checkout uses: actions/checkout@v4 with: @@ -1487,7 +1487,7 @@ jobs: - name: Show release assets env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - run: hub release show -f "%as" ${{github.event.release.tag_name}} + run: gh release view "${{github.event.release.tag_name}}" --json assets | jq -r '.assets[].name' - name: Download artifacts uses: actions/download-artifact@v4 with: @@ -1498,7 +1498,7 @@ jobs: run: | echo "Release version: ${{github.event.release.tag_name}}" filenames=() - a_files=() + files=() for i in $(find artifacts -type f); do filename=$(basename $i) if [[ ${filenames[@]} =~ ${filename} ]]; then @@ -1506,16 +1506,16 @@ jobs: continue fi filenames+=("${filename}") - existing_asset=$(hub release show -f "%as" ${{github.event.release.tag_name}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) + existing_asset=$(gh release view "${{github.event.release.tag_name}}" --json assets | jq -r '.assets[].name' | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) if [ "${existing_asset}" = "" ]; then echo "Adding file: ${filename}" - a_files+=("-a" "${i}") + files+=("${i}") else echo "Release already has file: ${filename}" fi done - a_files_list="${a_files[@]}" - if ! [ "${a_files_list}" = "" ]; then + files_list="${files[@]}" + if ! [ "${files_list}" = "" ]; then echo "Adding files to GitHub release" - hub release edit -m "Strawberry ${{github.event.release.tag_name}}" ${a_files_list} "${{github.event.release.tag_name}}" + gh release upload "${{github.event.release.tag_name}}" ${files_list} fi From 9b1035a5f25b7684c84d6d8e7a5d5305b1082b3c Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 24 Feb 2024 19:45:58 +0100 Subject: [PATCH 53/68] Translations: Fix generating pot with NMake Using GETTEXT_XGETTEXT_EXECUTABLE causes issues with NMake, possibly because of spaces in path. --- cmake/Translations.cmake | 48 +++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/cmake/Translations.cmake b/cmake/Translations.cmake index 581f965d..5bb7048d 100644 --- a/cmake/Translations.cmake +++ b/cmake/Translations.cmake @@ -1,21 +1,33 @@ -find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext) -if(NOT GETTEXT_XGETTEXT_EXECUTABLE) - message(FATAL_ERROR "Could not find xgettext executable") -endif(NOT GETTEXT_XGETTEXT_EXECUTABLE) +find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext REQUIRED) +find_program(CAT_EXECUTABLE cat REQUIRED) -set (XGETTEXT_OPTIONS - --qt - --keyword=tr:1,2c - --keyword=tr --flag=tr:1:pass-c-format --flag=tr:1:pass-qt-format - --keyword=trUtf8 --flag=tr:1:pass-c-format --flag=tr:1:pass-qt-format - --keyword=translate:2,3c - --keyword=translate:2 --flag=translate:2:pass-c-format --flag=translate:2:pass-qt-format - --keyword=QT_TR_NOOP --flag=QT_TR_NOOP:1:pass-c-format --flag=QT_TR_NOOP:1:pass-qt-format - --keyword=QT_TRANSLATE_NOOP:2 --flag=QT_TRANSLATE_NOOP:2:pass-c-format --flag=QT_TRANSLATE_NOOP:2:pass-qt-format - --keyword=_ --flag=_:1:pass-c-format --flag=_:1:pass-qt-format - --keyword=N_ --flag=N_:1:pass-c-format --flag=N_:1:pass-qt-format - --from-code=utf-8 - ) +list(APPEND XGETTEXT_OPTIONS + --qt + --keyword=tr:1,2c + --keyword=tr + --flag=tr:1:pass-c-format + --flag=tr:1:pass-qt-format + --keyword=trUtf8 + --flag=tr:1:pass-c-format + --flag=tr:1:pass-qt-format + --keyword=translate:2,3c + --keyword=translate:2 + --flag=translate:2:pass-c-format + --flag=translate:2:pass-qt-format + --keyword=QT_TR_NOOP + --flag=QT_TR_NOOP:1:pass-c-format + --flag=QT_TR_NOOP:1:pass-qt-format + --keyword=QT_TRANSLATE_NOOP:2 + --flag=QT_TRANSLATE_NOOP:2:pass-c-format + --flag=QT_TRANSLATE_NOOP:2:pass-qt-format + --keyword=_ + --flag=_:1:pass-c-format + --flag=_:1:pass-qt-format + --keyword=N_ + --flag=N_:1:pass-c-format + --flag=N_:1:pass-qt-format + --from-code=utf-8 +) execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/translations) @@ -32,7 +44,7 @@ macro(add_pot outfiles header pot) add_custom_command( OUTPUT ${pot} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} ${XGETTEXT_OPTIONS} -s -C --omit-header --output=${CMAKE_CURRENT_BINARY_DIR}/pot.temp ${add_pot_sources} + COMMAND xgettext ${XGETTEXT_OPTIONS} -s -C --omit-header --output="${CMAKE_CURRENT_BINARY_DIR}/pot.temp" ${add_pot_sources} COMMAND cat ${header} ${CMAKE_CURRENT_BINARY_DIR}/pot.temp > ${pot} DEPENDS ${add_pot_sources} ${header} ) From 6d52a2b4095b1ee13fe9806c2f7a9b223c4ef489 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 25 Feb 2024 02:46:51 +0100 Subject: [PATCH 54/68] QSearchField: Replace QToolButton with QPushButton --- src/widgets/qsearchfield_qt.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/widgets/qsearchfield_qt.cpp b/src/widgets/qsearchfield_qt.cpp index fc0ae43b..d7f13902 100644 --- a/src/widgets/qsearchfield_qt.cpp +++ b/src/widgets/qsearchfield_qt.cpp @@ -31,7 +31,7 @@ THE SOFTWARE. #include #include #include -#include +#include #include #include #include @@ -43,7 +43,7 @@ THE SOFTWARE. class QSearchFieldPrivate : public QObject { // clazy:exclude=missing-qobject-macro public: - QSearchFieldPrivate(QSearchField *searchField, QLineEdit *lineedit, QToolButton *clearbutton) + QSearchFieldPrivate(QSearchField *searchField, QLineEdit *lineedit, QPushButton *clearbutton) : QObject(searchField), lineedit_(lineedit), clearbutton_(clearbutton) {} int lineEditFrameWidth() const { @@ -59,7 +59,7 @@ class QSearchFieldPrivate : public QObject { // clazy:exclude=missing-qobject-m } QPointer lineedit_; - QPointer clearbutton_; + QPointer clearbutton_; }; @@ -71,7 +71,7 @@ QSearchField::QSearchField(QWidget *parent) : QWidget(parent) { QObject::connect(lineEdit, &QLineEdit::returnPressed, this, &QSearchField::returnPressed); QObject::connect(lineEdit, &QLineEdit::textChanged, this, &QSearchField::setText); - QToolButton *clearbutton = new QToolButton(this); + QPushButton *clearbutton = new QPushButton(this); QIcon clearIcon(IconLoader::Load("edit-clear-locationbar-ltr")); clearbutton->setIcon(clearIcon); @@ -79,7 +79,7 @@ QSearchField::QSearchField(QWidget *parent) : QWidget(parent) { clearbutton->setStyleSheet("border: none; padding: 2px;"); clearbutton->resize(clearbutton->sizeHint()); - QObject::connect(clearbutton, &QToolButton::clicked, this, &QSearchField::clear); + QObject::connect(clearbutton, &QPushButton::clicked, this, &QSearchField::clear); pimpl = new QSearchFieldPrivate(this, lineEdit, clearbutton); From 72bccad82d0605b7de2c553657fc90cfd7aa12af Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 25 Feb 2024 02:50:40 +0100 Subject: [PATCH 55/68] Add accessible name for QToolButton css Make sure it does not apply to other buttons. Fixes #1255 --- data/style/strawberry.css | 12 ++++++------ src/collection/collectionfilterwidget.ui | 3 +++ src/core/mainwindow.ui | 15 +++++++++++++++ src/covermanager/albumcovermanager.ui | 3 +++ src/dialogs/edittagdialog.ui | 3 +++ src/internet/internetsearchview.ui | 3 +++ src/settings/contextsettingspage.ui | 6 ++++++ src/settings/notificationssettingspage.ui | 6 ++++++ 8 files changed, 45 insertions(+), 6 deletions(-) diff --git a/data/style/strawberry.css b/data/style/strawberry.css index 199b5480..5574cea8 100644 --- a/data/style/strawberry.css +++ b/data/style/strawberry.css @@ -35,32 +35,32 @@ background-color: %palette-base; } -QToolButton { +QToolButton[accessibleName="MenuPopupToolButton"] { border: 2px solid transparent; border-radius: 3px; padding: 1px; } -QToolButton:hover { +QToolButton:hover[accessibleName="MenuPopupToolButton"] { border: 2px solid %palette-highlight; background-color: %palette-highlight-lighter; } -QToolButton:pressed { +QToolButton:pressed[accessibleName="MenuPopupToolButton"] { border: 2px solid %palette-highlight-darker; background-color: %palette-highlight-lighter; } -QToolButton[popupMode="MenuButtonPopup"], QToolButton:hover[popupMode="MenuButtonPopup"], QToolButton:pressed[popupMode="MenuButtonPopup"] { +QToolButton[popupMode="MenuButtonPopup"][accessibleName="MenuPopupToolButton"], QToolButton:hover[popupMode="MenuButtonPopup"][accessibleName="MenuPopupToolButton"], QToolButton:pressed[popupMode="MenuButtonPopup"][accessibleName="MenuPopupToolButton"] { padding-right: 16px; } /* For backwards compatibility with Qt 5 as it does not support property name */ -QToolButton[popupMode="1"], QToolButton:hover[popupMode="1"], QToolButton:pressed[popupMode="1"] { +QToolButton[popupMode="1"][accessibleName="MenuPopupToolButton"], QToolButton:hover[popupMode="1"][accessibleName="MenuPopupToolButton"], QToolButton:pressed[popupMode="1"][accessibleName="MenuPopupToolButton"] { padding-right: 16px; } -QToolButton::menu-button { +QToolButton::menu-button[accessibleName="MenuPopupToolButton"] { width: 16px; border: none; } diff --git a/src/collection/collectionfilterwidget.ui b/src/collection/collectionfilterwidget.ui index 2228aceb..c9c437fd 100644 --- a/src/collection/collectionfilterwidget.ui +++ b/src/collection/collectionfilterwidget.ui @@ -38,6 +38,9 @@ + + MenuPopupToolButton + 16 diff --git a/src/core/mainwindow.ui b/src/core/mainwindow.ui index a82c33dc..826fdbe2 100644 --- a/src/core/mainwindow.ui +++ b/src/core/mainwindow.ui @@ -122,6 +122,9 @@ + + MenuPopupToolButton + 32 @@ -135,6 +138,9 @@ + + MenuPopupToolButton + 32 @@ -151,6 +157,9 @@ false + + MenuPopupToolButton + 32 @@ -167,6 +176,9 @@ + + MenuPopupToolButton + 32 @@ -205,6 +217,9 @@ + + MenuPopupToolButton + 32 diff --git a/src/covermanager/albumcovermanager.ui b/src/covermanager/albumcovermanager.ui index 9d1ae53b..7f22d4de 100644 --- a/src/covermanager/albumcovermanager.ui +++ b/src/covermanager/albumcovermanager.ui @@ -87,6 +87,9 @@ + + MenuPopupToolButton + View diff --git a/src/dialogs/edittagdialog.ui b/src/dialogs/edittagdialog.ui index 21a55440..eaf5283c 100644 --- a/src/dialogs/edittagdialog.ui +++ b/src/dialogs/edittagdialog.ui @@ -635,6 +635,9 @@ + + MenuPopupToolButton + Change art diff --git a/src/internet/internetsearchview.ui b/src/internet/internetsearchview.ui index 4c060bc0..38269fce 100644 --- a/src/internet/internetsearchview.ui +++ b/src/internet/internetsearchview.ui @@ -54,6 +54,9 @@ 0 + + MenuPopupToolButton + 16 diff --git a/src/settings/contextsettingspage.ui b/src/settings/contextsettingspage.ui index a7cb590b..85ba6fb9 100644 --- a/src/settings/contextsettingspage.ui +++ b/src/settings/contextsettingspage.ui @@ -74,6 +74,9 @@ + + MenuPopupToolButton + @@ -102,6 +105,9 @@ + + MenuPopupToolButton + diff --git a/src/settings/notificationssettingspage.ui b/src/settings/notificationssettingspage.ui index b649585c..6d9b0f9c 100644 --- a/src/settings/notificationssettingspage.ui +++ b/src/settings/notificationssettingspage.ui @@ -236,6 +236,9 @@ false + + MenuPopupToolButton + @@ -267,6 +270,9 @@ false + + MenuPopupToolButton + From 352a6c5691800ba6fcab678ab0957d9ad7495087 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 25 Feb 2024 04:23:04 +0100 Subject: [PATCH 56/68] Remove lyricsmode.com provider They have a "Verifying you are human" thing now. --- README.md | 2 +- debian/control.in | 2 +- ...rawberrymusicplayer.strawberry.appdata.xml | 2 +- dist/unix/strawberry.spec.in | 2 +- src/CMakeLists.txt | 2 - src/core/application.cpp | 2 - src/lyrics/lyricsmodecomlyricsprovider.cpp | 56 ------------------- src/lyrics/lyricsmodecomlyricsprovider.h | 54 ------------------ 8 files changed, 4 insertions(+), 118 deletions(-) delete mode 100644 src/lyrics/lyricsmodecomlyricsprovider.cpp delete mode 100644 src/lyrics/lyricsmodecomlyricsprovider.h diff --git a/README.md b/README.md index eab2d734..f785a92d 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Funding developers is a way to contribute to open source projects you appreciate * Edit tags on audio files * Fetch tags from MusicBrainz * Album cover art from [Last.fm](https://www.last.fm/), [Musicbrainz](https://musicbrainz.org/), [Discogs](https://www.discogs.com/), [Musixmatch](https://www.musixmatch.com/), [Deezer](https://www.deezer.com/), [Tidal](https://www.tidal.com/), [Qobuz](https://www.qobuz.com/) and [Spotify](https://www.spotify.com/) - * Song lyrics from [Genius](https://genius.com/), [Musixmatch](https://www.musixmatch.com/), [ChartLyrics](http://www.chartlyrics.com/), [lyrics.ovh](https://lyrics.ovh/), [lololyrics.com](https://www.lololyrics.com/), [songlyrics.com](https://www.songlyrics.com/), [azlyrics.com](https://www.azlyrics.com/), [elyrics.net](https://www.elyrics.net/) and [lyricsmode.com](https://www.lyricsmode.com/) + * Song lyrics from [Genius](https://genius.com/), [Musixmatch](https://www.musixmatch.com/), [ChartLyrics](http://www.chartlyrics.com/), [lyrics.ovh](https://lyrics.ovh/), [lololyrics.com](https://www.lololyrics.com/), [songlyrics.com](https://www.songlyrics.com/), [azlyrics.com](https://www.azlyrics.com/) and [elyrics.net](https://www.elyrics.net/) * Support for multiple backends * Audio analyzer * Audio equalizer diff --git a/debian/control.in b/debian/control.in index f792ddd5..c8d838f3 100644 --- a/debian/control.in +++ b/debian/control.in @@ -53,7 +53,7 @@ Description: music player and music collection organizer - Edit tags on audio files - Automatically retrieve tags from MusicBrainz - Album cover art from Last.fm, Musicbrainz, Discogs, Musixmatch, Deezer, Tidal, Qobuz and Spotify - - Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com, elyrics.net and lyricsmode.com + - Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com and elyrics.net - Audio analyzer - Audio equalizer - Transfer music to mass-storage USB players, MTP compatible devices and iPod Nano/Classic diff --git a/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml b/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml index 10407180..fc5b6648 100644 --- a/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml +++ b/dist/unix/org.strawberrymusicplayer.strawberry.appdata.xml @@ -29,7 +29,7 @@
  • Edit tags on audio files
  • Automatically retrieve tags from MusicBrainz
  • Album cover art from Last.fm, Musicbrainz, Discogs, Musixmatch, Deezer, Tidal, Qobuz and Spotify
  • -
  • Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com, elyrics.net and lyricsmode.com
  • +
  • Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com and elyrics.net
  • Support for multiple backends
  • Audio analyzer and equalizer
  • Transfer music to mass-storage USB players, MTP compatible devices and iPod Nano/Classic
  • diff --git a/dist/unix/strawberry.spec.in b/dist/unix/strawberry.spec.in index 427bc40a..9394134b 100644 --- a/dist/unix/strawberry.spec.in +++ b/dist/unix/strawberry.spec.in @@ -99,7 +99,7 @@ Features: - Edit tags on audio files - Automatically retrieve tags from MusicBrainz - Album cover art from Last.fm, Musicbrainz, Discogs, Musixmatch, Deezer, Tidal, Qobuz and Spotify - - Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com, elyrics.net and lyricsmode.com + - Song lyrics from Genius, Musixmatch, ChartLyrics, lyrics.ovh, lololyrics.com, songlyrics.com, azlyrics.com and elyrics.net - Support for multiple backends - Audio analyzer - Audio equalizer diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c8f06b3c..498b2c4e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -188,7 +188,6 @@ set(SOURCES lyrics/songlyricscomlyricsprovider.cpp lyrics/azlyricscomlyricsprovider.cpp lyrics/elyricsnetlyricsprovider.cpp - lyrics/lyricsmodecomlyricsprovider.cpp providers/musixmatchprovider.cpp @@ -431,7 +430,6 @@ set(HEADERS lyrics/songlyricscomlyricsprovider.h lyrics/azlyricscomlyricsprovider.h lyrics/elyricsnetlyricsprovider.h - lyrics/lyricsmodecomlyricsprovider.h settings/settingsdialog.h settings/settingspage.h diff --git a/src/core/application.cpp b/src/core/application.cpp index 84c39b5a..eb31e4c9 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -67,7 +67,6 @@ #include "lyrics/songlyricscomlyricsprovider.h" #include "lyrics/azlyricscomlyricsprovider.h" #include "lyrics/elyricsnetlyricsprovider.h" -#include "lyrics/lyricsmodecomlyricsprovider.h" #include "scrobbler/audioscrobbler.h" #include "scrobbler/lastfmscrobbler.h" @@ -169,7 +168,6 @@ class ApplicationImpl { lyrics_providers->AddProvider(new SongLyricsComLyricsProvider(app->network())); lyrics_providers->AddProvider(new AzLyricsComLyricsProvider(app->network())); lyrics_providers->AddProvider(new ElyricsNetLyricsProvider(app->network())); - lyrics_providers->AddProvider(new LyricsModeComLyricsProvider(app->network())); lyrics_providers->ReloadSettings(); return lyrics_providers; }), diff --git a/src/lyrics/lyricsmodecomlyricsprovider.cpp b/src/lyrics/lyricsmodecomlyricsprovider.cpp deleted file mode 100644 index b14ab43b..00000000 --- a/src/lyrics/lyricsmodecomlyricsprovider.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Strawberry Music Player - * Copyright 2023, Jonas Kvinge - * - * Strawberry is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Strawberry is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Strawberry. If not, see . - * - */ - -#include -#include -#include -#include -#include -#include - -#include "core/shared_ptr.h" -#include "core/networkaccessmanager.h" -#include "lyricssearchrequest.h" -#include "lyricsmodecomlyricsprovider.h" - -const char LyricsModeComLyricsProvider::kUrl[] = "https://www.lyricsmode.com/lyrics/"; -const char LyricsModeComLyricsProvider::kStartTag[] = "]*>"; -const char LyricsModeComLyricsProvider::kEndTag[] = "<\\/div>"; -const char LyricsModeComLyricsProvider::kLyricsStart[] = "
    ]*>"; - -LyricsModeComLyricsProvider::LyricsModeComLyricsProvider(SharedPtr network, QObject *parent) - : HtmlLyricsProvider("lyricsmode.com", true, kStartTag, kEndTag, kLyricsStart, false, network, parent) {} - -QUrl LyricsModeComLyricsProvider::Url(const LyricsSearchRequest &request) { - - return QUrl(kUrl + request.artist[0].toLower() + "/" + StringFixup(request.artist) + "/" + StringFixup(request.title) + ".html"); - -} - -QString LyricsModeComLyricsProvider::StringFixup(QString text) { - - return text - .remove(QRegularExpression("[^\\w0-9_\\- ]")) - .replace(QRegularExpression(" {2,}"), " ") - .simplified() - .replace(' ', '_') - .replace('-', '_') - .toLower(); - -} diff --git a/src/lyrics/lyricsmodecomlyricsprovider.h b/src/lyrics/lyricsmodecomlyricsprovider.h deleted file mode 100644 index 4f5572c0..00000000 --- a/src/lyrics/lyricsmodecomlyricsprovider.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Strawberry Music Player - * Copyright 2023, Jonas Kvinge - * - * Strawberry is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Strawberry is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Strawberry. If not, see . - * - */ - -#ifndef LYRICSMODECOMLYRICSPROVIDER_H -#define LYRICSMODECOMLYRICSPROVIDER_H - -#include -#include -#include -#include -#include -#include - -#include "core/shared_ptr.h" -#include "core/networkaccessmanager.h" -#include "htmllyricsprovider.h" -#include "lyricssearchrequest.h" - -class LyricsModeComLyricsProvider : public HtmlLyricsProvider { - Q_OBJECT - - public: - explicit LyricsModeComLyricsProvider(SharedPtr network, QObject *parent = nullptr); - - protected: - QUrl Url(const LyricsSearchRequest &request) override; - - private: - QString StringFixup(QString text); - - private: - static const char kUrl[]; - static const char kStartTag[]; - static const char kEndTag[]; - static const char kLyricsStart[]; -}; - -#endif // LYRICSMODECOMLYRICSPROVIDER_H From 04ba202e122e590843be39882ff4591f67e29dae Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 25 Feb 2024 04:32:09 +0100 Subject: [PATCH 57/68] HtmlLyricsProvider: Use browser-like user-agent --- src/lyrics/htmllyricsprovider.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lyrics/htmllyricsprovider.cpp b/src/lyrics/htmllyricsprovider.cpp index fb9f3bfa..5695eb86 100644 --- a/src/lyrics/htmllyricsprovider.cpp +++ b/src/lyrics/htmllyricsprovider.cpp @@ -56,6 +56,7 @@ bool HtmlLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &re QUrl url(Url(request)); QNetworkRequest req(url); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); + req.setRawHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0"); QNetworkReply *reply = network_->get(req); replies_ << reply; QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, request]() { HandleLyricsReply(reply, id, request); }); From 9c6649f0774e7c717c1a38eaaff77efdfc6fe70d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 28 Feb 2024 21:33:30 +0100 Subject: [PATCH 58/68] Add letras lyrics provider --- src/CMakeLists.txt | 2 + src/core/application.cpp | 2 + src/lyrics/htmllyricsprovider.cpp | 1 + src/lyrics/letraslyricsprovider.cpp | 58 +++++++++++++++++++++++++++++ src/lyrics/letraslyricsprovider.h | 54 +++++++++++++++++++++++++++ 5 files changed, 117 insertions(+) create mode 100644 src/lyrics/letraslyricsprovider.cpp create mode 100644 src/lyrics/letraslyricsprovider.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 498b2c4e..629f1fd7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -188,6 +188,7 @@ set(SOURCES lyrics/songlyricscomlyricsprovider.cpp lyrics/azlyricscomlyricsprovider.cpp lyrics/elyricsnetlyricsprovider.cpp + lyrics/letraslyricsprovider.cpp providers/musixmatchprovider.cpp @@ -430,6 +431,7 @@ set(HEADERS lyrics/songlyricscomlyricsprovider.h lyrics/azlyricscomlyricsprovider.h lyrics/elyricsnetlyricsprovider.h + lyrics/letraslyricsprovider.h settings/settingsdialog.h settings/settingspage.h diff --git a/src/core/application.cpp b/src/core/application.cpp index eb31e4c9..22802e41 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -67,6 +67,7 @@ #include "lyrics/songlyricscomlyricsprovider.h" #include "lyrics/azlyricscomlyricsprovider.h" #include "lyrics/elyricsnetlyricsprovider.h" +#include "lyrics/letraslyricsprovider.h" #include "scrobbler/audioscrobbler.h" #include "scrobbler/lastfmscrobbler.h" @@ -168,6 +169,7 @@ class ApplicationImpl { lyrics_providers->AddProvider(new SongLyricsComLyricsProvider(app->network())); lyrics_providers->AddProvider(new AzLyricsComLyricsProvider(app->network())); lyrics_providers->AddProvider(new ElyricsNetLyricsProvider(app->network())); + lyrics_providers->AddProvider(new LetrasLyricsProvider(app->network())); lyrics_providers->ReloadSettings(); return lyrics_providers; }), diff --git a/src/lyrics/htmllyricsprovider.cpp b/src/lyrics/htmllyricsprovider.cpp index 5695eb86..49764ccd 100644 --- a/src/lyrics/htmllyricsprovider.cpp +++ b/src/lyrics/htmllyricsprovider.cpp @@ -163,6 +163,7 @@ QString HtmlLyricsProvider::ParseLyricsFromHTML(const QString &content, const QR .remove(QRegularExpression("")) .remove(QRegularExpression("
    ]*>×
    ")) .replace(QRegularExpression("]*>"), "\n") + .replace(QRegularExpression("

    "), "\n\n") .remove(QRegularExpression("<[^>]*>")) .trimmed()); } diff --git a/src/lyrics/letraslyricsprovider.cpp b/src/lyrics/letraslyricsprovider.cpp new file mode 100644 index 00000000..7b0b5a67 --- /dev/null +++ b/src/lyrics/letraslyricsprovider.cpp @@ -0,0 +1,58 @@ +/* + * Strawberry Music Player + * Copyright 2024, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#include +#include +#include +#include +#include +#include + +#include "core/shared_ptr.h" +#include "core/networkaccessmanager.h" +#include "core/logging.h" +#include "utilities/transliterate.h" +#include "lyricssearchrequest.h" +#include "letraslyricsprovider.h" + +const char LetrasLyricsProvider::kUrl[] = "https://www.letras.mus.br/winamp.php"; +const char LetrasLyricsProvider::kStartTag[] = "]*>"; +const char LetrasLyricsProvider::kEndTag[] = "<\\/div>"; +const char LetrasLyricsProvider::kLyricsStart[] = "
    "; + +LetrasLyricsProvider::LetrasLyricsProvider(SharedPtr network, QObject *parent) + : HtmlLyricsProvider("letras.mus.br", true, kStartTag, kEndTag, kLyricsStart, false, network, parent) {} + +QUrl LetrasLyricsProvider::Url(const LyricsSearchRequest &request) { + + return QUrl(QString(kUrl) + QStringLiteral("?musica=") + StringFixup(request.artist) + "&artista=" + StringFixup(request.title)); + +} + +QString LetrasLyricsProvider::StringFixup(const QString &text) { + + return QUrl::toPercentEncoding(Utilities::Transliterate(text) + .replace(QRegularExpression("[^\\w0-9_,&\\-\\(\\) ]"), "_") + .replace(QRegularExpression(" {2,}"), " ") + .simplified() + .replace(' ', '-') + .toLower() + ); + +} diff --git a/src/lyrics/letraslyricsprovider.h b/src/lyrics/letraslyricsprovider.h new file mode 100644 index 00000000..b5e08fda --- /dev/null +++ b/src/lyrics/letraslyricsprovider.h @@ -0,0 +1,54 @@ +/* + * Strawberry Music Player + * Copyright 2024, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#ifndef LETRASLYRICSPROVIDER_H +#define LETRASLYRICSPROVIDER_H + +#include +#include +#include +#include +#include +#include + +#include "core/shared_ptr.h" +#include "core/networkaccessmanager.h" +#include "htmllyricsprovider.h" +#include "lyricssearchrequest.h" + +class LetrasLyricsProvider : public HtmlLyricsProvider { + Q_OBJECT + + public: + explicit LetrasLyricsProvider(SharedPtr network, QObject *parent = nullptr); + + protected: + QUrl Url(const LyricsSearchRequest &request) override; + + private: + QString StringFixup(const QString &text); + + private: + static const char kUrl[]; + static const char kStartTag[]; + static const char kEndTag[]; + static const char kLyricsStart[]; +}; + +#endif // LETRASLYRICSPROVIDER_H From a6ea4dd0d75adb2dc0cf0ca69a4b22b3be59d319 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 28 Feb 2024 21:37:14 +0100 Subject: [PATCH 59/68] Remove unused includes --- src/lyrics/azlyricscomlyricsprovider.cpp | 2 -- src/lyrics/azlyricscomlyricsprovider.h | 2 -- src/lyrics/elyricsnetlyricsprovider.cpp | 2 -- src/lyrics/elyricsnetlyricsprovider.h | 2 -- src/lyrics/letraslyricsprovider.cpp | 2 -- src/lyrics/letraslyricsprovider.h | 2 -- src/lyrics/songlyricscomlyricsprovider.cpp | 2 -- src/lyrics/songlyricscomlyricsprovider.h | 2 -- 8 files changed, 16 deletions(-) diff --git a/src/lyrics/azlyricscomlyricsprovider.cpp b/src/lyrics/azlyricscomlyricsprovider.cpp index 690532c9..facd3fea 100644 --- a/src/lyrics/azlyricscomlyricsprovider.cpp +++ b/src/lyrics/azlyricscomlyricsprovider.cpp @@ -18,8 +18,6 @@ */ #include -#include -#include #include #include #include diff --git a/src/lyrics/azlyricscomlyricsprovider.h b/src/lyrics/azlyricscomlyricsprovider.h index 11e2a35b..f3dd8e5a 100644 --- a/src/lyrics/azlyricscomlyricsprovider.h +++ b/src/lyrics/azlyricscomlyricsprovider.h @@ -22,8 +22,6 @@ #include #include -#include -#include #include #include diff --git a/src/lyrics/elyricsnetlyricsprovider.cpp b/src/lyrics/elyricsnetlyricsprovider.cpp index e7c981d5..a128b07a 100644 --- a/src/lyrics/elyricsnetlyricsprovider.cpp +++ b/src/lyrics/elyricsnetlyricsprovider.cpp @@ -18,8 +18,6 @@ */ #include -#include -#include #include #include #include diff --git a/src/lyrics/elyricsnetlyricsprovider.h b/src/lyrics/elyricsnetlyricsprovider.h index bf030514..abdb148f 100644 --- a/src/lyrics/elyricsnetlyricsprovider.h +++ b/src/lyrics/elyricsnetlyricsprovider.h @@ -22,8 +22,6 @@ #include #include -#include -#include #include #include diff --git a/src/lyrics/letraslyricsprovider.cpp b/src/lyrics/letraslyricsprovider.cpp index 7b0b5a67..c4d8ec5b 100644 --- a/src/lyrics/letraslyricsprovider.cpp +++ b/src/lyrics/letraslyricsprovider.cpp @@ -18,8 +18,6 @@ */ #include -#include -#include #include #include #include diff --git a/src/lyrics/letraslyricsprovider.h b/src/lyrics/letraslyricsprovider.h index b5e08fda..c7f6129e 100644 --- a/src/lyrics/letraslyricsprovider.h +++ b/src/lyrics/letraslyricsprovider.h @@ -22,8 +22,6 @@ #include #include -#include -#include #include #include diff --git a/src/lyrics/songlyricscomlyricsprovider.cpp b/src/lyrics/songlyricscomlyricsprovider.cpp index cf40c62f..2e53453e 100644 --- a/src/lyrics/songlyricscomlyricsprovider.cpp +++ b/src/lyrics/songlyricscomlyricsprovider.cpp @@ -18,8 +18,6 @@ */ #include -#include -#include #include #include #include diff --git a/src/lyrics/songlyricscomlyricsprovider.h b/src/lyrics/songlyricscomlyricsprovider.h index cfad073c..7a1580d3 100644 --- a/src/lyrics/songlyricscomlyricsprovider.h +++ b/src/lyrics/songlyricscomlyricsprovider.h @@ -22,8 +22,6 @@ #include #include -#include -#include #include #include From b365131363993b7153b2605f8fb58b81f30aa190 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Wed, 28 Feb 2024 23:00:24 +0100 Subject: [PATCH 60/68] Playlist: Remove veto listeners We have never used this, it's basically dead code. --- src/playlist/playlist.cpp | 52 --------------------------------------- src/playlist/playlist.h | 20 --------------- 2 files changed, 72 deletions(-) diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 54837bd2..eeb286ab 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -1026,44 +1026,6 @@ void Playlist::InsertItems(const PlaylistItemPtrList &itemsIn, const int pos, co PlaylistItemPtrList items = itemsIn; - // Exercise vetoes - SongList songs; - songs.reserve(items.count()); - for (PlaylistItemPtr item : items) { // clazy:exclude=range-loop-reference - songs << item->Metadata(); - } - - const qint64 song_count = songs.length(); - QSet vetoed; - for (SongInsertVetoListener *listener : veto_listeners_) { - for (const Song &song : listener->AboutToInsertSongs(GetAllSongs(), songs)) { - // Avoid veto-ing a song multiple times - vetoed.insert(song); - } - if (vetoed.count() == song_count) { - // All songs were vetoed and there's nothing more to do (there's no need for an undo step) - return; - } - } - - if (!vetoed.isEmpty()) { - QMutableListIterator it(items); - while (it.hasNext()) { - PlaylistItemPtr item = it.next(); - const Song ¤t = item->Metadata(); - - if (vetoed.contains(current)) { - vetoed.remove(current); - it.remove(); - } - } - - // Check for empty items once again after veto - if (items.isEmpty()) { - return; - } - } - const int start = pos == -1 ? static_cast(items_.count()) : pos; if (items.count() > kUndoItemLimit) { @@ -1905,20 +1867,6 @@ void Playlist::ReloadItemsBlocking(const QList &rows) { } -void Playlist::AddSongInsertVetoListener(SongInsertVetoListener *listener) { - veto_listeners_.append(listener); - QObject::connect(listener, &SongInsertVetoListener::destroyed, this, &Playlist::SongInsertVetoListenerDestroyed); -} - -void Playlist::RemoveSongInsertVetoListener(SongInsertVetoListener *listener) { - QObject::disconnect(listener, &SongInsertVetoListener::destroyed, this, &Playlist::SongInsertVetoListenerDestroyed); - veto_listeners_.removeAll(listener); -} - -void Playlist::SongInsertVetoListenerDestroyed() { - veto_listeners_.removeAll(qobject_cast(sender())); -} - void Playlist::Shuffle() { PlaylistItemPtrList new_items(items_); diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 478477e6..cd48deee 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -74,18 +74,6 @@ using ColumnAlignmentMap = QMap; Q_DECLARE_METATYPE(Qt::Alignment) Q_DECLARE_METATYPE(ColumnAlignmentMap) -// Objects that may prevent a song being added to the playlist. -// When there is something about to be inserted into it, -// Playlist notifies all of its listeners about the fact and every one of them picks 'invalid' songs. -class SongInsertVetoListener : public QObject { - Q_OBJECT - - public: - // Listener returns a list of 'invalid' songs. - // 'old_songs' are songs that are currently in the playlist and 'new_songs' are the songs about to be added if nobody exercises a veto. - virtual SongList AboutToInsertSongs(const SongList &old_songs, const SongList &new_songs) = 0; -}; - class Playlist : public QAbstractListModel { Q_OBJECT @@ -258,11 +246,6 @@ class Playlist : public QAbstractListModel { void ReloadItemsBlocking(const QList &rows); void InformOfCurrentSongChange(const AutoScroll autoscroll, const bool minor); - // Registers an object which will get notifications when new songs are about to be inserted into this playlist. - void AddSongInsertVetoListener(SongInsertVetoListener *listener); - // Unregisters a SongInsertVetoListener object. - void RemoveSongInsertVetoListener(SongInsertVetoListener *listener); - // Just emits the dataChanged() signal so the mood column is repainted. #ifdef HAVE_MOODBAR void MoodbarUpdated(const QModelIndex &idx); @@ -376,7 +359,6 @@ class Playlist : public QAbstractListModel { void SongSaveComplete(TagReaderReply *reply, const QPersistentModelIndex &idx, const Song &old_metadata); void ItemReloadComplete(const QPersistentModelIndex &idx, const Song &old_metadata, const bool metadata_edit); void ItemsLoaded(); - void SongInsertVetoListenerDestroyed(); void ScheduleSave(); void Save(); @@ -420,8 +402,6 @@ class Playlist : public QAbstractListModel { ColumnAlignmentMap column_alignments_; - QList veto_listeners_; - QString special_type_; // Cancel async restore if songs are already replaced From 7f4c61b15a2cfbcaa6c46fae61cdb5aca119558e Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 2 Mar 2024 19:48:19 +0100 Subject: [PATCH 61/68] Improve album and title disc, remastered, etc matching Don't partial remove things like "(Mono / Remastered)". Fixes #1387 --- src/collection/collectionmodel.cpp | 4 +- src/core/song.cpp | 67 ++++++++++++++++++- src/core/song.h | 15 ++++- .../albumcoverchoicecontroller.cpp | 2 +- src/covermanager/albumcoverfetcher.cpp | 8 +-- src/covermanager/deezercoverprovider.cpp | 5 +- src/covermanager/qobuzcoverprovider.cpp | 5 +- src/covermanager/tidalcoverprovider.cpp | 8 +-- src/lyrics/lyricsfetcher.cpp | 6 +- src/qobuz/qobuzrequest.cpp | 2 +- src/scrobbler/scrobblerservice.cpp | 8 +-- src/scrobbler/scrobblerservice.h | 4 +- src/tidal/tidalrequest.cpp | 2 +- src/utilities/coverutils.cpp | 2 +- 14 files changed, 96 insertions(+), 42 deletions(-) diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index 0009fcb3..895a9faf 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -1681,7 +1681,7 @@ QString CollectionModel::PrettyYearAlbum(const int year, const QString &album) { QString CollectionModel::PrettyAlbumDisc(const QString &album, const int disc) { - if (disc <= 0 || album.contains(Song::kAlbumRemoveDisc)) return TextOrUnknown(album); + if (disc <= 0 || Song::AlbumContainsDisc(album)) return TextOrUnknown(album); else return TextOrUnknown(album) + " - (Disc " + QString::number(disc) + ")"; } @@ -1693,7 +1693,7 @@ QString CollectionModel::PrettyYearAlbumDisc(const int year, const QString &albu if (year <= 0) str = TextOrUnknown(album); else str = QString::number(year) + " - " + TextOrUnknown(album); - if (!album.contains(Song::kAlbumRemoveDisc) && disc > 0) str += " - (Disc " + QString::number(disc) + ")"; + if (!Song::AlbumContainsDisc(album) && disc > 0) str += " - (Disc " + QString::number(disc) + ")"; return str; diff --git a/src/core/song.cpp b/src/core/song.cpp index b5630e59..97123d4e 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -167,9 +167,20 @@ const QString Song::kFtsColumnSpec = Song::kFtsColumns.join(", "); const QString Song::kFtsBindSpec = Utilities::Prepend(":", Song::kFtsColumns).join(", "); const QString Song::kFtsUpdateSpec = Utilities::Updateify(Song::kFtsColumns).join(", "); -const QRegularExpression Song::kAlbumRemoveDisc(" ?-? ((\\(|\\[)?)(Disc|CD) ?([0-9]{1,2})((\\)|\\])?)$", QRegularExpression::CaseInsensitiveOption); -const QRegularExpression Song::kAlbumRemoveMisc(" ?-? ((\\(|\\[)?)(Remastered|([0-9]{1,4}) *Remaster|Explicit) ?((\\)|\\])?)$", QRegularExpression::CaseInsensitiveOption); -const QRegularExpression Song::kTitleRemoveMisc(" ?-? ((\\(|\\[)?)(Remastered|Remastered Version|([0-9]{1,4}) *Remaster) ?((\\)|\\])?)$", QRegularExpression::CaseInsensitiveOption); +const Song::RegularExpressionList Song::kAlbumDisc = Song::RegularExpressionList() + << QRegularExpression("\\s+-*\\s*(Disc|CD)\\s*([0-9]{1,2})$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\(\\s*(Disc|CD)\\s*([0-9]{1,2})\\)$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\[\\s*(Disc|CD)\\s*([0-9]{1,2})\\]$", QRegularExpression::CaseInsensitiveOption); + +const Song::RegularExpressionList Song::kAlbumMisc = Song::RegularExpressionList() + << QRegularExpression("\\s+-*\\s*(Remastered|([0-9]{1,4})\\s*Remaster|Explicit)\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\(\\s*(Remastered|([0-9]{1,4})\\s*Remaster|Explicit)\\s*\\)\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\[\\s*(Remastered|([0-9]{1,4})\\s*Remaster|Explicit)\\s*\\]\\s*$", QRegularExpression::CaseInsensitiveOption); + +const Song::RegularExpressionList Song::kTitleMisc = Song::RegularExpressionList() + << QRegularExpression("\\s+-*\\s*(Remastered|Remastered Version|([0-9]{1,4})\\s*Remaster)\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\(\\s*(Remastered|Remastered Version|([0-9]{1,4})\\s*Remaster)\\s*\\)\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\[\\s*(Remastered|Remastered Version|([0-9]{1,4})\\s*Remaster)\\s*\\]\\s*$", QRegularExpression::CaseInsensitiveOption); const QStringList Song::kArticles = QStringList() << "the " << "a " << "an "; @@ -1843,3 +1854,53 @@ size_t HashSimilar(const Song &song) { // Should compare the same fields as function IsSimilar return qHash(song.title().toLower()) ^ qHash(song.artist().toLower()) ^ qHash(song.album().toLower()); } + +bool Song::ContainsRegexList(const QString &str, const RegularExpressionList ®ex_list) { + + for (const QRegularExpression ®ex : regex_list) { + if (str.contains(regex)) return true; + } + + return false; + +} + +QString Song::StripRegexList(QString str, const RegularExpressionList ®ex_list) { + + for (const QRegularExpression ®ex : regex_list) { + str = str.remove(regex); + } + + return str; + +} + +bool Song::AlbumContainsDisc(const QString &album) { + + return ContainsRegexList(album, kAlbumDisc); + +} + +QString Song::AlbumRemoveDisc(const QString &album) { + + return StripRegexList(album, kAlbumDisc); + +} + +QString Song::AlbumRemoveMisc(const QString &album) { + + return StripRegexList(album, kAlbumMisc); + +} + +QString Song::AlbumRemoveDiscMisc(const QString &album) { + + return StripRegexList(album, RegularExpressionList() << kAlbumDisc << kAlbumMisc); + +} + +QString Song::TitleRemoveMisc(const QString &title) { + + return StripRegexList(title, kTitleMisc); + +} diff --git a/src/core/song.h b/src/core/song.h index 76b57118..8fcc2ea6 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -123,9 +123,10 @@ class Song { static const QString kFtsBindSpec; static const QString kFtsUpdateSpec; - static const QRegularExpression kAlbumRemoveDisc; - static const QRegularExpression kAlbumRemoveMisc; - static const QRegularExpression kTitleRemoveMisc; + using RegularExpressionList = QList; + static const RegularExpressionList kAlbumDisc; + static const RegularExpressionList kAlbumMisc; + static const RegularExpressionList kTitleMisc; static const QStringList kArticles; @@ -443,6 +444,14 @@ class Song { // It is more efficient to use IsOnSameAlbum, but this function can be used when you need to hash the key to do fast lookups. QString AlbumKey() const; + static bool ContainsRegexList(const QString &str, const RegularExpressionList ®ex_list); + static QString StripRegexList(QString str, const RegularExpressionList ®ex_list); + static bool AlbumContainsDisc(const QString &album); + static QString AlbumRemoveDisc(const QString &album); + static QString AlbumRemoveMisc(const QString &album); + static QString AlbumRemoveDiscMisc(const QString &album); + static QString TitleRemoveMisc(const QString &title); + private: struct Private; diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index 6c3c1691..246a69bb 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -333,7 +333,7 @@ AlbumCoverImageResult AlbumCoverChoiceController::SearchForImage(Song *song) { if (!song->url().isValid() || !song->url().isLocalFile() || song->effective_albumartist().isEmpty() || song->album().isEmpty()) return AlbumCoverImageResult(); QString album = song->effective_album(); - album = album.remove(Song::kAlbumRemoveDisc).remove(Song::kAlbumRemoveMisc); + album = Song::AlbumRemoveDiscMisc(album); // Get something sensible to stick in the search box return cover_searcher_->Exec(song->effective_albumartist(), album); diff --git a/src/covermanager/albumcoverfetcher.cpp b/src/covermanager/albumcoverfetcher.cpp index 0f16452c..d416a88f 100644 --- a/src/covermanager/albumcoverfetcher.cpp +++ b/src/covermanager/albumcoverfetcher.cpp @@ -66,9 +66,7 @@ quint64 AlbumCoverFetcher::FetchAlbumCover(const QString &artist, const QString CoverSearchRequest request; request.id = ++next_id_; request.artist = artist; - request.album = album; - request.album = request.album.remove(Song::kAlbumRemoveDisc); - request.album = request.album.remove(Song::kAlbumRemoveMisc); + request.album = Song::AlbumRemoveDiscMisc(album); request.title = title; request.search = false; request.batch = batch; @@ -83,9 +81,7 @@ quint64 AlbumCoverFetcher::SearchForCovers(const QString &artist, const QString CoverSearchRequest request; request.id = ++next_id_; request.artist = artist; - request.album = album; - request.album = request.album.remove(Song::kAlbumRemoveDisc); - request.album = request.album.remove(Song::kAlbumRemoveMisc); + request.album = Song::AlbumRemoveDiscMisc(album); request.title = title; request.search = true; request.batch = false; diff --git a/src/covermanager/deezercoverprovider.cpp b/src/covermanager/deezercoverprovider.cpp index 2a003e1c..ebc902cd 100644 --- a/src/covermanager/deezercoverprovider.cpp +++ b/src/covermanager/deezercoverprovider.cpp @@ -265,12 +265,9 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) } QString album = obj_album["title"].toString(); - album = album.remove(Song::kAlbumRemoveDisc); - album = album.remove(Song::kAlbumRemoveMisc); - CoverProviderSearchResult cover_result; cover_result.artist = artist; - cover_result.album = album; + cover_result.album = Song::AlbumRemoveDiscMisc(album); bool have_cover = false; QList> cover_sizes = QList>() << qMakePair(QString("cover_xl"), QSize(1000, 1000)) diff --git a/src/covermanager/qobuzcoverprovider.cpp b/src/covermanager/qobuzcoverprovider.cpp index 11157417..b987b9ea 100644 --- a/src/covermanager/qobuzcoverprovider.cpp +++ b/src/covermanager/qobuzcoverprovider.cpp @@ -262,12 +262,9 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { } QUrl cover_url(obj_image["large"].toString()); - album = album.remove(Song::kAlbumRemoveDisc); - album = album.remove(Song::kAlbumRemoveMisc); - CoverProviderSearchResult cover_result; cover_result.artist = artist; - cover_result.album = album; + cover_result.album = Song::AlbumRemoveDiscMisc(album); cover_result.image_url = cover_url; cover_result.image_size = QSize(600, 600); results << cover_result; diff --git a/src/covermanager/tidalcoverprovider.cpp b/src/covermanager/tidalcoverprovider.cpp index e5bd189e..bf0fb73a 100644 --- a/src/covermanager/tidalcoverprovider.cpp +++ b/src/covermanager/tidalcoverprovider.cpp @@ -241,15 +241,11 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { continue; } QString album = obj_album["title"].toString(); - QString cover = obj_album["cover"].toString(); - - album = album.remove(Song::kAlbumRemoveDisc); - album = album.remove(Song::kAlbumRemoveMisc); - cover = cover.replace("-", "/"); + QString cover = obj_album["cover"].toString().replace("-", "/"); CoverProviderSearchResult cover_result; cover_result.artist = artist; - cover_result.album = album; + cover_result.album = Song::AlbumRemoveDiscMisc(album); cover_result.number = ++i; QList> cover_sizes = QList>() << qMakePair(QString("1280x1280"), QSize(1280, 1280)) diff --git a/src/lyrics/lyricsfetcher.cpp b/src/lyrics/lyricsfetcher.cpp index 9e65dbd7..616006b9 100644 --- a/src/lyrics/lyricsfetcher.cpp +++ b/src/lyrics/lyricsfetcher.cpp @@ -53,10 +53,8 @@ quint64 LyricsFetcher::Search(const QString &effective_albumartist, const QStrin LyricsSearchRequest search_request; search_request.albumartist = effective_albumartist; search_request.artist = artist; - search_request.album = album; - search_request.album.remove(Song::kAlbumRemoveMisc); - search_request.title = title; - search_request.title.remove(Song::kTitleRemoveMisc); + search_request.album = Song::AlbumRemoveDiscMisc(album); + search_request.title = Song::TitleRemoveMisc(title); Request request; request.id = ++next_id_; diff --git a/src/qobuz/qobuzrequest.cpp b/src/qobuz/qobuzrequest.cpp index 62f7366c..9b3eb02a 100644 --- a/src/qobuz/qobuzrequest.cpp +++ b/src/qobuz/qobuzrequest.cpp @@ -1189,7 +1189,7 @@ void QobuzRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti url.setScheme(url_handler_->scheme()); url.setPath(song_id); - title.remove(Song::kTitleRemoveMisc); + title = Song::TitleRemoveMisc(title); //qLog(Debug) << "id" << song_id << "track" << track << "title" << title << "album" << album << "album artist" << album_artist << cover_url << streamable << url; diff --git a/src/scrobbler/scrobblerservice.cpp b/src/scrobbler/scrobblerservice.cpp index 20512e63..5fafde72 100644 --- a/src/scrobbler/scrobblerservice.cpp +++ b/src/scrobbler/scrobblerservice.cpp @@ -50,14 +50,14 @@ bool ScrobblerService::ExtractJsonObj(const QByteArray &data, QJsonObject &json_ } -QString ScrobblerService::StripAlbum(QString album) const { +QString ScrobblerService::StripAlbum(const QString &album) const { - return album.remove(Song::kAlbumRemoveDisc).remove(Song::kAlbumRemoveMisc); + return Song::AlbumRemoveDisc(album); } -QString ScrobblerService::StripTitle(QString title) const { +QString ScrobblerService::StripTitle(const QString &title) const { - return title.remove(Song::kTitleRemoveMisc); + return Song::TitleRemoveMisc(title); } diff --git a/src/scrobbler/scrobblerservice.h b/src/scrobbler/scrobblerservice.h index ea1daed7..b7b4ccd8 100644 --- a/src/scrobbler/scrobblerservice.h +++ b/src/scrobbler/scrobblerservice.h @@ -61,8 +61,8 @@ class ScrobblerService : public QObject { bool ExtractJsonObj(const QByteArray &data, QJsonObject &json_obj, QString &error_description); - QString StripAlbum(QString album) const; - QString StripTitle(QString title) const; + QString StripAlbum(const QString &album) const; + QString StripTitle(const QString &title) const; public slots: virtual void Submit() = 0; diff --git a/src/tidal/tidalrequest.cpp b/src/tidal/tidalrequest.cpp index 64bb939c..182df339 100644 --- a/src/tidal/tidalrequest.cpp +++ b/src/tidal/tidalrequest.cpp @@ -1129,7 +1129,7 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti } } - title.remove(Song::kTitleRemoveMisc); + title = Song::TitleRemoveMisc(title); //qLog(Debug) << "id" << song_id << "track" << track << "disc" << disc << "title" << title << "album" << album << "album artist" << album_artist << "artist" << artist << cover << allow_streaming << url; diff --git a/src/utilities/coverutils.cpp b/src/utilities/coverutils.cpp index dc7a3b6b..9a5bba5e 100644 --- a/src/utilities/coverutils.cpp +++ b/src/utilities/coverutils.cpp @@ -152,7 +152,7 @@ QString CoverUtils::CoverFilenameFromSource(const Song::Source source, const QUr QString CoverUtils::CoverFilenameFromVariable(const CoverOptions &options, const QString &artist, QString album, const QString &extension) { - album = album.remove(Song::kAlbumRemoveDisc); + album = Song::AlbumRemoveDisc(album); QString filename(options.cover_pattern); filename.replace("%albumartist", artist); From 9152f8559f911ba0d30b0bae7e06aedf0046e923 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 3 Mar 2024 01:50:05 +0100 Subject: [PATCH 62/68] Song: Split remastered and explicit regex --- src/core/song.cpp | 20 ++++++++++++++------ src/core/song.h | 2 ++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/core/song.cpp b/src/core/song.cpp index 97123d4e..9ee713f6 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -172,15 +172,23 @@ const Song::RegularExpressionList Song::kAlbumDisc = Song::RegularExpressionList << QRegularExpression("\\s+-*\\s*\\(\\s*(Disc|CD)\\s*([0-9]{1,2})\\)$", QRegularExpression::CaseInsensitiveOption) << QRegularExpression("\\s+-*\\s*\\[\\s*(Disc|CD)\\s*([0-9]{1,2})\\]$", QRegularExpression::CaseInsensitiveOption); +const Song::RegularExpressionList Song::kRemastered = Song::RegularExpressionList() + << QRegularExpression("\\s+-*\\s*(([0-9]{4})*\\s*Remastered|([0-9]{4})*\\s*Remaster)\\s*(Version)*\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\(\\s*(([0-9]{4})*\\s*Remastered|([0-9]{4})*\\s*Remaster)\\s*(Version)*\\s*\\)\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\[\\s*(([0-9]{4})*\\s*Remastered|([0-9]{4})*\\s*Remaster)\\s*(Version)*\\s*\\]\\s*$", QRegularExpression::CaseInsensitiveOption); + +const Song::RegularExpressionList Song::kExplicit = Song::RegularExpressionList() + << QRegularExpression("\\s+-*\\s*Explicit\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\(\\s*Explicit\\s*\\)\\s*$", QRegularExpression::CaseInsensitiveOption) + << QRegularExpression("\\s+-*\\s*\\[\\s*Explicit\\s*\\]\\s*$", QRegularExpression::CaseInsensitiveOption); + const Song::RegularExpressionList Song::kAlbumMisc = Song::RegularExpressionList() - << QRegularExpression("\\s+-*\\s*(Remastered|([0-9]{1,4})\\s*Remaster|Explicit)\\s*$", QRegularExpression::CaseInsensitiveOption) - << QRegularExpression("\\s+-*\\s*\\(\\s*(Remastered|([0-9]{1,4})\\s*Remaster|Explicit)\\s*\\)\\s*$", QRegularExpression::CaseInsensitiveOption) - << QRegularExpression("\\s+-*\\s*\\[\\s*(Remastered|([0-9]{1,4})\\s*Remaster|Explicit)\\s*\\]\\s*$", QRegularExpression::CaseInsensitiveOption); + << kRemastered + << kExplicit; const Song::RegularExpressionList Song::kTitleMisc = Song::RegularExpressionList() - << QRegularExpression("\\s+-*\\s*(Remastered|Remastered Version|([0-9]{1,4})\\s*Remaster)\\s*$", QRegularExpression::CaseInsensitiveOption) - << QRegularExpression("\\s+-*\\s*\\(\\s*(Remastered|Remastered Version|([0-9]{1,4})\\s*Remaster)\\s*\\)\\s*$", QRegularExpression::CaseInsensitiveOption) - << QRegularExpression("\\s+-*\\s*\\[\\s*(Remastered|Remastered Version|([0-9]{1,4})\\s*Remaster)\\s*\\]\\s*$", QRegularExpression::CaseInsensitiveOption); + << kRemastered + << kExplicit; const QStringList Song::kArticles = QStringList() << "the " << "a " << "an "; diff --git a/src/core/song.h b/src/core/song.h index 8fcc2ea6..1c328347 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -125,6 +125,8 @@ class Song { using RegularExpressionList = QList; static const RegularExpressionList kAlbumDisc; + static const RegularExpressionList kRemastered; + static const RegularExpressionList kExplicit; static const RegularExpressionList kAlbumMisc; static const RegularExpressionList kTitleMisc; From 4626a6f6090793c796cdb018d1d34db549ff3088 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 8 Mar 2024 18:52:22 +0100 Subject: [PATCH 63/68] GstEnginePipeline: Use playbin3 with gstreamer >= 1.22 --- src/engine/gstenginepipeline.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index dd2f89e6..ec8e0aad 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -340,7 +340,7 @@ bool GstEnginePipeline::InitFromUrl(const QUrl &media_url, const QUrl &stream_ur guint version_major = 0, version_minor = 0, version_micro = 0, version_nano = 0; gst_plugins_base_version(&version_major, &version_minor, &version_micro, &version_nano); - if (QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor)), QVersionNumber(1, 22)) == 0) { + if (QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor)), QVersionNumber(1, 22)) >= 0) { pipeline_ = CreateElement("playbin3", "pipeline", nullptr, error); } else { From 2aa70b6ab8a70d7603848dc6c90dd70a4f971ec3 Mon Sep 17 00:00:00 2001 From: Sami Boukortt Date: Mon, 11 Mar 2024 11:09:33 +0100 Subject: [PATCH 64/68] =?UTF-8?q?Add=20an=20option=20not=20to=20skip=20?= =?UTF-8?q?=E2=80=9CThe=E2=80=9D=20when=20sorting=20artist=20names?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/collection/collectionmodel.cpp | 52 +++++++++++++++---------- src/collection/collectionmodel.h | 6 ++- src/collection/collectionview.cpp | 1 + src/internet/internetcollectionview.cpp | 1 + src/internet/internetsearchmodel.cpp | 16 ++++---- src/settings/collectionsettingspage.cpp | 2 + src/settings/collectionsettingspage.ui | 8 ++++ 7 files changed, 57 insertions(+), 29 deletions(-) diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index 895a9faf..2f09cb04 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -86,6 +86,7 @@ CollectionModel::CollectionModel(SharedPtr backend, Applicati app_(app), dir_model_(new CollectionDirectoryModel(backend, this)), show_various_artists_(true), + sort_skips_articles_(true), total_song_count_(0), total_artist_count_(0), total_album_count_(0), @@ -163,6 +164,15 @@ void CollectionModel::set_show_dividers(const bool show_dividers) { } +void CollectionModel::set_sort_skips_articles(const bool sort_skips_articles) { + + if (sort_skips_articles != sort_skips_articles_) { + sort_skips_articles_ = sort_skips_articles; + Reset(); + } + +} + void CollectionModel::ReloadSettings() { QSettings s; @@ -1242,14 +1252,14 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->metadata.set_albumartist(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.albumartist()); - item->sort_text = SortTextForArtist(item->metadata.albumartist()); + item->sort_text = SortTextForArtist(item->metadata.albumartist(), sort_skips_articles_); break; } case GroupBy::Artist:{ item->metadata.set_artist(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.artist()); - item->sort_text = SortTextForArtist(item->metadata.artist()); + item->sort_text = SortTextForArtist(item->metadata.artist(), sort_skips_articles_); break; } case GroupBy::Album:{ @@ -1258,7 +1268,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->metadata.set_grouping(row.value(2).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.album()); - item->sort_text = SortTextForArtist(item->metadata.album()); + item->sort_text = SortTextForArtist(item->metadata.album(), sort_skips_articles_); break; } case GroupBy::AlbumDisc:{ @@ -1343,28 +1353,28 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy group_by, const boo item->metadata.set_genre(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.genre()); - item->sort_text = SortTextForArtist(item->metadata.genre()); + item->sort_text = SortTextForArtist(item->metadata.genre(), sort_skips_articles_); break; } case GroupBy::Composer:{ item->metadata.set_composer(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.composer()); - item->sort_text = SortTextForArtist(item->metadata.composer()); + item->sort_text = SortTextForArtist(item->metadata.composer(), sort_skips_articles_); break; } case GroupBy::Performer:{ item->metadata.set_performer(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.performer()); - item->sort_text = SortTextForArtist(item->metadata.performer()); + item->sort_text = SortTextForArtist(item->metadata.performer(), sort_skips_articles_); break; } case GroupBy::Grouping:{ item->metadata.set_grouping(row.value(0).toString()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, item->metadata)); item->display_text = TextOrUnknown(item->metadata.grouping()); - item->sort_text = SortTextForArtist(item->metadata.grouping()); + item->sort_text = SortTextForArtist(item->metadata.grouping(), sort_skips_articles_); break; } case GroupBy::FileType:{ @@ -1441,14 +1451,14 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->metadata.set_albumartist(s.effective_albumartist()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.effective_albumartist()); - item->sort_text = SortTextForArtist(s.effective_albumartist()); + item->sort_text = SortTextForArtist(s.effective_albumartist(), sort_skips_articles_); break; } case GroupBy::Artist:{ item->metadata.set_artist(s.artist()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.artist()); - item->sort_text = SortTextForArtist(s.artist()); + item->sort_text = SortTextForArtist(s.artist(), sort_skips_articles_); break; } case GroupBy::Album:{ @@ -1457,7 +1467,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->metadata.set_grouping(s.grouping()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.album()); - item->sort_text = SortTextForArtist(s.album()); + item->sort_text = SortTextForArtist(s.album(), sort_skips_articles_); break; } case GroupBy::AlbumDisc:{ @@ -1542,28 +1552,28 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy group_by, const bool item->metadata.set_genre(s.genre()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.genre()); - item->sort_text = SortTextForArtist(s.genre()); + item->sort_text = SortTextForArtist(s.genre(), sort_skips_articles_); break; } case GroupBy::Composer:{ item->metadata.set_composer(s.composer()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.composer()); - item->sort_text = SortTextForArtist(s.composer()); + item->sort_text = SortTextForArtist(s.composer(), sort_skips_articles_); break; } case GroupBy::Performer:{ item->metadata.set_performer(s.performer()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.performer()); - item->sort_text = SortTextForArtist(s.performer()); + item->sort_text = SortTextForArtist(s.performer(), sort_skips_articles_); break; } case GroupBy::Grouping:{ item->metadata.set_grouping(s.grouping()); item->key.append(ContainerKey(group_by, separate_albums_by_grouping, s)); item->display_text = TextOrUnknown(s.grouping()); - item->sort_text = SortTextForArtist(s.grouping()); + item->sort_text = SortTextForArtist(s.grouping(), sort_skips_articles_); break; } case GroupBy::FileType:{ @@ -1719,15 +1729,17 @@ QString CollectionModel::SortText(QString text) { } -QString CollectionModel::SortTextForArtist(QString artist) { +QString CollectionModel::SortTextForArtist(QString artist, const bool skip_articles) { artist = SortText(artist); - for (const auto &i : Song::kArticles) { - if (artist.startsWith(i)) { - qint64 ilen = i.length(); - artist = artist.right(artist.length() - ilen) + ", " + i.left(ilen - 1); - break; + if (skip_articles) { + for (const auto &i : Song::kArticles) { + if (artist.startsWith(i)) { + qint64 ilen = i.length(); + artist = artist.right(artist.length() - ilen) + ", " + i.left(ilen - 1); + break; + } } } diff --git a/src/collection/collectionmodel.h b/src/collection/collectionmodel.h index 17deae0b..1daf9a50 100644 --- a/src/collection/collectionmodel.h +++ b/src/collection/collectionmodel.h @@ -162,6 +162,9 @@ class CollectionModel : public SimpleTreeModel { // Whether or not to show letters heading in the collection view void set_show_dividers(const bool show_dividers); + // Whether to skip articles such as “The” when sorting artist names + void set_sort_skips_articles(const bool sort_skips_articles); + // Reload settings. void ReloadSettings(); @@ -173,7 +176,7 @@ class CollectionModel : public SimpleTreeModel { static QString PrettyDisc(const int disc); static QString SortText(QString text); static QString SortTextForNumber(const int number); - static QString SortTextForArtist(QString artist); + static QString SortTextForArtist(QString artist, const bool skip_articles); static QString SortTextForSong(const Song &song); static QString SortTextForYear(const int year); static QString SortTextForBitrate(const int bitrate); @@ -278,6 +281,7 @@ class CollectionModel : public SimpleTreeModel { Application *app_; CollectionDirectoryModel *dir_model_; bool show_various_artists_; + bool sort_skips_articles_; int total_song_count_; int total_artist_count_; diff --git a/src/collection/collectionview.cpp b/src/collection/collectionview.cpp index b907330b..f64f33b9 100644 --- a/src/collection/collectionview.cpp +++ b/src/collection/collectionview.cpp @@ -232,6 +232,7 @@ void CollectionView::ReloadSettings() { if (app_) { app_->collection_model()->set_pretty_covers(settings.value("pretty_covers", true).toBool()); app_->collection_model()->set_show_dividers(settings.value("show_dividers", true).toBool()); + app_->collection_model()->set_sort_skips_articles(settings.value("sort_skips_articles", true).toBool()); } delete_files_ = settings.value("delete_files", false).toBool(); diff --git a/src/internet/internetcollectionview.cpp b/src/internet/internetcollectionview.cpp index fab1b0b6..227b1c1f 100644 --- a/src/internet/internetcollectionview.cpp +++ b/src/internet/internetcollectionview.cpp @@ -89,6 +89,7 @@ void InternetCollectionView::Init(Application *app, SharedPtr collection_model_->set_pretty_covers(true); collection_model_->set_show_dividers(true); + collection_model_->set_sort_skips_articles(true); ReloadSettings(); diff --git a/src/internet/internetsearchmodel.cpp b/src/internet/internetsearchmodel.cpp index 907fcc6b..f7030614 100644 --- a/src/internet/internetsearchmodel.cpp +++ b/src/internet/internetsearchmodel.cpp @@ -95,7 +95,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem } else { display_text = CollectionModel::TextOrUnknown(s.effective_albumartist()); - sort_text = CollectionModel::SortTextForArtist(s.effective_albumartist()); + sort_text = CollectionModel::SortTextForArtist(s.effective_albumartist(), true); } has_artist_icon = true; break; @@ -107,14 +107,14 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem } else { display_text = CollectionModel::TextOrUnknown(s.artist()); - sort_text = CollectionModel::SortTextForArtist(s.artist()); + sort_text = CollectionModel::SortTextForArtist(s.artist(), true); } has_artist_icon = true; break; case CollectionModel::GroupBy::Album: display_text = CollectionModel::TextOrUnknown(s.album()); - sort_text = CollectionModel::SortTextForArtist(s.album()); + sort_text = CollectionModel::SortTextForArtist(s.album(), true); unique_tag = s.album_id(); has_album_icon = true; break; @@ -168,7 +168,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem case CollectionModel::GroupBy::Disc: display_text = CollectionModel::PrettyDisc(s.disc()); - sort_text = CollectionModel::SortTextForArtist(display_text); + sort_text = CollectionModel::SortTextForArtist(display_text, true); has_album_icon = true; break; @@ -188,25 +188,25 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem case CollectionModel::GroupBy::Genre: display_text = CollectionModel::TextOrUnknown(s.genre()); - sort_text = CollectionModel::SortTextForArtist(s.genre()); + sort_text = CollectionModel::SortTextForArtist(s.genre(), true); has_album_icon = true; break; case CollectionModel::GroupBy::Composer: display_text = CollectionModel::TextOrUnknown(s.composer()); - sort_text = CollectionModel::SortTextForArtist(s.composer()); + sort_text = CollectionModel::SortTextForArtist(s.composer(), true); has_album_icon = true; break; case CollectionModel::GroupBy::Performer: display_text = CollectionModel::TextOrUnknown(s.performer()); - sort_text = CollectionModel::SortTextForArtist(s.performer()); + sort_text = CollectionModel::SortTextForArtist(s.performer(), true); has_album_icon = true; break; case CollectionModel::GroupBy::Grouping: display_text = CollectionModel::TextOrUnknown(s.grouping()); - sort_text = CollectionModel::SortTextForArtist(s.grouping()); + sort_text = CollectionModel::SortTextForArtist(s.grouping(), true); has_album_icon = true; break; diff --git a/src/settings/collectionsettingspage.cpp b/src/settings/collectionsettingspage.cpp index f96e730a..2bcc21f6 100644 --- a/src/settings/collectionsettingspage.cpp +++ b/src/settings/collectionsettingspage.cpp @@ -179,6 +179,7 @@ void CollectionSettingsPage::Load() { ui_->auto_open->setChecked(s.value("auto_open", true).toBool()); ui_->pretty_covers->setChecked(s.value("pretty_covers", true).toBool()); ui_->show_dividers->setChecked(s.value("show_dividers", true).toBool()); + ui_->sort_skips_articles->setChecked(s.value("sort_skips_articles", true).toBool()); ui_->startup_scan->setChecked(s.value("startup_scan", true).toBool()); ui_->monitor->setChecked(s.value("monitor", true).toBool()); ui_->song_tracking->setChecked(s.value("song_tracking", false).toBool()); @@ -226,6 +227,7 @@ void CollectionSettingsPage::Save() { s.setValue("auto_open", ui_->auto_open->isChecked()); s.setValue("pretty_covers", ui_->pretty_covers->isChecked()); s.setValue("show_dividers", ui_->show_dividers->isChecked()); + s.setValue("sort_skips_articles", ui_->sort_skips_articles->isChecked()); s.setValue("startup_scan", ui_->startup_scan->isChecked()); s.setValue("monitor", ui_->monitor->isChecked()); s.setValue("song_tracking", ui_->song_tracking->isChecked()); diff --git a/src/settings/collectionsettingspage.ui b/src/settings/collectionsettingspage.ui index 3b015305..52ad72a3 100644 --- a/src/settings/collectionsettingspage.ui +++ b/src/settings/collectionsettingspage.ui @@ -225,6 +225,13 @@ If there are no matches then it will use the largest image in the directory. + + + + Skip leading articles ("the", "a", "an") when sorting artist names + + + @@ -506,6 +513,7 @@ If there are no matches then it will use the largest image in the directory.auto_open pretty_covers show_dividers + sort_skips_articles spinbox_cache_size combobox_cache_size checkbox_disk_cache From f11afd441460bef06dd0a617ac767100fa22a1f0 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 12 Mar 2024 00:40:11 +0100 Subject: [PATCH 65/68] GstEnginePipeline: Add default to switch --- src/engine/gstenginepipeline.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index ec8e0aad..b3bfe3c2 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -483,6 +483,9 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { } break; } + default: + qLog(Warning) << "Unknown device clsid" << device_; + break; } } else if (g_object_class_find_property(G_OBJECT_GET_CLASS(audiosink_), "port-pattern")) { From 9c06d1d0aec17d240551e25b7f9d6c3d62d01cf0 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 12 Mar 2024 00:52:49 +0100 Subject: [PATCH 66/68] nsi: Add gstreamer dsd plugin --- dist/windows/strawberry.nsi.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dist/windows/strawberry.nsi.in b/dist/windows/strawberry.nsi.in index 40751ba4..2c515e16 100644 --- a/dist/windows/strawberry.nsi.in +++ b/dist/windows/strawberry.nsi.in @@ -650,6 +650,7 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=libgstcoreelements.dll" "gstreamer-plugins\libgstcoreelements.dll" File "/oname=libgstdash.dll" "gstreamer-plugins\libgstdash.dll" File "/oname=libgstdirectsound.dll" "gstreamer-plugins\libgstdirectsound.dll" + File "/oname=libgstdsd.dll" "gstreamer-plugins\libgstdsd.dll" File "/oname=libgstequalizer.dll" "gstreamer-plugins\libgstequalizer.dll" File "/oname=libgstfaac.dll" "gstreamer-plugins\libgstfaac.dll" File "/oname=libgstfaad.dll" "gstreamer-plugins\libgstfaad.dll" @@ -718,6 +719,7 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=gstcoreelements.dll" "gstreamer-plugins\gstcoreelements.dll" File "/oname=gstdash.dll" "gstreamer-plugins\gstdash.dll" File "/oname=gstdirectsound.dll" "gstreamer-plugins\gstdirectsound.dll" + File "/oname=gstdsd.dll" "gstreamer-plugins\gstdsd.dll" File "/oname=gstequalizer.dll" "gstreamer-plugins\gstequalizer.dll" File "/oname=gstfaac.dll" "gstreamer-plugins\gstfaac.dll" File "/oname=gstfaad.dll" "gstreamer-plugins\gstfaad.dll" @@ -1155,6 +1157,7 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\libgstcoreelements.dll" Delete "$INSTDIR\gstreamer-plugins\libgstdash.dll" Delete "$INSTDIR\gstreamer-plugins\libgstdirectsound.dll" + Delete "$INSTDIR\gstreamer-plugins\libgstdsd.dll" Delete "$INSTDIR\gstreamer-plugins\libgstequalizer.dll" Delete "$INSTDIR\gstreamer-plugins\libgstfaac.dll" Delete "$INSTDIR\gstreamer-plugins\libgstfaad.dll" @@ -1225,6 +1228,7 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\gstcoreelements.dll" Delete "$INSTDIR\gstreamer-plugins\gstdash.dll" Delete "$INSTDIR\gstreamer-plugins\gstdirectsound.dll" + Delete "$INSTDIR\gstreamer-plugins\gstdsd.dll" Delete "$INSTDIR\gstreamer-plugins\gstequalizer.dll" Delete "$INSTDIR\gstreamer-plugins\gstfaac.dll" Delete "$INSTDIR\gstreamer-plugins\gstfaad.dll" From 72ff64a7f816908734d3a2c94ed9c0f7a994fee0 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 12 Mar 2024 16:29:48 +0100 Subject: [PATCH 67/68] nsi: Remove unused gstreamer plugins --- dist/windows/strawberry.nsi.in | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/dist/windows/strawberry.nsi.in b/dist/windows/strawberry.nsi.in index 2c515e16..9933f484 100644 --- a/dist/windows/strawberry.nsi.in +++ b/dist/windows/strawberry.nsi.in @@ -640,11 +640,8 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=libgstasfmux.dll" "gstreamer-plugins\libgstasfmux.dll" File "/oname=libgstaudioconvert.dll" "gstreamer-plugins\libgstaudioconvert.dll" File "/oname=libgstaudiofx.dll" "gstreamer-plugins\libgstaudiofx.dll" - File "/oname=libgstaudiomixer.dll" "gstreamer-plugins\libgstaudiomixer.dll" File "/oname=libgstaudioparsers.dll" "gstreamer-plugins\libgstaudioparsers.dll" - File "/oname=libgstaudiorate.dll" "gstreamer-plugins\libgstaudiorate.dll" File "/oname=libgstaudioresample.dll" "gstreamer-plugins\libgstaudioresample.dll" - File "/oname=libgstaudiotestsrc.dll" "gstreamer-plugins\libgstaudiotestsrc.dll" File "/oname=libgstautodetect.dll" "gstreamer-plugins\libgstautodetect.dll" File "/oname=libgstbs2b.dll" "gstreamer-plugins\libgstbs2b.dll" File "/oname=libgstcoreelements.dll" "gstreamer-plugins\libgstcoreelements.dll" @@ -709,11 +706,8 @@ Section "Gstreamer plugins" gstreamer-plugins File "/oname=gstasio.dll" "gstreamer-plugins\gstasio.dll" File "/oname=gstaudioconvert.dll" "gstreamer-plugins\gstaudioconvert.dll" File "/oname=gstaudiofx.dll" "gstreamer-plugins\gstaudiofx.dll" - File "/oname=gstaudiomixer.dll" "gstreamer-plugins\gstaudiomixer.dll" File "/oname=gstaudioparsers.dll" "gstreamer-plugins\gstaudioparsers.dll" - File "/oname=gstaudiorate.dll" "gstreamer-plugins\gstaudiorate.dll" File "/oname=gstaudioresample.dll" "gstreamer-plugins\gstaudioresample.dll" - File "/oname=gstaudiotestsrc.dll" "gstreamer-plugins\gstaudiotestsrc.dll" File "/oname=gstautodetect.dll" "gstreamer-plugins\gstautodetect.dll" File "/oname=gstbs2b.dll" "gstreamer-plugins\gstbs2b.dll" File "/oname=gstcoreelements.dll" "gstreamer-plugins\gstcoreelements.dll" @@ -1147,11 +1141,8 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\libgstasfmux.dll" Delete "$INSTDIR\gstreamer-plugins\libgstaudioconvert.dll" Delete "$INSTDIR\gstreamer-plugins\libgstaudiofx.dll" - Delete "$INSTDIR\gstreamer-plugins\libgstaudiomixer.dll" Delete "$INSTDIR\gstreamer-plugins\libgstaudioparsers.dll" - Delete "$INSTDIR\gstreamer-plugins\libgstaudiorate.dll" Delete "$INSTDIR\gstreamer-plugins\libgstaudioresample.dll" - Delete "$INSTDIR\gstreamer-plugins\libgstaudiotestsrc.dll" Delete "$INSTDIR\gstreamer-plugins\libgstautodetect.dll" Delete "$INSTDIR\gstreamer-plugins\libgstbs2b.dll" Delete "$INSTDIR\gstreamer-plugins\libgstcoreelements.dll" @@ -1218,11 +1209,8 @@ Section "Uninstall" Delete "$INSTDIR\gstreamer-plugins\gstasio.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudioconvert.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudiofx.dll" - Delete "$INSTDIR\gstreamer-plugins\gstaudiomixer.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudioparsers.dll" - Delete "$INSTDIR\gstreamer-plugins\gstaudiorate.dll" Delete "$INSTDIR\gstreamer-plugins\gstaudioresample.dll" - Delete "$INSTDIR\gstreamer-plugins\gstaudiotestsrc.dll" Delete "$INSTDIR\gstreamer-plugins\gstautodetect.dll" Delete "$INSTDIR\gstreamer-plugins\gstbs2b.dll" Delete "$INSTDIR\gstreamer-plugins\gstcoreelements.dll" From a3207a570305f7e8ff9d8a3f0e15c94de119b78d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 12 Mar 2024 18:25:06 +0100 Subject: [PATCH 68/68] macgstcopy: Update gstreamer plugins list --- dist/macos/macgstcopy.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dist/macos/macgstcopy.sh b/dist/macos/macgstcopy.sh index 820a158a..b1b0a9ad 100755 --- a/dist/macos/macgstcopy.sh +++ b/dist/macos/macgstcopy.sh @@ -71,16 +71,14 @@ libgstasf libgstasfmux libgstaudioconvert libgstaudiofx -libgstaudiomixer libgstaudioparsers -libgstaudiorate libgstaudioresample -libgstaudiotestsrc libgstautodetect libgstbs2b libgstcdio libgstcoreelements libgstdash +libgstdsd libgstequalizer libgstfaac libgstfaad