Support fromYear > lastYear to sort by descending order. fixes #482
This commit is contained in:
@@ -45,7 +45,8 @@ namespace lms::db
|
|||||||
|
|
||||||
if (params.sortMethod == ReleaseSortMethod::ArtistNameThenName
|
if (params.sortMethod == ReleaseSortMethod::ArtistNameThenName
|
||||||
|| params.sortMethod == ReleaseSortMethod::LastWritten
|
|| params.sortMethod == ReleaseSortMethod::LastWritten
|
||||||
|| params.sortMethod == ReleaseSortMethod::Date
|
|| params.sortMethod == ReleaseSortMethod::DateAsc
|
||||||
|
|| params.sortMethod == ReleaseSortMethod::DateDesc
|
||||||
|| params.sortMethod == ReleaseSortMethod::OriginalDate
|
|| params.sortMethod == ReleaseSortMethod::OriginalDate
|
||||||
|| params.sortMethod == ReleaseSortMethod::OriginalDateDesc
|
|| params.sortMethod == ReleaseSortMethod::OriginalDateDesc
|
||||||
|| params.writtenAfter.isValid()
|
|| params.writtenAfter.isValid()
|
||||||
@@ -189,8 +190,11 @@ namespace lms::db
|
|||||||
case ReleaseSortMethod::LastWritten:
|
case ReleaseSortMethod::LastWritten:
|
||||||
query.orderBy("t.file_last_write DESC");
|
query.orderBy("t.file_last_write DESC");
|
||||||
break;
|
break;
|
||||||
case ReleaseSortMethod::Date:
|
case ReleaseSortMethod::DateAsc:
|
||||||
query.orderBy("COALESCE(t.date, CAST(t.year AS TEXT)), r.name COLLATE NOCASE");
|
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;
|
break;
|
||||||
case ReleaseSortMethod::OriginalDate:
|
case ReleaseSortMethod::OriginalDate:
|
||||||
query.orderBy("COALESCE(original_date, CAST(original_year AS TEXT), date, CAST(year AS TEXT)), r.name COLLATE NOCASE");
|
query.orderBy("COALESCE(original_date, CAST(original_year AS TEXT), date, CAST(year AS TEXT)), r.name COLLATE NOCASE");
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ namespace lms::db
|
|||||||
Id,
|
Id,
|
||||||
Name,
|
Name,
|
||||||
ArtistNameThenName,
|
ArtistNameThenName,
|
||||||
Date,
|
DateAsc,
|
||||||
|
DateDesc,
|
||||||
OriginalDate,
|
OriginalDate,
|
||||||
OriginalDateDesc,
|
OriginalDateDesc,
|
||||||
Random,
|
Random,
|
||||||
|
|||||||
@@ -849,12 +849,21 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
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);
|
ASSERT_EQ(releases.results.size(), 2);
|
||||||
EXPECT_EQ(releases.results.front(), release2.getId());
|
EXPECT_EQ(releases.results.front(), release2.getId());
|
||||||
EXPECT_EQ(releases.results.back(), release1.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() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
|
|||||||
@@ -104,9 +104,9 @@ namespace lms::api::subsonic
|
|||||||
const int toYear{ getMandatoryParameterAs<int>(context.parameters, "toYear") };
|
const int toYear{ getMandatoryParameterAs<int>(context.parameters, "toYear") };
|
||||||
|
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setSortMethod(ReleaseSortMethod::Date);
|
params.setSortMethod(fromYear > toYear ? ReleaseSortMethod::DateDesc : ReleaseSortMethod::DateAsc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setDateRange(DateRange::fromYearRange(fromYear, toYear));
|
params.setDateRange(DateRange::fromYearRange(std::min(fromYear, toYear), std::max(fromYear, toYear)));
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
|
|||||||
Reference in New Issue
Block a user