diff --git a/src/libs/database/impl/Release.cpp b/src/libs/database/impl/Release.cpp index 75810ff3..ff37fe94 100644 --- a/src/libs/database/impl/Release.cpp +++ b/src/libs/database/impl/Release.cpp @@ -45,7 +45,8 @@ namespace lms::db if (params.sortMethod == ReleaseSortMethod::ArtistNameThenName || params.sortMethod == ReleaseSortMethod::LastWritten - || params.sortMethod == ReleaseSortMethod::Date + || params.sortMethod == ReleaseSortMethod::DateAsc + || params.sortMethod == ReleaseSortMethod::DateDesc || params.sortMethod == ReleaseSortMethod::OriginalDate || params.sortMethod == ReleaseSortMethod::OriginalDateDesc || params.writtenAfter.isValid() @@ -189,8 +190,11 @@ namespace lms::db case ReleaseSortMethod::LastWritten: query.orderBy("t.file_last_write DESC"); break; - case ReleaseSortMethod::Date: - query.orderBy("COALESCE(t.date, CAST(t.year AS TEXT)), r.name COLLATE NOCASE"); + case ReleaseSortMethod::DateAsc: + query.orderBy("COALESCE(t.date, CAST(t.year AS TEXT)) ASC, r.name COLLATE NOCASE"); + break; + case ReleaseSortMethod::DateDesc: + query.orderBy("COALESCE(t.date, CAST(t.year AS TEXT)) DESC, r.name COLLATE NOCASE"); break; case ReleaseSortMethod::OriginalDate: query.orderBy("COALESCE(original_date, CAST(original_year AS TEXT), date, CAST(year AS TEXT)), r.name COLLATE NOCASE"); diff --git a/src/libs/database/include/database/Types.hpp b/src/libs/database/include/database/Types.hpp index a6c323c8..4c330313 100644 --- a/src/libs/database/include/database/Types.hpp +++ b/src/libs/database/include/database/Types.hpp @@ -129,7 +129,8 @@ namespace lms::db Id, Name, ArtistNameThenName, - Date, + DateAsc, + DateDesc, OriginalDate, OriginalDateDesc, Random, diff --git a/src/libs/database/test/Release.cpp b/src/libs/database/test/Release.cpp index c0b7cb48..eb17c6fb 100644 --- a/src/libs/database/test/Release.cpp +++ b/src/libs/database/test/Release.cpp @@ -849,12 +849,21 @@ namespace lms::db::tests { auto transaction{ session.createReadTransaction() }; - const auto releases{ Release::findIds(session, Release::FindParameters{}.setSortMethod(ReleaseSortMethod::Date)) }; + const auto releases{ Release::findIds(session, Release::FindParameters{}.setSortMethod(ReleaseSortMethod::DateAsc)) }; ASSERT_EQ(releases.results.size(), 2); EXPECT_EQ(releases.results.front(), release2.getId()); EXPECT_EQ(releases.results.back(), release1.getId()); } + { + auto transaction{ session.createReadTransaction() }; + + const auto releases{ Release::findIds(session, Release::FindParameters{}.setSortMethod(ReleaseSortMethod::DateDesc)) }; + ASSERT_EQ(releases.results.size(), 2); + EXPECT_EQ(releases.results.front(), release1.getId()); + EXPECT_EQ(releases.results.back(), release2.getId()); + } + { auto transaction{ session.createReadTransaction() }; diff --git a/src/libs/subsonic/impl/entrypoints/AlbumSongLists.cpp b/src/libs/subsonic/impl/entrypoints/AlbumSongLists.cpp index 00245248..59d6966c 100644 --- a/src/libs/subsonic/impl/entrypoints/AlbumSongLists.cpp +++ b/src/libs/subsonic/impl/entrypoints/AlbumSongLists.cpp @@ -104,9 +104,9 @@ namespace lms::api::subsonic const int toYear{ getMandatoryParameterAs(context.parameters, "toYear") }; Release::FindParameters params; - params.setSortMethod(ReleaseSortMethod::Date); + params.setSortMethod(fromYear > toYear ? ReleaseSortMethod::DateDesc : ReleaseSortMethod::DateAsc); params.setRange(range); - params.setDateRange(DateRange::fromYearRange(fromYear, toYear)); + params.setDateRange(DateRange::fromYearRange(std::min(fromYear, toYear), std::max(fromYear, toYear))); params.setMediaLibrary(mediaLibraryId); releases = Release::findIds(context.dbSession, params);