[packages/mixxx] - updated to 2.4.1; added patch for microsoft-gsl headers in subdir and conditional patch to allow t
qboosh
qboosh at pld-linux.org
Wed Sep 25 19:47:36 CEST 2024
commit 19e9101b07b57b2b19be0151a2a5c394fbf34acc
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Wed Sep 25 19:49:45 2024 +0200
- updated to 2.4.1; added patch for microsoft-gsl headers in subdir and conditional patch to allow taglib 2.0.x
mixxx-msgsl.patch | 20 ++++++
mixxx-taglib2.patch | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++
mixxx.spec | 92 ++++++++++++++------------
3 files changed, 253 insertions(+), 43 deletions(-)
---
diff --git a/mixxx.spec b/mixxx.spec
index 8e952a9..81285ee 100644
--- a/mixxx.spec
+++ b/mixxx.spec
@@ -1,3 +1,4 @@
+# TODO: system djinterop >= 0.20.2, shoutidjc >= 2.4.6?
#
# Conditional build:
%bcond_without faad # FAAD AAC audio decoder
@@ -5,22 +6,25 @@
%bcond_without hidapi # HID controller support
%bcond_without lv2 # LV2 support
%bcond_without qtkeychain # secure credentials storage for Live Broadcasting profiles (qt5 only, see below)
+%bcond_with taglib2 # allow Taglib 2 (not fully supported)
%bcond_without upower # UPower battery state support
%bcond_without wavpack # WavPack audio decoder
-%define qt5_ver 5.0
+%define qt5_ver 5.12
Summary: Mixxx - DJ tool
Summary(hu.UTF-8): Mixxx - DJ program
Summary(pl.UTF-8): Mixxx - narzędzie dla DJ-ów
Name: mixxx
-Version: 2.3.3
-Release: 4
+Version: 2.4.1
+Release: 1
License: GPL v2+ (code), Apache v2.0 (OpenSans font), Ubuntu Font License v1.0 (Ubuntu fonts)
Group: X11/Applications/Multimedia
Source0: https://github.com/mixxxdj/mixxx/archive/%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 486d370480980fa59613dd992bab312c
+# Source0-md5: 95d2cc0cb35b88164615a75d9466bc0f
Patch0: %{name}-build-type.patch
+Patch1: %{name}-taglib2.patch
+Patch2: %{name}-msgsl.patch
URL: https://mixxx.org/
BuildRequires: OpenGL-devel
BuildRequires: Qt5Concurrent-devel >= %{qt5_ver}
@@ -30,6 +34,8 @@ BuildRequires: Qt5Gui-devel >= %{qt5_ver}
%{?with_qtkeychain:BuildRequires: Qt5Keychain-devel}
BuildRequires: Qt5Network-devel >= %{qt5_ver}
BuildRequires: Qt5OpenGL-devel >= %{qt5_ver}
+BuildRequires: Qt5PrintSupport-devel >= %{qt5_ver}
+BuildRequires: Qt5Qml-devel >= %{qt5_ver}
BuildRequires: Qt5Script-devel >= %{qt5_ver}
BuildRequires: Qt5ScriptTools-devel >= %{qt5_ver}
BuildRequires: Qt5Sql-devel >= %{qt5_ver}
@@ -39,11 +45,12 @@ BuildRequires: Qt5Widgets-devel >= %{qt5_ver}
BuildRequires: Qt5X11Extras-devel >= %{qt5_ver}
BuildRequires: Qt5Xml-devel >= %{qt5_ver}
BuildRequires: cmake >= 3.16
-# libavcodec >= 58 libavformat >= 58 libavutil >= 56 libswresample >= 3.1
-%{?with_ffmpeg:BuildRequires: ffmpeg-devel >= 4.0}
+# libavcodec >= 58.35.100 libavformat >= 58.20.100 libavutil >= 56.22.100 libswresample >= 3.3.100
+%{?with_ffmpeg:BuildRequires: ffmpeg-devel >= 4.1.9}
BuildRequires: flac-devel
%{?with_upower:BuildRequires: glib2-devel >= 2.0}
-%{?with_hidapi:BuildRequires: hidapi-devel >= 0.10.1}
+BuildRequires: gtest-devel
+%{?with_hidapi:BuildRequires: hidapi-devel >= 0.11.2}
BuildRequires: lame-libs-devel
BuildRequires: libchromaprint-devel
BuildRequires: libebur128-devel
@@ -51,14 +58,16 @@ BuildRequires: libid3tag-devel
BuildRequires: libmad-devel
BuildRequires: libmodplug-devel
BuildRequires: libogg-devel
-BuildRequires: libkeyfinder-devel >= 2.2.6
+BuildRequires: libkeyfinder-devel >= 2.2.8
# TODO: use system package when appropriate version gets released
#BuildRequires: libshout-idjc-devel >= 2.4.6
BuildRequires: libsndfile-devel
-BuildRequires: libstdc++-devel >= 6:4.7
+# -std=c++20
+BuildRequires: libstdc++-devel >= 6:8
BuildRequires: libusb-devel >= 1.0
BuildRequires: libvorbis-devel
%{?with_lv2:BuildRequires: lilv-devel >= 0.5}
+BuildRequires: microsoft-gsl-devel
# or mpeg4ip (libmp4), but mp4v2 is preferred
%{?with_faad:BuildRequires: mp4v2-devel}
BuildRequires: openssl-devel
@@ -76,13 +85,21 @@ BuildRequires: rpmbuild(macros) >= 1.605
BuildRequires: sed >= 4.0
BuildRequires: soundtouch-devel >= 2.1.2
BuildRequires: sqlite3-devel >= 3
-BuildRequires: taglib-devel
+BuildRequires: taglib-devel >= 1.11
+%{!?with_taglib2:BuildRequires: taglib-devel < 2}
BuildRequires: udev-devel
%{?with_upower:BuildRequires: upower-devel}
%{?with_wavpack:BuildRequires: wavpack-devel}
BuildRequires: xorg-lib-libX11-devel
+# for local djinterop
+BuildRequires: zlib-devel >= 1.2.8
Requires: Qt5Sql-sqldriver-sqlite3 >= %{qt5_ver}
-%{?with_hidapi:Requires: hidapi >= 0.10.1}
+%{?with_ffmpeg:Requires: ffmpeg-libs >= 4.1.9}
+%{?with_hidapi:Requires: hidapi >= 0.11.2}
+Requires: libkeyfinder >= 2.2.8
+Requires: soundtouch >= 2.1.2
+Requires: taglib >= 1.11
+Requires: zlib >= 1.2.8
Obsoletes: mixxx-translations < 1.11.0-5
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -115,13 +132,12 @@ Podstawowe skórki dla programu Mixxx.
%prep
%setup -q
%patch0 -p1
-
-%{__sed} -i -e '1s,/usr/bin/env node,%{_bindir}/node,' \
- res/controllers/novation-launchpad/scripts/*.js
+%{?with_taglib2:%patch1 -p1}
+%patch2 -p1
%build
-#export QMAKE_CXX="%{__cxx}"
%cmake -B build \
+ -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON \
%{!?with_upower:-DBATTERY=OFF} \
%{!?with_faad:-DFAAD=OFF} \
%{!?with_ffmpeg:-DFFMPEG=OFF} \
@@ -141,33 +157,20 @@ rm -rf $RPM_BUILD_ROOT
# packaged as %doc
%{__rm} $RPM_BUILD_ROOT%{_docdir}/{COPYING,LICENSE,Mixxx-Keyboard-Shortcuts.pdf,README.md}
+# not used on Linux
+%{__rm} $RPM_BUILD_ROOT%{_iconsdir}/hicolor/scalable/apps/mixxx_macos.svg
-# what a mess...
-# both ca and ca-ES exist, both up to date, with few differences... keep ca
-%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_ca_ES.qm
-# both el and el_GR exist, the first is more complete
-%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_el_GR.qm
-# both es and es_ES exist, the first is outdated
+# both es and es_ES exist, the first is more outdated
%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{es_ES,es}.qm
-# both fr and fr_FR exist, the latter is outdated
-%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_fr_FR.qm
-# both he and he_IL exist, both look complete, the latter is more fresh(?)
-%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{he_IL,he}.qm
-# both it and it_IT exist, the first is unfinished
-%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{it_IT,it}.qm
-# both mi and mi_NZ exist, both are unfinished, the latter has outdated line pointers
-%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_mi_NZ.qm
-# both nl and nl_NL exist, the latter seems little better ("Quick Links" untrnaslated in the first)
-%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{nl_NL,nl}.qm
-# both pt and pt_PT exist, the first is outdated
+# both pt and pt_PT exist, the first is more outdated
%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{pt_PT,pt}.qm
-# both ru and ru_RU exist, the first seem more complete ("M3U Playlist...")
-%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_ru_RU.qm
-# both zh_TW and zh_TW.Big5 exist, thr latter is outdated
-%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_zh_TW.Big5.qm
# unify using short code
%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{hi_IN,hi}.qm
%{__mv} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_{sq_AL,sq}.qm
+# stick to per-country files
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_es_419.qm
+# which variant? zh_CN,zh_HK,zh_TW are also present
+%{__rm} $RPM_BUILD_ROOT%{_datadir}/mixxx/translations/mixxx_zh.qm
%clean
rm -rf $RPM_BUILD_ROOT
@@ -180,9 +183,8 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/metainfo/org.mixxx.Mixxx.metainfo.xml
%dir %{_datadir}/mixxx
%{_datadir}/mixxx/controllers
-#%{_datadir}/mixxx/fonts
+%{_datadir}/mixxx/effects
%{_datadir}/mixxx/keyboard
-%{_datadir}/mixxx/script
%dir %{_datadir}/mixxx/skins
%{_datadir}/mixxx/skins/*.qss
# This is the default skin
@@ -198,10 +200,17 @@ rm -rf $RPM_BUILD_ROOT
%lang(da) %{_datadir}/mixxx/translations/mixxx_da.qm
%lang(de) %{_datadir}/mixxx/translations/mixxx_de.qm
%lang(el) %{_datadir}/mixxx/translations/mixxx_el.qm
-%lang(en) %{_datadir}/mixxx/translations/mixxx_en_GB.qm
+%lang(en_CA) %{_datadir}/mixxx/translations/mixxx_en_CA.qm
+%lang(en_GB) %{_datadir}/mixxx/translations/mixxx_en_GB.qm
%lang(eo) %{_datadir}/mixxx/translations/mixxx_eo.qm
%lang(es) %{_datadir}/mixxx/translations/mixxx_es.qm
+%lang(es_AR) %{_datadir}/mixxx/translations/mixxx_es_AR.qm
+%lang(es_CO) %{_datadir}/mixxx/translations/mixxx_es_CO.qm
+%lang(es_CR) %{_datadir}/mixxx/translations/mixxx_es_CR.qm
+%lang(es_EC) %{_datadir}/mixxx/translations/mixxx_es_EC.qm
%lang(es_MX) %{_datadir}/mixxx/translations/mixxx_es_MX.qm
+%lang(es_PA) %{_datadir}/mixxx/translations/mixxx_es_PA.qm
+%lang(es_UY) %{_datadir}/mixxx/translations/mixxx_es_UY.qm
%lang(et) %{_datadir}/mixxx/translations/mixxx_et.qm
%lang(eu) %{_datadir}/mixxx/translations/mixxx_eu.qm
%lang(fa) %{_datadir}/mixxx/translations/mixxx_fa.qm
@@ -214,13 +223,11 @@ rm -rf $RPM_BUILD_ROOT
%lang(hr) %{_datadir}/mixxx/translations/mixxx_hr.qm
%lang(hu) %{_datadir}/mixxx/translations/mixxx_hu.qm
%lang(hy) %{_datadir}/mixxx/translations/mixxx_hy.qm
-%lang(ia) %{_datadir}/mixxx/translations/mixxx_ia.qm
%lang(id) %{_datadir}/mixxx/translations/mixxx_id.qm
%lang(is) %{_datadir}/mixxx/translations/mixxx_is.qm
%lang(it) %{_datadir}/mixxx/translations/mixxx_it.qm
%lang(ja) %{_datadir}/mixxx/translations/mixxx_ja.qm
%lang(ko) %{_datadir}/mixxx/translations/mixxx_ko.qm
-%lang(ky) %{_datadir}/mixxx/translations/mixxx_ky.qm
%lang(lb) %{_datadir}/mixxx/translations/mixxx_lb.qm
%lang(lt) %{_datadir}/mixxx/translations/mixxx_lt.qm
%lang(lv) %{_datadir}/mixxx/translations/mixxx_lv.qm
@@ -233,7 +240,6 @@ rm -rf $RPM_BUILD_ROOT
%lang(my) %{_datadir}/mixxx/translations/mixxx_my.qm
%lang(nb) %{_datadir}/mixxx/translations/mixxx_nb.qm
%lang(nl) %{_datadir}/mixxx/translations/mixxx_nl.qm
-%lang(nl_BE) %{_datadir}/mixxx/translations/mixxx_nl_BE.qm
%lang(nn) %{_datadir}/mixxx/translations/mixxx_nn.qm
%lang(oc) %{_datadir}/mixxx/translations/mixxx_oc.qm
%lang(pl) %{_datadir}/mixxx/translations/mixxx_pl.qm
@@ -248,7 +254,6 @@ rm -rf $RPM_BUILD_ROOT
%lang(sq) %{_datadir}/mixxx/translations/mixxx_sq.qm
%lang(sr) %{_datadir}/mixxx/translations/mixxx_sr.qm
%lang(sv) %{_datadir}/mixxx/translations/mixxx_sv.qm
-%lang(ta) %{_datadir}/mixxx/translations/mixxx_ta.qm
%lang(te) %{_datadir}/mixxx/translations/mixxx_te.qm
%lang(tr) %{_datadir}/mixxx/translations/mixxx_tr.qm
%lang(uk) %{_datadir}/mixxx/translations/mixxx_uk.qm
@@ -266,6 +271,7 @@ rm -rf $RPM_BUILD_ROOT
# note: "?" is used to catch spaces (I can't see any way to match space explicitly in rpm)
%{_datadir}/mixxx/skins/Deere?(64?Samplers)
%{_datadir}/mixxx/skins/LateNight
+%{_datadir}/mixxx/skins/LateNight?(64?Samplers)
%{_datadir}/mixxx/skins/Shade
%{_datadir}/mixxx/skins/Tango
%{_datadir}/mixxx/skins/Tango?(64?Samplers)
diff --git a/mixxx-msgsl.patch b/mixxx-msgsl.patch
new file mode 100644
index 0000000..9c0108d
--- /dev/null
+++ b/mixxx-msgsl.patch
@@ -0,0 +1,20 @@
+--- mixxx-2.4.1/CMakeLists.txt.orig 2024-05-08 23:05:56.000000000 +0200
++++ mixxx-2.4.1/CMakeLists.txt 2024-09-25 18:27:13.893167991 +0200
+@@ -1754,7 +1754,7 @@ endif()
+ # src/qmldlgpreferencesproxy.h, which is #included from src/qmlapplication.h.
+ target_include_directories(mixxx PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/mixxx-lib_autogen/include")
+ set_target_properties(mixxx-lib PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY}")
+-target_link_libraries(mixxx PRIVATE mixxx-lib mixxx-gitinfostore)
++target_link_libraries(mixxx PRIVATE mixxx-lib mixxx-gitinfostore Microsoft.GSL::GSL)
+
+ #
+ # Installation and Packaging
+@@ -2106,7 +2106,7 @@ add_executable(mixxx-test
+ target_precompile_headers(mixxx-test REUSE_FROM mixxx-lib)
+ find_package(GTest CONFIG REQUIRED)
+ set_target_properties(mixxx-test PROPERTIES AUTOMOC ON)
+-target_link_libraries(mixxx-test PRIVATE mixxx-lib mixxx-gitinfostore GTest::gtest GTest::gmock)
++target_link_libraries(mixxx-test PRIVATE mixxx-lib mixxx-gitinfostore GTest::gtest GTest::gmock Microsoft.GSL::GSL)
+
+ find_package(benchmark)
+ target_link_libraries(mixxx-test PRIVATE benchmark::benchmark)
diff --git a/mixxx-taglib2.patch b/mixxx-taglib2.patch
new file mode 100644
index 0000000..4f976b6
--- /dev/null
+++ b/mixxx-taglib2.patch
@@ -0,0 +1,184 @@
+From dffb164606ee15b320d8f457e96683aa497682ab Mon Sep 17 00:00:00 2001
+From: Jan Holthuis <jholthuis at mixxx.org>
+Date: Sun, 11 Feb 2024 21:43:28 +0100
+Subject: [PATCH] build: Print a warning instead of aborting build if TagLib
+ 2.0 is used
+
+---
+ CMakeLists.txt | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ba6fd58918c..276dcc1f751 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -2951,11 +2951,7 @@ target_link_libraries(mixxx-lib PRIVATE
+ find_package(TagLib 1.11 REQUIRED)
+ target_link_libraries(mixxx-lib PUBLIC TagLib::TagLib)
+ if (NOT TagLib_VERSION VERSION_LESS 2.0.0)
+- message(FATAL_ERROR "Installed Taglib ${TagLib_VERSION} is not supported. Use Version >= 1.11 and < 2.0 and its development headers.")
+- # Dear package maintainer: Do not patch away this fatal error
+- # using taglib 2.0.0 will put user data at risk!!
+- # Mixxx is a complex application that needs to be adapted and tested thoroughly
+- # https://github.com/mixxxdj/mixxx/issues/12708
++ message(WARNING "Installed Taglib ${TagLib_VERSION} is not supported and might lead to data loss (https://github.com/mixxxdj/mixxx/issues/12708). Use version >= 1.11 and < 2.0 instead.")
+ endif()
+
+ # Threads
+From ed547fd2b0f9dee98740fcf32c1307a092470322 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= <daschuer at mixxx.org>
+Date: Tue, 20 Feb 2024 22:59:18 +0100
+Subject: [PATCH 1/3] Add multi value protection for all muti-value tags: (Add
+ title album and comment as well)
+
+---
+ src/track/taglib/trackmetadata_common.cpp | 24 +++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/src/track/taglib/trackmetadata_common.cpp b/src/track/taglib/trackmetadata_common.cpp
+index 77c84f41bbd..e4609bc0558 100644
+--- a/src/track/taglib/trackmetadata_common.cpp
++++ b/src/track/taglib/trackmetadata_common.cpp
+@@ -274,20 +274,25 @@ void exportTrackMetadataIntoTag(
+ WriteTagMask writeMask) {
+ DEBUG_ASSERT(pTag); // already validated before
+
+- pTag->setTitle(toTString(trackMetadata.getTrackInfo().getTitle()));
+- pTag->setAlbum(toTString(trackMetadata.getAlbumInfo().getTitle()));
+-
+ // The mapping of multi-valued fields in TagLib is not bijective.
+ // We don't want to overwrite existing values if the corresponding
+- // field has not been modified in Mixxx. This workaround only covers
+- // the most common multi-valued fields.
++ // field has not been modified in Mixxx.
+ //
+ // See also: <https://github.com/mixxxdj/mixxx/issues/12587>
+- const auto artist = toTString(trackMetadata.getTrackInfo().getArtist());
++
++ const TagLib::String title = toTString(trackMetadata.getTrackInfo().getTitle());
++ if (title != pTag->title()) {
++ pTag->setTitle(title);
++ }
++ const TagLib::String album = toTString(trackMetadata.getAlbumInfo().getTitle());
++ if (album != pTag->album()) {
++ pTag->setAlbum(album);
++ }
++ const TagLib::String artist = toTString(trackMetadata.getTrackInfo().getArtist());
+ if (artist != pTag->artist()) {
+ pTag->setArtist(artist);
+ }
+- const auto genre = toTString(trackMetadata.getTrackInfo().getGenre());
++ const TagLib::String genre = toTString(trackMetadata.getTrackInfo().getGenre());
+ if (genre != pTag->genre()) {
+ pTag->setGenre(genre);
+ }
+@@ -297,7 +302,10 @@ void exportTrackMetadataIntoTag(
+ // different purposes, e.g. ID3v2. In this case setting the
+ // comment here should be omitted.
+ if (0 == (writeMask & WriteTagFlag::OmitComment)) {
+- pTag->setComment(toTString(trackMetadata.getTrackInfo().getComment()));
++ const TagLib::String comment = toTString(trackMetadata.getTrackInfo().getComment());
++ if (comment != pTag->comment()) {
++ pTag->setComment(comment);
++ }
+ }
+
+ // Specialized write functions for tags derived from Taglib::Tag might
+
+From c052808ca4b27050e99ce9fab9f0b53e90377eed Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= <daschuer at mixxx.org>
+Date: Tue, 20 Feb 2024 23:01:18 +0100
+Subject: [PATCH 2/3] Introduce isMultiValueTagEqual() that compares in the
+ QString domain to sort out encoding issues.
+
+---
+ src/track/taglib/trackmetadata_common.cpp | 30 +++++++++++------------
+ 1 file changed, 14 insertions(+), 16 deletions(-)
+
+diff --git a/src/track/taglib/trackmetadata_common.cpp b/src/track/taglib/trackmetadata_common.cpp
+index e4609bc0558..fffa9f8170a 100644
+--- a/src/track/taglib/trackmetadata_common.cpp
++++ b/src/track/taglib/trackmetadata_common.cpp
+@@ -268,6 +268,10 @@ void importTrackMetadataFromTag(
+ }
+ }
+
++bool isMultiValueTagEqual(const TagLib::String& taglibVal, const QString& mixxxVal) {
++ return toQString(taglibVal) == mixxxVal;
++}
++
+ void exportTrackMetadataIntoTag(
+ TagLib::Tag* pTag,
+ const TrackMetadata& trackMetadata,
+@@ -279,22 +283,17 @@ void exportTrackMetadataIntoTag(
+ // field has not been modified in Mixxx.
+ //
+ // See also: <https://github.com/mixxxdj/mixxx/issues/12587>
+-
+- const TagLib::String title = toTString(trackMetadata.getTrackInfo().getTitle());
+- if (title != pTag->title()) {
+- pTag->setTitle(title);
++ if (!isMultiValueTagEqual(pTag->title(), trackMetadata.getTrackInfo().getTitle())) {
++ pTag->setTitle(toTString(trackMetadata.getTrackInfo().getTitle()));
+ }
+- const TagLib::String album = toTString(trackMetadata.getAlbumInfo().getTitle());
+- if (album != pTag->album()) {
+- pTag->setAlbum(album);
++ if (!isMultiValueTagEqual(pTag->album(), trackMetadata.getAlbumInfo().getTitle())) {
++ pTag->setAlbum(toTString(trackMetadata.getAlbumInfo().getTitle()));
+ }
+- const TagLib::String artist = toTString(trackMetadata.getTrackInfo().getArtist());
+- if (artist != pTag->artist()) {
+- pTag->setArtist(artist);
++ if (!isMultiValueTagEqual(pTag->artist(), trackMetadata.getTrackInfo().getArtist())) {
++ pTag->setArtist(toTString(trackMetadata.getTrackInfo().getArtist()));
+ }
+- const TagLib::String genre = toTString(trackMetadata.getTrackInfo().getGenre());
+- if (genre != pTag->genre()) {
+- pTag->setGenre(genre);
++ if (!isMultiValueTagEqual(pTag->genre(), trackMetadata.getTrackInfo().getGenre())) {
++ pTag->setGenre(toTString(trackMetadata.getTrackInfo().getGenre()));
+ }
+
+ // Using setComment() from TagLib::Tag might have undesirable
+@@ -302,9 +301,8 @@ void exportTrackMetadataIntoTag(
+ // different purposes, e.g. ID3v2. In this case setting the
+ // comment here should be omitted.
+ if (0 == (writeMask & WriteTagFlag::OmitComment)) {
+- const TagLib::String comment = toTString(trackMetadata.getTrackInfo().getComment());
+- if (comment != pTag->comment()) {
+- pTag->setComment(comment);
++ if (!isMultiValueTagEqual(pTag->comment(), trackMetadata.getTrackInfo().getComment())) {
++ pTag->setComment(toTString(trackMetadata.getTrackInfo().getComment()));
+ }
+ }
+
+
+From c4b3a7e91c56cea7f9bd1c18c1fe01d9da705144 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= <daschuer at mixxx.org>
+Date: Wed, 21 Feb 2024 00:00:06 +0100
+Subject: [PATCH 3/3] Ignore separator " / " when comparing multi value tags
+
+---
+ src/track/taglib/trackmetadata_common.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/track/taglib/trackmetadata_common.cpp b/src/track/taglib/trackmetadata_common.cpp
+index fffa9f8170a..62bb583f5a2 100644
+--- a/src/track/taglib/trackmetadata_common.cpp
++++ b/src/track/taglib/trackmetadata_common.cpp
+@@ -268,8 +268,12 @@ void importTrackMetadataFromTag(
+ }
+ }
+
+-bool isMultiValueTagEqual(const TagLib::String& taglibVal, const QString& mixxxVal) {
+- return toQString(taglibVal) == mixxxVal;
++bool isMultiValueTagEqual(const TagLib::String& taglibVal, QString mixxxVal) {
++ // Taglib 2 uses " / " instead of " " as a multi value separator.
++ // We may have read or write with either TagLib 1 or 2.
++ QString taglibValStripped = toQString(taglibVal).remove(" /");
++ QString mixxxValStripped = mixxxVal.remove(" /");
++ return taglibValStripped == mixxxValStripped;
+ }
+
+ void exportTrackMetadataIntoTag(
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mixxx.git/commitdiff/19e9101b07b57b2b19be0151a2a5c394fbf34acc
More information about the pld-cvs-commit
mailing list