SubsonicAPI: optimized search for albums
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user