Sorting by recently added now uses the 'added' info instead of the 'last write time' of the underlying file, ref #571

This commit is contained in:
emeric
2025-01-21 16:47:57 +01:00
parent 6f214f839e
commit 07e120abf2
13 changed files with 262 additions and 19 deletions
+9 -5
View File
@@ -42,9 +42,9 @@ namespace lms::db
{
session.checkReadTransaction();
// TODO remove distinct and use group by
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " FROM artist a") };
if (params.sortMethod == ArtistSortMethod::LastWritten
if (params.sortMethod == ArtistSortMethod::LastWrittenDesc
|| params.sortMethod == ArtistSortMethod::AddedDesc
|| params.writtenAfter.isValid()
|| params.linkType
|| params.track.isValid()
@@ -55,7 +55,8 @@ namespace lms::db
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
}
if (params.sortMethod == ArtistSortMethod::LastWritten
if (params.sortMethod == ArtistSortMethod::LastWrittenDesc
|| params.sortMethod == ArtistSortMethod::AddedDesc
|| params.writtenAfter.isValid()
|| params.release.isValid()
|| params.mediaLibrary.isValid())
@@ -151,8 +152,11 @@ namespace lms::db
case ArtistSortMethod::Random:
query.orderBy("RANDOM()");
break;
case ArtistSortMethod::LastWritten:
query.orderBy("t.file_last_write DESC");
case ArtistSortMethod::LastWrittenDesc:
query.orderBy("MAX(t.file_last_write) DESC");
break;
case ArtistSortMethod::AddedDesc:
query.orderBy("MAX(t.file_added) DESC");
break;
case ArtistSortMethod::StarredDateDesc:
assert(params.starringUser.isValid());
+3
View File
@@ -48,9 +48,12 @@ namespace lms::db
{
prepare();
}
~Connection() override = default;
private:
Connection& operator=(const Connection&) = delete;
Connection(Connection&&) = delete;
Connection&& operator=(Connection&&) = delete;
std::unique_ptr<SqlConnection> clone() const override
{
+6 -2
View File
@@ -50,7 +50,8 @@ namespace lms::db
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " from release r") };
if (params.sortMethod == ReleaseSortMethod::ArtistNameThenName
|| params.sortMethod == ReleaseSortMethod::LastWritten
|| params.sortMethod == ReleaseSortMethod::LastWrittenDesc
|| params.sortMethod == ReleaseSortMethod::AddedDesc
|| params.sortMethod == ReleaseSortMethod::DateAsc
|| params.sortMethod == ReleaseSortMethod::DateDesc
|| params.sortMethod == ReleaseSortMethod::OriginalDate
@@ -207,9 +208,12 @@ namespace lms::db
case ReleaseSortMethod::Random:
query.orderBy("RANDOM()");
break;
case ReleaseSortMethod::LastWritten:
case ReleaseSortMethod::LastWrittenDesc:
query.orderBy("t.file_last_write DESC");
break;
case ReleaseSortMethod::AddedDesc:
query.orderBy("t.file_added DESC");
break;
case ReleaseSortMethod::DateAsc:
query.orderBy("t.date ASC, r.name COLLATE NOCASE");
break;
+8 -1
View File
@@ -240,7 +240,10 @@ namespace lms::db
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_date_idx ON track(date)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_directory_release_idx ON track(directory_id, release_id);");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_directory_file_stem_idx ON track(directory_id, file_stem);");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_file_added_idx ON track(file_added)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_file_added_desc_idx ON track(file_added DESC)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_file_last_write_idx ON track(file_last_write)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_file_last_write_desc_idx ON track(file_last_write DESC)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_file_name_idx ON track(file_name COLLATE NOCASE)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_media_library_idx ON track(media_library_id)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_media_library_release_idx ON track(media_library_id, release_id)");
@@ -250,8 +253,12 @@ namespace lms::db
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_original_date_idx ON track(original_date)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_recording_mbid_idx ON track(recording_mbid)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_idx ON track(release_id)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_file_last_write_idx ON track(release_id, file_last_write)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_date_idx ON track(release_id, date)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_date_desc_idx ON track(release_id, date DESC)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_file_last_write_idx ON track(release_id, file_last_write)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_file_last_write_desc_idx ON track(release_id, file_last_write DESC)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_file_added_idx ON track(release_id, file_added)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS track_release_file_added_desc_idx ON track(release_id, file_added DESC)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS tracklist_name_idx ON tracklist(name)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS tracklist_user_type_idx ON tracklist(user_id, type)");
+4 -1
View File
@@ -175,9 +175,12 @@ namespace lms::db
case TrackSortMethod::Id:
query.orderBy("t.id");
break;
case TrackSortMethod::LastWritten:
case TrackSortMethod::LastWrittenDesc:
query.orderBy("t.file_last_write DESC");
break;
case TrackSortMethod::AddedDesc:
query.orderBy("t.file_added DESC");
break;
case TrackSortMethod::Random:
query.orderBy("RANDOM()");
break;