commit 19e9101b07b57b2b19be0151a2a5c394fbf34acc Author: Jakub Bogusz <qbo...@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 <jholth...@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?= <dasch...@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?= <dasch...@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?= <dasch...@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 _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit