diff --git a/src/libs/database/impl/Cluster.cpp b/src/libs/database/impl/Cluster.cpp index 76065a8b..e92d9faa 100644 --- a/src/libs/database/impl/Cluster.cpp +++ b/src/libs/database/impl/Cluster.cpp @@ -113,6 +113,14 @@ namespace lms::db return utils::execRangeQuery(query, params.range); } + void Cluster::find(Session& session, const FindParameters& params, std::function _func) + { + session.checkReadTransaction(); + auto query{ createQuery>(session, params) }; + + return utils::forEachQueryResult(query, _func); + } + RangeResults Cluster::findOrphanIds(Session& session, std::optional range) { session.checkReadTransaction(); diff --git a/src/libs/subsonic/impl/responses/Album.cpp b/src/libs/subsonic/impl/responses/Album.cpp index 163a89b2..fc3adf03 100644 --- a/src/libs/subsonic/impl/responses/Album.cpp +++ b/src/libs/subsonic/impl/responses/Album.cpp @@ -132,9 +132,11 @@ namespace lms::api::subsonic params.setRelease(release->getId()); params.setClusterTypeName(clusterTypeName); - for (const auto& cluster : Cluster::find(context.dbSession, params).results) - albumNode.addArrayValue(field, cluster->getName()); - } }; + Cluster::find(context.dbSession, params, [&](const Cluster::pointer& cluster) + { + albumNode.addArrayValue(field, cluster->getName()); + }); + }}; addClusters("moods", "MOOD"); @@ -146,8 +148,10 @@ namespace lms::api::subsonic params.setRelease(release->getId()); params.setClusterType(genreClusterType->getId()); - for (const auto& cluster : Cluster::find(context.dbSession, params).results) - albumNode.addArrayChild("genres", createItemGenreNode(cluster->getName())); + Cluster::find(context.dbSession, params, [&](const Cluster::pointer& cluster) + { + albumNode.addArrayChild("genres", createItemGenreNode(cluster->getName())); + }); } albumNode.createEmptyArrayChild("artists");