From f485c3a05239c1256aa1dd4ab67b3fb4a36347d2 Mon Sep 17 00:00:00 2001 From: casey langen Date: Thu, 9 Jan 2020 15:17:01 -0800 Subject: [PATCH] Fixed some minor sorting and grouping issues. --- .../library/query/local/CategoryTrackListQuery.cpp | 3 ++- src/core/library/query/local/CategoryTrackListQuery.h | 1 + src/core/library/query/local/SearchTrackListQuery.cpp | 3 ++- src/core/library/query/local/SearchTrackListQuery.h | 1 + src/core/library/query/local/util/TrackSort.h | 11 ++++++++++- 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/core/library/query/local/CategoryTrackListQuery.cpp b/src/core/library/query/local/CategoryTrackListQuery.cpp index 6b6f7f1d4..d5f2c3d33 100755 --- a/src/core/library/query/local/CategoryTrackListQuery.cpp +++ b/src/core/library/query/local/CategoryTrackListQuery.cpp @@ -106,6 +106,7 @@ CategoryTrackListQuery::CategoryTrackListQuery( } this->orderBy = "ORDER BY " + kTrackListSortOrderBy.find(sortType)->second; + this->parseHeaders = kTrackSortTypeWithAlbumGrouping.find(sortType) != kTrackSortTypeWithAlbumGrouping.end(); } CategoryTrackListQuery::~CategoryTrackListQuery() { @@ -170,7 +171,7 @@ void CategoryTrackListQuery::ProcessResult(musik::core::db::Statement& trackQuer int64_t id = trackQuery.ColumnInt64(0); std::string album = trackQuery.ColumnText(1); - if (album != lastAlbum) { + if (this->parseHeaders && album != lastAlbum) { headers->insert(index); lastAlbum = album; } diff --git a/src/core/library/query/local/CategoryTrackListQuery.h b/src/core/library/query/local/CategoryTrackListQuery.h index e85de078c..2cc49c525 100755 --- a/src/core/library/query/local/CategoryTrackListQuery.h +++ b/src/core/library/query/local/CategoryTrackListQuery.h @@ -90,6 +90,7 @@ namespace musik { namespace core { namespace db { namespace local { void ProcessResult(musik::core::db::Statement& stmt); musik::core::ILibraryPtr library; + bool parseHeaders; Result result; Headers headers; Type type; diff --git a/src/core/library/query/local/SearchTrackListQuery.cpp b/src/core/library/query/local/SearchTrackListQuery.cpp index b64e4ef44..e791e403c 100755 --- a/src/core/library/query/local/SearchTrackListQuery.cpp +++ b/src/core/library/query/local/SearchTrackListQuery.cpp @@ -69,6 +69,7 @@ SearchTrackListQuery::SearchTrackListQuery( this->orderByPredicate = kTrackSearchSortOrderByPredicate.find(sort)->second + " AND "; } + this->parseHeaders = kTrackSortTypeWithAlbumGrouping.find(sort) != kTrackSortTypeWithAlbumGrouping.end(); this->displayString = _TSTR(kTrackListOrderByToDisplayKey.find(sort)->second); this->orderBy = kTrackListSortOrderBy.find(sort)->second; this->result.reset(new musik::core::TrackList(library)); @@ -152,7 +153,7 @@ bool SearchTrackListQuery::OnRun(Connection& db) { album = _TSTR("tracklist_unknown_album"); } - if (album != lastAlbum) { + if (this->parseHeaders && album != lastAlbum) { headers->insert(index); lastAlbum = album; } diff --git a/src/core/library/query/local/SearchTrackListQuery.h b/src/core/library/query/local/SearchTrackListQuery.h index 592dc2a5b..3df0f51f6 100755 --- a/src/core/library/query/local/SearchTrackListQuery.h +++ b/src/core/library/query/local/SearchTrackListQuery.h @@ -63,6 +63,7 @@ namespace musik { namespace core { namespace db { namespace local { musik::core::ILibraryPtr library; Result result; Headers headers; + bool parseHeaders; std::string filter; std::string orderBy; std::string orderByPredicate; diff --git a/src/core/library/query/local/util/TrackSort.h b/src/core/library/query/local/util/TrackSort.h index 7eeb441ca..fa190c67c 100644 --- a/src/core/library/query/local/util/TrackSort.h +++ b/src/core/library/query/local/util/TrackSort.h @@ -75,7 +75,7 @@ namespace musik { }; static const std::map kTrackListSortOrderBy = { - { TrackSortType::Title, "track, ar.name, al.name" }, + { TrackSortType::Title, "tracks.title, ar.name, al.name" }, { TrackSortType::Album, "al.name, disc, track, ar.name" }, { TrackSortType::Artist, "ar.name, al.name, disc, track" }, { TrackSortType::DateAddedAsc, "date(tracks.date_added) ASC, al.name, disc, track, ar.name" }, @@ -100,6 +100,15 @@ namespace musik { { TrackSortType::PlayCountDesc, "tracks.play_count IS NOT NULL AND tracks.play_count > 0" }, }; + static const std::set kTrackSortTypeWithAlbumGrouping = { + TrackSortType::Album, + TrackSortType::Artist, + TrackSortType::DateAddedAsc, + TrackSortType::DateAddedDesc, + TrackSortType::DateUpdatedAsc, + TrackSortType::DateUpdatedDesc, + TrackSortType::Genre, + }; } } }