From d19d6f04b28d6090149cfcd5e79060843cce1642 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 22 Feb 2025 19:57:06 +0100 Subject: [PATCH] Use album sort order in UI, fixes #616 --- src/libs/database/impl/Artist.cpp | 1 - src/libs/database/impl/Release.cpp | 3 +++ src/libs/database/impl/Session.cpp | 2 ++ src/libs/database/include/database/Types.hpp | 1 + .../scanner/impl/scanners/AudioFileScanner.cpp | 11 +++++++---- src/lms/ui/explore/ReleaseCollector.cpp | 2 +- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libs/database/impl/Artist.cpp b/src/libs/database/impl/Artist.cpp index 7a61591a..5e8e9b76 100644 --- a/src/libs/database/impl/Artist.cpp +++ b/src/libs/database/impl/Artist.cpp @@ -205,7 +205,6 @@ namespace lms::db : _mbid{ mbid ? mbid->getAsString() : "" } { setName(name); - _sortName = _name; } Artist::pointer Artist::create(Session& session, const std::string& name, const std::optional& mbid) diff --git a/src/libs/database/impl/Release.cpp b/src/libs/database/impl/Release.cpp index 142fbfe0..574a9401 100644 --- a/src/libs/database/impl/Release.cpp +++ b/src/libs/database/impl/Release.cpp @@ -218,6 +218,9 @@ namespace lms::db case ReleaseSortMethod::Name: query.orderBy("r.name COLLATE NOCASE"); break; + case ReleaseSortMethod::SortName: + query.orderBy("r.sort_name COLLATE NOCASE"); + break; case ReleaseSortMethod::ArtistNameThenName: query.orderBy("a.name COLLATE NOCASE, r.name COLLATE NOCASE"); break; diff --git a/src/libs/database/impl/Session.cpp b/src/libs/database/impl/Session.cpp index 4127c4c4..8eeb58ac 100644 --- a/src/libs/database/impl/Session.cpp +++ b/src/libs/database/impl/Session.cpp @@ -239,6 +239,8 @@ namespace lms::db utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_mbid_idx ON release(mbid)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_name_idx ON release(name)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_name_nocase_idx ON release(name COLLATE NOCASE)"); + utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_sort_name_idx ON release(sort_name)"); + utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_sort_name_nocase_idx ON release(sort_name COLLATE NOCASE)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_type_id_idx ON release_type(id)"); utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_type_name_idx ON release_type(name COLLATE NOCASE)"); diff --git a/src/libs/database/include/database/Types.hpp b/src/libs/database/include/database/Types.hpp index e139062f..8cc556b6 100644 --- a/src/libs/database/include/database/Types.hpp +++ b/src/libs/database/include/database/Types.hpp @@ -147,6 +147,7 @@ namespace lms::db None, Id, Name, + SortName, ArtistNameThenName, DateAsc, DateDesc, diff --git a/src/libs/services/scanner/impl/scanners/AudioFileScanner.cpp b/src/libs/services/scanner/impl/scanners/AudioFileScanner.cpp index 21c7c7e9..c22370cf 100644 --- a/src/libs/services/scanner/impl/scanners/AudioFileScanner.cpp +++ b/src/libs/services/scanner/impl/scanners/AudioFileScanner.cpp @@ -55,8 +55,8 @@ namespace lms::scanner if (artistInfo.mbid) artist.modify()->setMBID(artistInfo.mbid); - if (artistInfo.sortName) - artist.modify()->setSortName(*artistInfo.sortName); + + artist.modify()->setSortName(artistInfo.sortName ? *artistInfo.sortName : artistInfo.name); return artist; } @@ -163,8 +163,11 @@ namespace lms::scanner { if (release->getName() != releaseInfo.name) release.modify()->setName(releaseInfo.name); - if (release->getSortName() != releaseInfo.sortName) - release.modify()->setSortName(releaseInfo.sortName); + { + std::string_view sortName{ !releaseInfo.sortName.empty() ? releaseInfo.sortName : releaseInfo.name }; + if (release->getSortName() != sortName) + release.modify()->setSortName(sortName); + } if (release->getGroupMBID() != releaseInfo.groupMBID) release.modify()->setGroupMBID(releaseInfo.groupMBID); if (release->getTotalDisc() != releaseInfo.mediumCount) diff --git a/src/lms/ui/explore/ReleaseCollector.cpp b/src/lms/ui/explore/ReleaseCollector.cpp index e678f321..828b38d3 100644 --- a/src/lms/ui/explore/ReleaseCollector.cpp +++ b/src/lms/ui/explore/ReleaseCollector.cpp @@ -117,7 +117,7 @@ namespace lms::ui { Release::FindParameters params; params.setFilters(getDbFilters()); - params.setSortMethod(ReleaseSortMethod::Name); + params.setSortMethod(ReleaseSortMethod::SortName); params.setKeywords(getSearchKeywords()); params.setRange(range);