From e45b9aabebee9ff957ad4ea05c09b1bb9ed87caa Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 28 Jul 2025 12:26:49 +0200 Subject: [PATCH] Add sort tags to context view --- src/settings/contextsettingspage.cpp | 6 ++++ src/settings/contextsettingspage.ui | 48 ++++++++++++++++++++++++++++ src/utilities/strutils.cpp | 18 +++++++++++ tests/src/utilities_test.cpp | 15 +++++++++ 4 files changed, 87 insertions(+) diff --git a/src/settings/contextsettingspage.cpp b/src/settings/contextsettingspage.cpp index 60f4144bc..6082bf502 100644 --- a/src/settings/contextsettingspage.cpp +++ b/src/settings/contextsettingspage.cpp @@ -64,15 +64,21 @@ ContextSettingsPage::ContextSettingsPage(SettingsDialog *dialog, QWidget *parent // Create and populate the helper menus QMenu *menu = new QMenu(this); menu->addAction(ui_->action_title); + menu->addAction(ui_->action_titlesort); menu->addAction(ui_->action_album); + menu->addAction(ui_->action_albumsort); menu->addAction(ui_->action_artist); + menu->addAction(ui_->action_artistsort); menu->addAction(ui_->action_albumartist); + menu->addAction(ui_->action_albumartistsort); menu->addAction(ui_->action_track); menu->addAction(ui_->action_disc); menu->addAction(ui_->action_year); menu->addAction(ui_->action_originalyear); menu->addAction(ui_->action_composer); + menu->addAction(ui_->action_composersort); menu->addAction(ui_->action_performer); + menu->addAction(ui_->action_performersort); menu->addAction(ui_->action_grouping); menu->addAction(ui_->action_filename); menu->addAction(ui_->action_url); diff --git a/src/settings/contextsettingspage.ui b/src/settings/contextsettingspage.ui index 7577f73e8..613392115 100644 --- a/src/settings/contextsettingspage.ui +++ b/src/settings/contextsettingspage.ui @@ -486,6 +486,54 @@ Add song original year tag + + + %artistsort% + + + Add song artistsort tag + + + + + %albumartistsort% + + + Add song albumartistsort tag + + + + + %titlesort% + + + Add song titlesort tag + + + + + %composersort% + + + Add song composersort tag + + + + + %performersort% + + + Add song performersort tag + + + + + %albumsort% + + + Add song albumsort tag + + diff --git a/src/utilities/strutils.cpp b/src/utilities/strutils.cpp index 1bc4b0022..5128eded2 100644 --- a/src/utilities/strutils.cpp +++ b/src/utilities/strutils.cpp @@ -142,15 +142,27 @@ QString ReplaceVariable(const QString &variable, const Song &song, const QString if (variable == "%title%"_L1) { value = song.PrettyTitle(); } + else if (variable == "%titlesort%"_L1) { + value = song.titlesort(); + } else if (variable == "%album%"_L1) { value = song.album(); } + else if (variable == "%albumsort%"_L1) { + value = song.albumsort(); + } else if (variable == "%artist%"_L1) { value = song.artist(); } + else if (variable == "%artistsort%"_L1) { + value = song.artistsort(); + } else if (variable == "%albumartist%"_L1) { value = song.effective_albumartist(); } + else if (variable == "%albumartistsort%"_L1) { + value = song.albumartistsort(); + } else if (variable == "%track%"_L1) { value.setNum(song.track()); } @@ -169,9 +181,15 @@ QString ReplaceVariable(const QString &variable, const Song &song, const QString else if (variable == "%composer%"_L1) { value = song.composer(); } + else if (variable == "%composersort%"_L1) { + value = song.composersort(); + } else if (variable == "%performer%"_L1) { value = song.performer(); } + else if (variable == "%performersort%"_L1) { + value = song.performersort(); + } else if (variable == "%grouping%"_L1) { value = song.grouping(); } diff --git a/tests/src/utilities_test.cpp b/tests/src/utilities_test.cpp index 58162d299..383b75e94 100644 --- a/tests/src/utilities_test.cpp +++ b/tests/src/utilities_test.cpp @@ -186,16 +186,22 @@ TEST(UtilitiesTest, ReplaceVariable) { Song song; song.set_title(Utilities::GetRandomStringWithChars(8)); + song.set_titlesort(Utilities::GetRandomStringWithChars(8)); song.set_album(Utilities::GetRandomStringWithChars(8)); + song.set_albumsort(Utilities::GetRandomStringWithChars(8)); song.set_artist(Utilities::GetRandomStringWithChars(8)); + song.set_artistsort(Utilities::GetRandomStringWithChars(8)); song.set_albumartist(Utilities::GetRandomStringWithChars(8)); + song.set_albumartistsort(Utilities::GetRandomStringWithChars(8)); song.set_track(5); song.set_disc(2); song.set_year(1999); song.set_originalyear(2000); song.set_genre(Utilities::GetRandomStringWithChars(8)); song.set_composer(Utilities::GetRandomStringWithChars(8)); + song.set_composersort(Utilities::GetRandomStringWithChars(8)); song.set_performer(Utilities::GetRandomStringWithChars(8)); + song.set_performersort(Utilities::GetRandomStringWithChars(8)); song.set_grouping(Utilities::GetRandomStringWithChars(8)); song.set_length_nanosec(900000000000); song.set_url(QUrl(u"file:///home/jonas/Music/test_song.flac"_s)); @@ -204,16 +210,22 @@ TEST(UtilitiesTest, ReplaceVariable) { song.set_rating(1.0); ASSERT_EQ(Utilities::ReplaceVariable(u"%title%"_s, song, ""_L1), song.title()); + ASSERT_EQ(Utilities::ReplaceVariable(u"%titlesort%"_s, song, ""_L1), song.titlesort()); ASSERT_EQ(Utilities::ReplaceVariable(u"%album%"_s, song, ""_L1), song.album()); + ASSERT_EQ(Utilities::ReplaceVariable(u"%albumsort%"_s, song, ""_L1), song.albumsort()); ASSERT_EQ(Utilities::ReplaceVariable(u"%artist%"_s, song, ""_L1), song.artist()); + ASSERT_EQ(Utilities::ReplaceVariable(u"%artistsort%"_s, song, ""_L1), song.artistsort()); ASSERT_EQ(Utilities::ReplaceVariable(u"%albumartist%"_s, song, ""_L1), song.effective_albumartist()); + ASSERT_EQ(Utilities::ReplaceVariable(u"%albumartistsort%"_s, song, ""_L1), song.albumartistsort()); ASSERT_EQ(Utilities::ReplaceVariable(u"%track%"_s, song, ""_L1), QString::number(song.track())); ASSERT_EQ(Utilities::ReplaceVariable(u"%disc%"_s, song, ""_L1), QString::number(song.disc())); ASSERT_EQ(Utilities::ReplaceVariable(u"%year%"_s, song, ""_L1), QString::number(song.year())); ASSERT_EQ(Utilities::ReplaceVariable(u"%originalyear%"_s, song, ""_L1), QString::number(song.originalyear())); ASSERT_EQ(Utilities::ReplaceVariable(u"%genre%"_s, song, ""_L1), song.genre()); ASSERT_EQ(Utilities::ReplaceVariable(u"%composer%"_s, song, ""_L1), song.composer()); + ASSERT_EQ(Utilities::ReplaceVariable(u"%composersort%"_s, song, ""_L1), song.composersort()); ASSERT_EQ(Utilities::ReplaceVariable(u"%performer%"_s, song, ""_L1), song.performer()); + ASSERT_EQ(Utilities::ReplaceVariable(u"%performersort%"_s, song, ""_L1), song.performersort()); ASSERT_EQ(Utilities::ReplaceVariable(u"%grouping%"_s, song, ""_L1), song.grouping()); ASSERT_EQ(Utilities::ReplaceVariable(u"%length%"_s, song, ""_L1), song.PrettyLength()); ASSERT_EQ(Utilities::ReplaceVariable(u"%filename%"_s, song, ""_L1), song.basefilename()); @@ -230,7 +242,9 @@ TEST(UtilitiesTest, ReplaceMessage) { song.set_title(Utilities::GetRandomStringWithChars(8)); song.set_album(Utilities::GetRandomStringWithChars(8)); song.set_artist(Utilities::GetRandomStringWithChars(8)); + song.set_artistsort(Utilities::GetRandomStringWithChars(8)); song.set_albumartist(Utilities::GetRandomStringWithChars(8)); + song.set_albumartistsort(Utilities::GetRandomStringWithChars(8)); song.set_track(5); song.set_disc(2); song.set_year(1999); @@ -246,6 +260,7 @@ TEST(UtilitiesTest, ReplaceMessage) { song.set_rating(1.0); ASSERT_EQ(Utilities::ReplaceMessage(u"%title% - %artist%"_s, song, ""_L1), song.title() + u" - "_s + song.artist()); + ASSERT_EQ(Utilities::ReplaceMessage(u"%artistsort% - %albumartistsort%"_s, song, ""_L1), song.artistsort() + u" - "_s + song.albumartistsort()); }