SubsonicAPI: optimized search for albums

This commit is contained in:
emeric
2023-11-04 16:15:39 +01:00
parent 4089f07c16
commit c4d2d20447
14 changed files with 735 additions and 718 deletions
@@ -66,11 +66,11 @@ namespace API::Subsonic
params.setSortMethod(ReleaseSortMethod::Name);
params.setRange(range);
releases = Release::find(context.dbSession, params);
releases = Release::findIds(context.dbSession, params);
}
else if (type == "alphabeticalByArtist")
{
releases = Release::findOrderedByArtist(context.dbSession, range);
releases = Release::findIdsOrderedByArtist(context.dbSession, range);
}
else if (type == "byGenre")
{
@@ -86,7 +86,7 @@ namespace API::Subsonic
params.setSortMethod(ReleaseSortMethod::Name);
params.setRange(range);
releases = Release::find(context.dbSession, params);
releases = Release::findIds(context.dbSession, params);
}
}
}
@@ -100,7 +100,7 @@ namespace API::Subsonic
params.setRange(range);
params.setDateRange(DateRange::fromYearRange(fromYear, toYear));
releases = Release::find(context.dbSession, params);
releases = Release::findIds(context.dbSession, params);
}
else if (type == "frequent")
{
@@ -112,7 +112,7 @@ namespace API::Subsonic
params.setSortMethod(ReleaseSortMethod::LastWritten);
params.setRange(range);
releases = Release::find(context.dbSession, params);
releases = Release::findIds(context.dbSession, params);
}
else if (type == "random")
{
@@ -122,7 +122,7 @@ namespace API::Subsonic
params.setSortMethod(ReleaseSortMethod::Random);
params.setRange({ 0, size });
releases = Release::find(context.dbSession, params);
releases = Release::findIds(context.dbSession, params);
}
else if (type == "recent")
{
@@ -335,11 +335,8 @@ namespace API::Subsonic
directoryNode.setAttribute("name", Utils::makeNameFilesystemCompatible(artist->getName()));
const auto artistReleases{ Release::find(context.dbSession, Release::FindParameters {}.setArtist(*artistId)) };
for (const ReleaseId artistReleaseId : artistReleases.results)
{
const Release::pointer release{ Release::find(context.dbSession, artistReleaseId) };
for (const Release::pointer& release : artistReleases.results)
directoryNode.addArrayChild("child", createAlbumNode(context, release, user, false /* no id3 */));
}
}
else if (releaseId)
{
@@ -408,11 +405,8 @@ namespace API::Subsonic
Response::Node artistNode{ createArtistNode(context, artist, user, true /* id3 */) };
const auto releases{ Release::find(context.dbSession, Release::FindParameters {}.setArtist(artist->getId())) };
for (const ReleaseId releaseId : releases.results)
{
const Release::pointer release{ Release::find(context.dbSession, releaseId) };
for (const Release::pointer& release : releases.results)
artistNode.addArrayChild("album", createAlbumNode(context, release, user, true /* id3 */));
}
response.addNode("artist", std::move(artistNode));
@@ -70,7 +70,6 @@ namespace API::Subsonic
{
Artist::FindParameters params;
params.setKeywords(keywords);
params.setSortMethod(ArtistSortMethod::BySortName);
params.setRange({ artistOffset, artistCount });
RangeResults<ArtistId> artistIds{ Artist::find(context.dbSession, params) };
@@ -85,15 +84,11 @@ namespace API::Subsonic
{
Release::FindParameters params;
params.setKeywords(keywords);
params.setSortMethod(ReleaseSortMethod::Name);
params.setRange({ albumOffset, albumCount });
RangeResults<ReleaseId> releaseIds{ Release::find(context.dbSession, params) };
for (const ReleaseId releaseId : releaseIds.results)
{
const auto release{ Release::find(context.dbSession, releaseId) };
RangeResults<Release::pointer> releases{ Release::find(context.dbSession, params) };
for (const Release::pointer& release : releases.results)
searchResult2Node.addArrayChild("album", createAlbumNode(context, release, user, id3));
}
}
if (songCount > 0)