Centralized some db filters
This commit is contained in:
@@ -49,9 +49,9 @@ namespace lms::db
|
|||||||
|| params.linkType
|
|| params.linkType
|
||||||
|| params.track.isValid()
|
|| params.track.isValid()
|
||||||
|| params.release.isValid()
|
|| params.release.isValid()
|
||||||
|| params.clusters.size() == 1
|
|| params.filters.clusters.size() == 1
|
||||||
|| params.mediaLibrary.isValid()
|
|| params.filters.mediaLibrary.isValid()
|
||||||
|| params.label.isValid())
|
|| params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
|
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
|
||||||
}
|
}
|
||||||
@@ -60,8 +60,8 @@ namespace lms::db
|
|||||||
|| params.sortMethod == ArtistSortMethod::AddedDesc
|
|| params.sortMethod == ArtistSortMethod::AddedDesc
|
||||||
|| params.writtenAfter.isValid()
|
|| params.writtenAfter.isValid()
|
||||||
|| params.release.isValid()
|
|| params.release.isValid()
|
||||||
|| params.mediaLibrary.isValid()
|
|| params.filters.mediaLibrary.isValid()
|
||||||
|| params.label.isValid())
|
|| params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("track t ON t.id = t_a_l.track_id");
|
query.join("track t ON t.id = t_a_l.track_id");
|
||||||
|
|
||||||
@@ -71,13 +71,13 @@ namespace lms::db
|
|||||||
if (params.release.isValid())
|
if (params.release.isValid())
|
||||||
query.where("t.release_id = ?").bind(params.release);
|
query.where("t.release_id = ?").bind(params.release);
|
||||||
|
|
||||||
if (params.mediaLibrary.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
if (params.label.isValid())
|
if (params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
||||||
query.where("r_l.label_id = ?").bind(params.label);
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,27 +116,27 @@ namespace lms::db
|
|||||||
.bind(SyncState::PendingRemove);
|
.bind(SyncState::PendingRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.clusters.size() == 1)
|
if (params.filters.clusters.size() == 1)
|
||||||
{
|
{
|
||||||
query.join("track_cluster t_c ON t_c.track_id = t_a_l.track_id")
|
query.join("track_cluster t_c ON t_c.track_id = t_a_l.track_id")
|
||||||
.where("t_c.cluster_id = ?")
|
.where("t_c.cluster_id = ?")
|
||||||
.bind(params.clusters.front());
|
.bind(params.filters.clusters.front());
|
||||||
}
|
}
|
||||||
else if (params.clusters.size() > 1)
|
else if (params.filters.clusters.size() > 1)
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "a.id IN (SELECT DISTINCT t_a_l.artist_id FROM track_artist_link t_a_l"
|
oss << "a.id IN (SELECT DISTINCT t_a_l.artist_id FROM track_artist_link t_a_l"
|
||||||
" INNER JOIN track_cluster t_c ON t_c.track_id = t_a_l.track_id";
|
" INNER JOIN track_cluster t_c ON t_c.track_id = t_a_l.track_id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (const ClusterId clusterId : params.clusters)
|
for (const ClusterId clusterId : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
||||||
query.bind(clusterId);
|
query.bind(clusterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t_a_l.track_id,t_a_l.artist_id HAVING COUNT(DISTINCT t_c.cluster_id) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t_a_l.track_id,t_a_l.artist_id HAVING COUNT(DISTINCT t_c.cluster_id) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,38 +42,38 @@ namespace lms::db
|
|||||||
|
|
||||||
assert(!params.artist.isValid()); // poor check
|
assert(!params.artist.isValid()); // poor check
|
||||||
|
|
||||||
if (params.library.isValid() || params.label.isValid())
|
if (params.filters.mediaLibrary.isValid() || params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("track t ON t.id = t_a_l.track_id");
|
query.join("track t ON t.id = t_a_l.track_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.library.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.library);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
if (params.label.isValid())
|
if (params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("release_label r_l ON t.release_id = r_l.release_id");
|
query.join("release_label r_l ON t.release_id = r_l.release_id");
|
||||||
query.where("r_l.label_id = ?").bind(params.label);
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.linkType)
|
if (params.linkType)
|
||||||
query.where("t_a_l.type = ?").bind(*params.linkType);
|
query.where("t_a_l.type = ?").bind(*params.linkType);
|
||||||
|
|
||||||
if (!params.clusters.empty())
|
if (!params.filters.clusters.empty())
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "a.id IN (SELECT DISTINCT t_a_l.artist_id FROM track_artist_link t_a_l"
|
oss << "a.id IN (SELECT DISTINCT t_a_l.artist_id FROM track_artist_link t_a_l"
|
||||||
" INNER JOIN track_cluster t_c ON t_c.track_id = t_a_l.track_id";
|
" INNER JOIN track_cluster t_c ON t_c.track_id = t_a_l.track_id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (auto id : params.clusters)
|
for (const db::ClusterId id : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
||||||
query.bind(id);
|
query.bind(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t_a_l.track_id,t_a_l.artist_id HAVING COUNT(DISTINCT t_c.cluster_id) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t_a_l.track_id,t_a_l.artist_id HAVING COUNT(DISTINCT t_c.cluster_id) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
@@ -118,16 +118,16 @@ namespace lms::db
|
|||||||
.bind(params.artist);
|
.bind(params.artist);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.library.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.library);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
if (params.label.isValid())
|
if (params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("release_label r_l ON r_l.release_id = r.id");
|
query.join("release_label r_l ON r_l.release_id = r.id");
|
||||||
query.where("r_l.label_id = ?").bind(params.label);
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!params.clusters.empty())
|
if (!params.filters.clusters.empty())
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "r.id IN (SELECT DISTINCT r.id FROM release r"
|
oss << "r.id IN (SELECT DISTINCT r.id FROM release r"
|
||||||
@@ -136,14 +136,14 @@ namespace lms::db
|
|||||||
" INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
|
" INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (ClusterId id : params.clusters)
|
for (const ClusterId id : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("c.id = ?"));
|
clusterClause.Or(WhereClause("c.id = ?"));
|
||||||
query.bind(id);
|
query.bind(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t.id HAVING COUNT(DISTINCT c.id) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t.id HAVING COUNT(DISTINCT c.id) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
@@ -171,16 +171,16 @@ namespace lms::db
|
|||||||
.bind(params.artist);
|
.bind(params.artist);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.library.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.library);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
if (params.label.isValid())
|
if (params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
||||||
query.where("r_l.label_id = ?").bind(params.label);
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!params.clusters.empty())
|
if (!params.filters.clusters.empty())
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
|
oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
|
||||||
@@ -188,14 +188,14 @@ namespace lms::db
|
|||||||
" INNER JOIN cluster c ON c.id = t_c.cluster_id";
|
" INNER JOIN cluster c ON c.id = t_c.cluster_id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (auto id : params.clusters)
|
for (const ClusterId id : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("c.id = ?")).bind(id.toString());
|
clusterClause.Or(WhereClause("c.id = ?")).bind(id.toString());
|
||||||
query.bind(id);
|
query.bind(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,8 +60,8 @@ namespace lms::db
|
|||||||
|| params.writtenAfter.isValid()
|
|| params.writtenAfter.isValid()
|
||||||
|| params.dateRange
|
|| params.dateRange
|
||||||
|| params.artist.isValid()
|
|| params.artist.isValid()
|
||||||
|| params.clusters.size() == 1
|
|| params.filters.clusters.size() == 1
|
||||||
|| params.mediaLibrary.isValid()
|
|| params.filters.mediaLibrary.isValid()
|
||||||
|| params.directory.isValid()
|
|| params.directory.isValid()
|
||||||
|| params.parentDirectory.isValid())
|
|| params.parentDirectory.isValid())
|
||||||
{
|
{
|
||||||
@@ -74,13 +74,13 @@ namespace lms::db
|
|||||||
query.where("d.parent_directory_id = ?").bind(params.parentDirectory);
|
query.where("d.parent_directory_id = ?").bind(params.parentDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.mediaLibrary.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
if (params.label.isValid())
|
if (params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("release_label r_l ON r_l.release_id = r.id");
|
query.join("release_label r_l ON r_l.release_id = r.id");
|
||||||
query.where("r_l.label_id = ?").bind(params.label);
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.directory.isValid())
|
if (params.directory.isValid())
|
||||||
@@ -174,27 +174,27 @@ namespace lms::db
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.clusters.size() == 1)
|
if (params.filters.clusters.size() == 1)
|
||||||
{
|
{
|
||||||
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
||||||
.where("t_c.cluster_id = ?")
|
.where("t_c.cluster_id = ?")
|
||||||
.bind(params.clusters.front());
|
.bind(params.filters.clusters.front());
|
||||||
}
|
}
|
||||||
else if (params.clusters.size() > 1)
|
else if (params.filters.clusters.size() > 1)
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "r.id IN (SELECT DISTINCT t.release_id FROM track t"
|
oss << "r.id IN (SELECT DISTINCT t.release_id FROM track t"
|
||||||
" INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
|
" INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (const ClusterId clusterId : params.clusters)
|
for (const ClusterId clusterId : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
||||||
query.bind(clusterId);
|
query.bind(clusterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,28 +79,28 @@ namespace lms::db
|
|||||||
.bind(SyncState::PendingRemove);
|
.bind(SyncState::PendingRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.clusters.size() == 1)
|
if (params.filters.clusters.size() == 1)
|
||||||
{
|
{
|
||||||
// optim
|
// optim
|
||||||
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
||||||
.where("t_c.cluster_id = ?")
|
.where("t_c.cluster_id = ?")
|
||||||
.bind(params.clusters.front());
|
.bind(params.filters.clusters.front());
|
||||||
}
|
}
|
||||||
else if (params.clusters.size() > 1)
|
else if (params.filters.clusters.size() > 1)
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
|
oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
|
||||||
" INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
|
" INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (const ClusterId clusterId : params.clusters)
|
for (const ClusterId clusterId : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
clusterClause.Or(WhereClause("t_c.cluster_id = ?"));
|
||||||
query.bind(clusterId);
|
query.bind(clusterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
@@ -159,13 +159,13 @@ namespace lms::db
|
|||||||
if (params.discNumber)
|
if (params.discNumber)
|
||||||
query.where("t.disc_number = ?").bind(*params.discNumber);
|
query.where("t.disc_number = ?").bind(*params.discNumber);
|
||||||
|
|
||||||
if (params.mediaLibrary.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
if (params.label.isValid())
|
if (params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
||||||
query.where("r_l.label_id = ?").bind(params.label);
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.directory.isValid())
|
if (params.directory.isValid())
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ namespace lms::db
|
|||||||
|
|
||||||
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " FROM tracklist t_l") };
|
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " FROM tracklist t_l") };
|
||||||
|
|
||||||
if (!params.clusters.empty() || params.mediaLibrary.isValid())
|
if (!params.filters.clusters.empty()
|
||||||
|
|| params.filters.mediaLibrary.isValid()
|
||||||
|
|| params.filters.label.isValid())
|
||||||
{
|
{
|
||||||
query.join("tracklist_entry t_l_e ON t_l_e.tracklist_id = t_l.id");
|
query.join("tracklist_entry t_l_e ON t_l_e.tracklist_id = t_l.id");
|
||||||
query.groupBy("t_l.id");
|
query.groupBy("t_l.id");
|
||||||
@@ -51,11 +53,20 @@ namespace lms::db
|
|||||||
for (std::string_view keyword : params.keywords)
|
for (std::string_view keyword : params.keywords)
|
||||||
query.where("t_l.name LIKE ? ESCAPE '" ESCAPE_CHAR_STR "'").bind("%" + utils::escapeLikeKeyword(keyword) + "%");
|
query.where("t_l.name LIKE ? ESCAPE '" ESCAPE_CHAR_STR "'").bind("%" + utils::escapeLikeKeyword(keyword) + "%");
|
||||||
|
|
||||||
if (params.mediaLibrary.isValid())
|
if (params.filters.mediaLibrary.isValid()
|
||||||
|
|| params.filters.label.isValid())
|
||||||
|
{
|
||||||
query.join("track t ON t.id = t_l_e.track_id");
|
query.join("track t ON t.id = t_l_e.track_id");
|
||||||
|
|
||||||
if (params.mediaLibrary.isValid())
|
if (params.filters.mediaLibrary.isValid())
|
||||||
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
|
query.where("t.media_library_id = ?").bind(params.filters.mediaLibrary);
|
||||||
|
|
||||||
|
if (params.filters.label.isValid())
|
||||||
|
{
|
||||||
|
query.join("release_label r_l ON r_l.release_id = t.release_id");
|
||||||
|
query.where("r_l.label_id = ?").bind(params.filters.label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (params.user.isValid())
|
if (params.user.isValid())
|
||||||
query.where("t_l.user_id = ?").bind(params.user);
|
query.where("t_l.user_id = ?").bind(params.user);
|
||||||
@@ -68,7 +79,7 @@ namespace lms::db
|
|||||||
if (params.visibility)
|
if (params.visibility)
|
||||||
query.where("t_l.visibility = ?").bind(*params.visibility);
|
query.where("t_l.visibility = ?").bind(*params.visibility);
|
||||||
|
|
||||||
if (!params.clusters.empty())
|
if (!params.filters.clusters.empty())
|
||||||
{
|
{
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "t_l_e.track_id IN (SELECT DISTINCT t.id FROM track t"
|
oss << "t_l_e.track_id IN (SELECT DISTINCT t.id FROM track t"
|
||||||
@@ -76,14 +87,14 @@ namespace lms::db
|
|||||||
" INNER JOIN cluster c ON c.id = t_c.cluster_id";
|
" INNER JOIN cluster c ON c.id = t_c.cluster_id";
|
||||||
|
|
||||||
WhereClause clusterClause;
|
WhereClause clusterClause;
|
||||||
for (const ClusterId clusterId : params.clusters)
|
for (const ClusterId clusterId : params.filters.clusters)
|
||||||
{
|
{
|
||||||
clusterClause.Or(WhereClause("c.id = ?"));
|
clusterClause.Or(WhereClause("c.id = ?"));
|
||||||
query.bind(clusterId);
|
query.bind(clusterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
oss << " " << clusterClause.get();
|
oss << " " << clusterClause.get();
|
||||||
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.clusters.size() << ")";
|
oss << " GROUP BY t.id HAVING COUNT(*) = " << params.filters.clusters.size() << ")";
|
||||||
|
|
||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
#include "core/UUID.hpp"
|
#include "core/UUID.hpp"
|
||||||
#include "database/ArtistId.hpp"
|
#include "database/ArtistId.hpp"
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/ClusterId.hpp"
|
||||||
#include "database/LabelId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/MediaLibraryId.hpp"
|
#include "database/MediaLibraryId.hpp"
|
||||||
#include "database/Object.hpp"
|
#include "database/Object.hpp"
|
||||||
#include "database/ReleaseId.hpp"
|
#include "database/ReleaseId.hpp"
|
||||||
@@ -58,7 +58,7 @@ namespace lms::db
|
|||||||
public:
|
public:
|
||||||
struct FindParameters
|
struct FindParameters
|
||||||
{
|
{
|
||||||
std::vector<ClusterId> clusters; // if non empty, at least one artist that belongs to these clusters
|
Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords (on either name field OR sort name field)
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords (on either name field OR sort name field)
|
||||||
std::optional<TrackArtistLinkType> linkType; // if set, only artists that have produced at least one track with this link type
|
std::optional<TrackArtistLinkType> linkType; // if set, only artists that have produced at least one track with this link type
|
||||||
ArtistSortMethod sortMethod{ ArtistSortMethod::None };
|
ArtistSortMethod sortMethod{ ArtistSortMethod::None };
|
||||||
@@ -68,12 +68,10 @@ namespace lms::db
|
|||||||
std::optional<FeedbackBackend> feedbackBackend; // and for this feedback backend
|
std::optional<FeedbackBackend> feedbackBackend; // and for this feedback backend
|
||||||
TrackId track; // artists involved in this track
|
TrackId track; // artists involved in this track
|
||||||
ReleaseId release; // artists involved in this release
|
ReleaseId release; // artists involved in this release
|
||||||
MediaLibraryId mediaLibrary; // artists that belong to this library
|
|
||||||
LabelId label; // artists that have issued releases using this label
|
|
||||||
|
|
||||||
FindParameters& setClusters(std::span<const ClusterId> _clusters)
|
FindParameters& setFilters(const Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -117,16 +115,6 @@ namespace lms::db
|
|||||||
release = _release;
|
release = _release;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setMediaLibrary(MediaLibraryId _mediaLibrary)
|
|
||||||
{
|
|
||||||
mediaLibrary = _mediaLibrary;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setLabel(LabelId _label)
|
|
||||||
{
|
|
||||||
label = _label;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Artist() = default;
|
Artist() = default;
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Emeric Poupon
|
||||||
|
*
|
||||||
|
* This file is part of LMS.
|
||||||
|
*
|
||||||
|
* LMS is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* LMS is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with LMS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <span>
|
||||||
|
|
||||||
|
#include "database/ClusterId.hpp"
|
||||||
|
#include "database/LabelId.hpp"
|
||||||
|
#include "database/MediaLibraryId.hpp"
|
||||||
|
|
||||||
|
namespace lms::db
|
||||||
|
{
|
||||||
|
struct Filters
|
||||||
|
{
|
||||||
|
MediaLibraryId mediaLibrary; // tracks that belongs to this library
|
||||||
|
std::vector<ClusterId> clusters; // tracks that belong to all these clusters
|
||||||
|
LabelId label; // tracks which release has this label
|
||||||
|
|
||||||
|
Filters& setClusters(std::span<const ClusterId> _clusters)
|
||||||
|
{
|
||||||
|
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
Filters& setMediaLibrary(MediaLibraryId _mediaLibrary)
|
||||||
|
{
|
||||||
|
mediaLibrary = _mediaLibrary;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
Filters& setLabel(LabelId _label)
|
||||||
|
{
|
||||||
|
label = _label;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace lms::db
|
||||||
@@ -25,10 +25,8 @@
|
|||||||
#include <Wt/WDateTime.h>
|
#include <Wt/WDateTime.h>
|
||||||
|
|
||||||
#include "database/ArtistId.hpp"
|
#include "database/ArtistId.hpp"
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/LabelId.hpp"
|
|
||||||
#include "database/ListenId.hpp"
|
#include "database/ListenId.hpp"
|
||||||
#include "database/MediaLibraryId.hpp"
|
|
||||||
#include "database/Object.hpp"
|
#include "database/Object.hpp"
|
||||||
#include "database/ReleaseId.hpp"
|
#include "database/ReleaseId.hpp"
|
||||||
#include "database/TrackId.hpp"
|
#include "database/TrackId.hpp"
|
||||||
@@ -86,12 +84,10 @@ namespace lms::db
|
|||||||
{
|
{
|
||||||
UserId user;
|
UserId user;
|
||||||
std::optional<ScrobblingBackend> backend;
|
std::optional<ScrobblingBackend> backend;
|
||||||
std::vector<ClusterId> clusters; // if non empty, entities that belong to these clusters
|
db::Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
||||||
std::optional<Range> range;
|
std::optional<Range> range;
|
||||||
ArtistId artist; // if set, matching this artist
|
ArtistId artist; // if set, matching this artist
|
||||||
MediaLibraryId library;
|
|
||||||
LabelId label;
|
|
||||||
|
|
||||||
StatsFindParameters& setUser(UserId _user)
|
StatsFindParameters& setUser(UserId _user)
|
||||||
{
|
{
|
||||||
@@ -103,9 +99,9 @@ namespace lms::db
|
|||||||
backend = _backend;
|
backend = _backend;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
StatsFindParameters& setClusters(const std::vector<ClusterId>& _clusters)
|
StatsFindParameters& setFilters(const db::Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters = _clusters;
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
StatsFindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
StatsFindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -123,16 +119,6 @@ namespace lms::db
|
|||||||
artist = _artist;
|
artist = _artist;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
StatsFindParameters& setMediaLibrary(MediaLibraryId _library)
|
|
||||||
{
|
|
||||||
library = _library;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
StatsFindParameters& setLabel(LabelId _label)
|
|
||||||
{
|
|
||||||
label = _label;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ArtistStatsFindParameters : public StatsFindParameters
|
struct ArtistStatsFindParameters : public StatsFindParameters
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <span>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -32,9 +31,9 @@
|
|||||||
#include "core/PartialDateTime.hpp"
|
#include "core/PartialDateTime.hpp"
|
||||||
#include "core/UUID.hpp"
|
#include "core/UUID.hpp"
|
||||||
#include "database/ArtistId.hpp"
|
#include "database/ArtistId.hpp"
|
||||||
#include "database/ClusterId.hpp"
|
|
||||||
#include "database/CountryId.hpp"
|
#include "database/CountryId.hpp"
|
||||||
#include "database/DirectoryId.hpp"
|
#include "database/DirectoryId.hpp"
|
||||||
|
#include "database/Filters.hpp"
|
||||||
#include "database/LabelId.hpp"
|
#include "database/LabelId.hpp"
|
||||||
#include "database/MediaLibraryId.hpp"
|
#include "database/MediaLibraryId.hpp"
|
||||||
#include "database/Object.hpp"
|
#include "database/Object.hpp"
|
||||||
@@ -153,7 +152,7 @@ namespace lms::db
|
|||||||
public:
|
public:
|
||||||
struct FindParameters
|
struct FindParameters
|
||||||
{
|
{
|
||||||
std::vector<ClusterId> clusters; // if non empty, releases that belong to these clusters
|
Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords (cannot be set with keywords)
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords (cannot be set with keywords)
|
||||||
std::string name; // must match this name (cannot be set with keywords)
|
std::string name; // must match this name (cannot be set with keywords)
|
||||||
ReleaseSortMethod sortMethod{ ReleaseSortMethod::None };
|
ReleaseSortMethod sortMethod{ ReleaseSortMethod::None };
|
||||||
@@ -166,14 +165,12 @@ namespace lms::db
|
|||||||
core::EnumSet<TrackArtistLinkType> trackArtistLinkTypes; // and for these link types
|
core::EnumSet<TrackArtistLinkType> trackArtistLinkTypes; // and for these link types
|
||||||
core::EnumSet<TrackArtistLinkType> excludedTrackArtistLinkTypes; // but not for these link types
|
core::EnumSet<TrackArtistLinkType> excludedTrackArtistLinkTypes; // but not for these link types
|
||||||
std::string releaseType; // If set, albums that has this release type
|
std::string releaseType; // If set, albums that has this release type
|
||||||
MediaLibraryId mediaLibrary; // If set, releases that has at least a track in this library
|
|
||||||
LabelId label; // If set, releases that has this label
|
|
||||||
DirectoryId directory; // if set, releases in this directory (cannot be set with parent directory)
|
DirectoryId directory; // if set, releases in this directory (cannot be set with parent directory)
|
||||||
DirectoryId parentDirectory; // if set, releases in this parent directory (cannot be set with directory)
|
DirectoryId parentDirectory; // if set, releases in this parent directory (cannot be set with directory)
|
||||||
|
|
||||||
FindParameters& setClusters(std::span<const ClusterId> _clusters)
|
FindParameters& setFilters(const Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -224,16 +221,6 @@ namespace lms::db
|
|||||||
releaseType = _releaseType;
|
releaseType = _releaseType;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setMediaLibrary(MediaLibraryId _mediaLibrary)
|
|
||||||
{
|
|
||||||
mediaLibrary = _mediaLibrary;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setLabel(LabelId _label)
|
|
||||||
{
|
|
||||||
label = _label;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setDirectory(DirectoryId _directory)
|
FindParameters& setDirectory(DirectoryId _directory)
|
||||||
{
|
{
|
||||||
directory = _directory;
|
directory = _directory;
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <span>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -38,7 +37,7 @@
|
|||||||
#include "database/ArtistId.hpp"
|
#include "database/ArtistId.hpp"
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/ClusterId.hpp"
|
||||||
#include "database/DirectoryId.hpp"
|
#include "database/DirectoryId.hpp"
|
||||||
#include "database/LabelId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/MediaLibraryId.hpp"
|
#include "database/MediaLibraryId.hpp"
|
||||||
#include "database/Object.hpp"
|
#include "database/Object.hpp"
|
||||||
#include "database/ReleaseId.hpp"
|
#include "database/ReleaseId.hpp"
|
||||||
@@ -66,7 +65,7 @@ namespace lms::db
|
|||||||
public:
|
public:
|
||||||
struct FindParameters
|
struct FindParameters
|
||||||
{
|
{
|
||||||
std::vector<ClusterId> clusters; // if non empty, tracks that belong to these clusters
|
Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
||||||
std::string name; // if non empty, must match this name (title)
|
std::string name; // if non empty, must match this name (title)
|
||||||
std::string fileStem; // if non empty, must match this file stem
|
std::string fileStem; // if non empty, must match this file stem
|
||||||
@@ -85,14 +84,12 @@ namespace lms::db
|
|||||||
TrackListId trackList; // matching this trackList
|
TrackListId trackList; // matching this trackList
|
||||||
std::optional<int> trackNumber; // matching this track number
|
std::optional<int> trackNumber; // matching this track number
|
||||||
std::optional<int> discNumber; // matching this disc number
|
std::optional<int> discNumber; // matching this disc number
|
||||||
MediaLibraryId mediaLibrary; // If set, tracks in this library
|
|
||||||
LabelId label; // If set, tracks that belongs to a release with this label
|
|
||||||
DirectoryId directory; // if set, tracks in this directory
|
DirectoryId directory; // if set, tracks in this directory
|
||||||
std::optional<bool> hasEmbeddedImage; // if set, tracks that have or not embedded images
|
std::optional<bool> hasEmbeddedImage; // if set, tracks that have or not embedded images
|
||||||
|
|
||||||
FindParameters& setClusters(std::span<const ClusterId> _clusters)
|
FindParameters& setFilters(const Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -179,16 +176,6 @@ namespace lms::db
|
|||||||
discNumber = _discNumber;
|
discNumber = _discNumber;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setMediaLibrary(MediaLibraryId _mediaLibrary)
|
|
||||||
{
|
|
||||||
mediaLibrary = _mediaLibrary;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setLabel(LabelId _label)
|
|
||||||
{
|
|
||||||
label = _label;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setDirectory(DirectoryId _directory)
|
FindParameters& setDirectory(DirectoryId _directory)
|
||||||
{
|
{
|
||||||
directory = _directory;
|
directory = _directory;
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <span>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -28,8 +27,7 @@
|
|||||||
#include <Wt/Dbo/Dbo.h>
|
#include <Wt/Dbo/Dbo.h>
|
||||||
#include <Wt/WDateTime.h>
|
#include <Wt/WDateTime.h>
|
||||||
|
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/MediaLibraryId.hpp"
|
|
||||||
#include "database/Object.hpp"
|
#include "database/Object.hpp"
|
||||||
#include "database/TrackId.hpp"
|
#include "database/TrackId.hpp"
|
||||||
#include "database/TrackListId.hpp"
|
#include "database/TrackListId.hpp"
|
||||||
@@ -62,19 +60,18 @@ namespace lms::db
|
|||||||
// Search utility
|
// Search utility
|
||||||
struct FindParameters
|
struct FindParameters
|
||||||
{
|
{
|
||||||
std::vector<ClusterId> clusters; // if non empty, tracklists that have tracks that belong to these clusters
|
Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords (on either name field OR sort name field)
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords (on either name field OR sort name field)
|
||||||
std::optional<Range> range;
|
std::optional<Range> range;
|
||||||
std::optional<TrackListType> type;
|
std::optional<TrackListType> type;
|
||||||
UserId user; // only tracklists owned by this user
|
UserId user; // only tracklists owned by this user
|
||||||
UserId excludedUser; // only tracklists *not* owned by this user
|
UserId excludedUser; // only tracklists *not* owned by this user
|
||||||
MediaLibraryId mediaLibrary; // only tracklists that have songs in this media library
|
|
||||||
TrackListSortMethod sortMethod{ TrackListSortMethod::None };
|
TrackListSortMethod sortMethod{ TrackListSortMethod::None };
|
||||||
std::optional<Visibility> visibility;
|
std::optional<Visibility> visibility;
|
||||||
|
|
||||||
FindParameters& setClusters(std::span<const ClusterId> _clusters)
|
FindParameters& setFilters(const Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -103,11 +100,6 @@ namespace lms::db
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
FindParameters& setMediaLibrary(MediaLibraryId _mediaLibrary)
|
|
||||||
{
|
|
||||||
mediaLibrary = _mediaLibrary;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setSortMethod(TrackListSortMethod _sortMethod)
|
FindParameters& setSortMethod(TrackListSortMethod _sortMethod)
|
||||||
{
|
{
|
||||||
sortMethod = _sortMethod;
|
sortMethod = _sortMethod;
|
||||||
|
|||||||
@@ -324,13 +324,13 @@ namespace lms::db::tests
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setMediaLibrary(library->getId())) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setMediaLibrary(library->getId()))) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setMediaLibrary(otherLibrary->getId())) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setMediaLibrary(otherLibrary->getId()))) };
|
||||||
EXPECT_EQ(artists.results.size(), 0);
|
EXPECT_EQ(artists.results.size(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,11 +201,11 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() })) };
|
auto tracks{ Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() }))) };
|
||||||
ASSERT_EQ(tracks.results.size(), 1);
|
ASSERT_EQ(tracks.results.size(), 1);
|
||||||
EXPECT_EQ(tracks.results.front(), track.getId());
|
EXPECT_EQ(tracks.results.front(), track.getId());
|
||||||
|
|
||||||
tracks = Track::findIds(session, Track::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster2.getId() }));
|
tracks = Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster2.getId() })));
|
||||||
EXPECT_EQ(tracks.results.size(), 0);
|
EXPECT_EQ(tracks.results.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,7 +235,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(clusterIds)) };
|
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setClusters(clusterIds))) };
|
||||||
EXPECT_EQ(tracks.results.size(), 0);
|
EXPECT_EQ(tracks.results.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +248,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(clusterIds)) };
|
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setClusters(clusterIds))) };
|
||||||
EXPECT_EQ(tracks.results.size(), 0);
|
EXPECT_EQ(tracks.results.size(), 0);
|
||||||
EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 1);
|
EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 1);
|
||||||
EXPECT_EQ(Cluster::computeTrackCount(session, cluster2.getId()), 0);
|
EXPECT_EQ(Cluster::computeTrackCount(session, cluster2.getId()), 0);
|
||||||
@@ -263,7 +263,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(clusterIds)) };
|
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setClusters(clusterIds))) };
|
||||||
ASSERT_EQ(tracks.results.size(), 1);
|
ASSERT_EQ(tracks.results.size(), 1);
|
||||||
EXPECT_EQ(tracks.results.front(), track.getId());
|
EXPECT_EQ(tracks.results.front(), track.getId());
|
||||||
EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 1);
|
EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 1);
|
||||||
@@ -376,7 +376,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
ASSERT_EQ(Cluster::findOrphanIds(session).results.size(), 2);
|
ASSERT_EQ(Cluster::findOrphanIds(session).results.size(), 2);
|
||||||
EXPECT_EQ(Release::find(session, Release::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ unusedCluster.getId() })).results.size(), 0);
|
EXPECT_EQ(Release::find(session, Release::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ unusedCluster.getId() }))).results.size(), 0);
|
||||||
EXPECT_EQ(Release::find(session, Release::FindParameters{}).results.size(), 1);
|
EXPECT_EQ(Release::find(session, Release::FindParameters{}).results.size(), 1);
|
||||||
EXPECT_EQ(Cluster::computeReleaseCount(session, cluster.getId()), 0);
|
EXPECT_EQ(Cluster::computeReleaseCount(session, cluster.getId()), 0);
|
||||||
EXPECT_EQ(Cluster::computeReleaseCount(session, unusedCluster.getId()), 0);
|
EXPECT_EQ(Cluster::computeReleaseCount(session, unusedCluster.getId()), 0);
|
||||||
@@ -412,7 +412,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
const auto releases{ Release::findIds(session, Release::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() })) };
|
const auto releases{ Release::findIds(session, Release::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() }))) };
|
||||||
ASSERT_EQ(releases.results.size(), 1);
|
ASSERT_EQ(releases.results.size(), 1);
|
||||||
EXPECT_EQ(releases.results.front(), release.getId());
|
EXPECT_EQ(releases.results.front(), release.getId());
|
||||||
}
|
}
|
||||||
@@ -420,7 +420,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
const auto releases{ Release::findIds(session, Release::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ unusedCluster.getId() })) };
|
const auto releases{ Release::findIds(session, Release::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ unusedCluster.getId() }))) };
|
||||||
EXPECT_EQ(releases.results.size(), 0);
|
EXPECT_EQ(releases.results.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,12 +466,12 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createWriteTransaction() };
|
auto transaction{ session.createWriteTransaction() };
|
||||||
|
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() })) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() }))) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
|
|
||||||
EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster2.getId() })).results.size(), 0);
|
EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster2.getId() }))).results.size(), 0);
|
||||||
EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster3.getId() })).results.size(), 0);
|
EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster3.getId() }))).results.size(), 0);
|
||||||
|
|
||||||
cluster2.get().modify()->addTrack(track.get());
|
cluster2.get().modify()->addTrack(track.get());
|
||||||
}
|
}
|
||||||
@@ -479,19 +479,19 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() })) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() }))) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
|
|
||||||
artists = Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster2.getId() }));
|
artists = Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster2.getId() })));
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
|
|
||||||
artists = Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() }));
|
artists = Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId() })));
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
|
|
||||||
EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster3.getId() })).results.size(), 0);
|
EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster3.getId() }))).results.size(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -520,7 +520,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() })) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() }))) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
}
|
}
|
||||||
@@ -562,7 +562,7 @@ namespace lms::db::tests
|
|||||||
std::vector<ClusterId> clusterIds;
|
std::vector<ClusterId> clusterIds;
|
||||||
std::transform(std::cbegin(clusters), std::cend(clusters), std::back_inserter(clusterIds), [](const ScopedCluster& cluster) { return cluster.getId(); });
|
std::transform(std::cbegin(clusters), std::cend(clusters), std::back_inserter(clusterIds), [](const ScopedCluster& cluster) { return cluster.getId(); });
|
||||||
|
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setClusters(clusterIds)) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(clusterIds))) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
}
|
}
|
||||||
@@ -671,7 +671,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() })) };
|
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() }))) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
EXPECT_EQ(artists.results.front(), artist.getId());
|
EXPECT_EQ(artists.results.front(), artist.getId());
|
||||||
|
|
||||||
@@ -679,7 +679,7 @@ namespace lms::db::tests
|
|||||||
ASSERT_EQ(releases.results.size(), 1);
|
ASSERT_EQ(releases.results.size(), 1);
|
||||||
EXPECT_EQ(releases.results.front(), release.getId());
|
EXPECT_EQ(releases.results.front(), release.getId());
|
||||||
|
|
||||||
releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId()).setClusters(std::initializer_list<ClusterId>{ cluster.getId() }));
|
releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId()).setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() })));
|
||||||
ASSERT_EQ(releases.results.size(), 1);
|
ASSERT_EQ(releases.results.size(), 1);
|
||||||
EXPECT_EQ(releases.results.front(), release.getId());
|
EXPECT_EQ(releases.results.front(), release.getId());
|
||||||
}
|
}
|
||||||
@@ -710,7 +710,7 @@ namespace lms::db::tests
|
|||||||
ASSERT_EQ(releases.results.size(), 1);
|
ASSERT_EQ(releases.results.size(), 1);
|
||||||
EXPECT_EQ(releases.results.front(), release.getId());
|
EXPECT_EQ(releases.results.front(), release.getId());
|
||||||
|
|
||||||
releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId()).setClusters(std::initializer_list<ClusterId>{ cluster1.getId(), cluster2.getId() }));
|
releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId()).setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster1.getId(), cluster2.getId() })));
|
||||||
ASSERT_EQ(releases.results.size(), 1);
|
ASSERT_EQ(releases.results.size(), 1);
|
||||||
EXPECT_EQ(releases.results.front(), release.getId());
|
EXPECT_EQ(releases.results.front(), release.getId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster->getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster->getId() });
|
||||||
|
|
||||||
auto artists{ Listen::getTopArtists(session, params) };
|
auto artists{ Listen::getTopArtists(session, params) };
|
||||||
EXPECT_EQ(artists.results.size(), 0);
|
EXPECT_EQ(artists.results.size(), 0);
|
||||||
@@ -313,7 +313,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto artists{ Listen::getTopArtists(session, params) };
|
auto artists{ Listen::getTopArtists(session, params) };
|
||||||
ASSERT_EQ(artists.results.size(), 0);
|
ASSERT_EQ(artists.results.size(), 0);
|
||||||
@@ -328,7 +328,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto artists{ Listen::getTopArtists(session, params) };
|
auto artists{ Listen::getTopArtists(session, params) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
@@ -352,7 +352,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user.getId());
|
params.setUser(user.getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
const auto artists{ Listen::getTopArtists(session, params) };
|
const auto artists{ Listen::getTopArtists(session, params) };
|
||||||
EXPECT_EQ(artists.results.size(), 0);
|
EXPECT_EQ(artists.results.size(), 0);
|
||||||
@@ -383,7 +383,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user.getId());
|
params.setUser(user.getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto artists{ Listen::getTopArtists(session, params) };
|
auto artists{ Listen::getTopArtists(session, params) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
@@ -395,7 +395,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user.getId());
|
params.setUser(user.getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(otherLibrary.getId());
|
params.filters.setMediaLibrary(otherLibrary.getId());
|
||||||
|
|
||||||
auto artists{ Listen::getTopArtists(session, params) };
|
auto artists{ Listen::getTopArtists(session, params) };
|
||||||
EXPECT_EQ(artists.results.size(), 0);
|
EXPECT_EQ(artists.results.size(), 0);
|
||||||
@@ -533,7 +533,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto releases{ Listen::getTopReleases(session, params) };
|
auto releases{ Listen::getTopReleases(session, params) };
|
||||||
EXPECT_EQ(releases.results.size(), 0);
|
EXPECT_EQ(releases.results.size(), 0);
|
||||||
@@ -549,7 +549,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto releases{ Listen::getTopReleases(session, params) };
|
auto releases{ Listen::getTopReleases(session, params) };
|
||||||
EXPECT_EQ(releases.results.size(), 1);
|
EXPECT_EQ(releases.results.size(), 1);
|
||||||
@@ -578,7 +578,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto releases{ Listen::getTopReleases(session, params) };
|
auto releases{ Listen::getTopReleases(session, params) };
|
||||||
EXPECT_EQ(releases.moreResults, false);
|
EXPECT_EQ(releases.moreResults, false);
|
||||||
@@ -593,7 +593,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto releases{ Listen::getTopReleases(session, params) };
|
auto releases{ Listen::getTopReleases(session, params) };
|
||||||
EXPECT_EQ(releases.moreResults, false);
|
EXPECT_EQ(releases.moreResults, false);
|
||||||
@@ -606,7 +606,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(otherLibrary.getId());
|
params.filters.setMediaLibrary(otherLibrary.getId());
|
||||||
|
|
||||||
auto releases{ Listen::getTopReleases(session, params) };
|
auto releases{ Listen::getTopReleases(session, params) };
|
||||||
EXPECT_EQ(releases.moreResults, false);
|
EXPECT_EQ(releases.moreResults, false);
|
||||||
@@ -780,7 +780,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto tracks{ Listen::getTopTracks(session, params) };
|
auto tracks{ Listen::getTopTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.results.size(), 0);
|
EXPECT_EQ(tracks.results.size(), 0);
|
||||||
@@ -796,7 +796,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto tracks{ Listen::getTopTracks(session, params) };
|
auto tracks{ Listen::getTopTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.results.size(), 1);
|
EXPECT_EQ(tracks.results.size(), 1);
|
||||||
@@ -818,7 +818,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user.getId());
|
params.setUser(user.getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto tracks{ Listen::getTopTracks(session, params) };
|
auto tracks{ Listen::getTopTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.moreResults, false);
|
EXPECT_EQ(tracks.moreResults, false);
|
||||||
@@ -838,7 +838,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto tracks{ Listen::getTopTracks(session, params) };
|
auto tracks{ Listen::getTopTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.moreResults, false);
|
EXPECT_EQ(tracks.moreResults, false);
|
||||||
@@ -851,7 +851,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setMediaLibrary(otherLibrary.getId());
|
params.filters.setMediaLibrary(otherLibrary.getId());
|
||||||
|
|
||||||
auto tracks{ Listen::getTopTracks(session, params) };
|
auto tracks{ Listen::getTopTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.moreResults, false);
|
EXPECT_EQ(tracks.moreResults, false);
|
||||||
@@ -927,7 +927,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster->getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster->getId() });
|
||||||
|
|
||||||
auto artists{ Listen::getRecentArtists(session, params) };
|
auto artists{ Listen::getRecentArtists(session, params) };
|
||||||
EXPECT_EQ(artists.results.size(), 0);
|
EXPECT_EQ(artists.results.size(), 0);
|
||||||
@@ -1023,7 +1023,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto artists{ Listen::getRecentArtists(session, params) };
|
auto artists{ Listen::getRecentArtists(session, params) };
|
||||||
ASSERT_EQ(artists.results.size(), 0);
|
ASSERT_EQ(artists.results.size(), 0);
|
||||||
@@ -1038,7 +1038,7 @@ namespace lms::db::tests
|
|||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto artists{ Listen::getRecentArtists(session, params) };
|
auto artists{ Listen::getRecentArtists(session, params) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
@@ -1067,7 +1067,7 @@ namespace lms::db::tests
|
|||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto artists{ Listen::getRecentArtists(session, params) };
|
auto artists{ Listen::getRecentArtists(session, params) };
|
||||||
ASSERT_EQ(artists.results.size(), 1);
|
ASSERT_EQ(artists.results.size(), 1);
|
||||||
@@ -1077,7 +1077,7 @@ namespace lms::db::tests
|
|||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
Listen::ArtistStatsFindParameters params;
|
Listen::ArtistStatsFindParameters params;
|
||||||
params.setMediaLibrary(otherLibrary.getId());
|
params.filters.setMediaLibrary(otherLibrary.getId());
|
||||||
|
|
||||||
auto artists{ Listen::getRecentArtists(session, params) };
|
auto artists{ Listen::getRecentArtists(session, params) };
|
||||||
EXPECT_EQ(artists.results.size(), 0);
|
EXPECT_EQ(artists.results.size(), 0);
|
||||||
@@ -1281,7 +1281,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto releases{ Listen::getRecentReleases(session, params) };
|
auto releases{ Listen::getRecentReleases(session, params) };
|
||||||
EXPECT_EQ(releases.results.size(), 0);
|
EXPECT_EQ(releases.results.size(), 0);
|
||||||
@@ -1296,7 +1296,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto releases{ Listen::getRecentReleases(session, params) };
|
auto releases{ Listen::getRecentReleases(session, params) };
|
||||||
EXPECT_EQ(releases.results.size(), 0);
|
EXPECT_EQ(releases.results.size(), 0);
|
||||||
@@ -1312,7 +1312,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto releases{ Listen::getRecentReleases(session, params) };
|
auto releases{ Listen::getRecentReleases(session, params) };
|
||||||
EXPECT_EQ(releases.results.size(), 1);
|
EXPECT_EQ(releases.results.size(), 1);
|
||||||
@@ -1341,7 +1341,7 @@ namespace lms::db::tests
|
|||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto releases{ Listen::getRecentReleases(session, params) };
|
auto releases{ Listen::getRecentReleases(session, params) };
|
||||||
EXPECT_EQ(releases.moreResults, false);
|
EXPECT_EQ(releases.moreResults, false);
|
||||||
@@ -1352,7 +1352,7 @@ namespace lms::db::tests
|
|||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setMediaLibrary(otherLibrary.getId());
|
params.filters.setMediaLibrary(otherLibrary.getId());
|
||||||
|
|
||||||
auto releases{ Listen::getRecentReleases(session, params) };
|
auto releases{ Listen::getRecentReleases(session, params) };
|
||||||
EXPECT_EQ(releases.moreResults, false);
|
EXPECT_EQ(releases.moreResults, false);
|
||||||
@@ -1425,7 +1425,7 @@ namespace lms::db::tests
|
|||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setMediaLibrary(library.getId());
|
params.filters.setMediaLibrary(library.getId());
|
||||||
|
|
||||||
auto tracks{ Listen::getRecentTracks(session, params) };
|
auto tracks{ Listen::getRecentTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.moreResults, false);
|
EXPECT_EQ(tracks.moreResults, false);
|
||||||
@@ -1437,7 +1437,7 @@ namespace lms::db::tests
|
|||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setMediaLibrary(otherLibrary.getId());
|
params.filters.setMediaLibrary(otherLibrary.getId());
|
||||||
|
|
||||||
auto tracks{ Listen::getRecentTracks(session, params) };
|
auto tracks{ Listen::getRecentTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.moreResults, false);
|
EXPECT_EQ(tracks.moreResults, false);
|
||||||
@@ -1655,7 +1655,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto tracks{ Listen::getRecentTracks(session, params) };
|
auto tracks{ Listen::getRecentTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.results.size(), 0);
|
EXPECT_EQ(tracks.results.size(), 0);
|
||||||
@@ -1671,7 +1671,7 @@ namespace lms::db::tests
|
|||||||
Listen::StatsFindParameters params;
|
Listen::StatsFindParameters params;
|
||||||
params.setUser(user->getId());
|
params.setUser(user->getId());
|
||||||
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
params.setScrobblingBackend(ScrobblingBackend::Internal);
|
||||||
params.setClusters({ cluster.getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster.getId() });
|
||||||
|
|
||||||
auto tracks{ Listen::getRecentTracks(session, params) };
|
auto tracks{ Listen::getRecentTracks(session, params) };
|
||||||
EXPECT_EQ(tracks.results.size(), 1);
|
EXPECT_EQ(tracks.results.size(), 1);
|
||||||
|
|||||||
@@ -246,13 +246,13 @@ namespace lms::db::tests
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
auto releases{ Release::findIds(session, Release::FindParameters{}.setMediaLibrary(library->getId())) };
|
auto releases{ Release::findIds(session, Release::FindParameters{}.setFilters(Filters{}.setMediaLibrary(library->getId()))) };
|
||||||
ASSERT_EQ(releases.results.size(), 1);
|
ASSERT_EQ(releases.results.size(), 1);
|
||||||
EXPECT_EQ(releases.results.front(), release.getId());
|
EXPECT_EQ(releases.results.front(), release.getId());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
auto releases{ Release::findIds(session, Release::FindParameters{}.setMediaLibrary(otherLibrary->getId())) };
|
auto releases{ Release::findIds(session, Release::FindParameters{}.setFilters(Filters{}.setMediaLibrary(otherLibrary->getId()))) };
|
||||||
EXPECT_EQ(releases.results.size(), 0);
|
EXPECT_EQ(releases.results.size(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,13 +170,13 @@ namespace lms::db::tests
|
|||||||
|
|
||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setMediaLibrary(library->getId())) };
|
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setMediaLibrary(library->getId()))) };
|
||||||
ASSERT_EQ(tracks.results.size(), 1);
|
ASSERT_EQ(tracks.results.size(), 1);
|
||||||
EXPECT_EQ(tracks.results.front(), track.getId());
|
EXPECT_EQ(tracks.results.front(), track.getId());
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setMediaLibrary(otherLibrary->getId())) };
|
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setFilters(Filters{}.setMediaLibrary(otherLibrary->getId()))) };
|
||||||
EXPECT_EQ(tracks.results.size(), 0);
|
EXPECT_EQ(tracks.results.size(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
std::vector<TrackListId> visitedTrackLists;
|
std::vector<TrackListId> visitedTrackLists;
|
||||||
TrackList::find(session, TrackList::FindParameters{}.setMediaLibrary(library->getId()), [&](const TrackList::pointer& trackList) {
|
TrackList::find(session, TrackList::FindParameters{}.setFilters(Filters{}.setMediaLibrary(library->getId())), [&](const TrackList::pointer& trackList) {
|
||||||
visitedTrackLists.push_back(trackList->getId());
|
visitedTrackLists.push_back(trackList->getId());
|
||||||
});
|
});
|
||||||
ASSERT_EQ(visitedTrackLists.size(), 1);
|
ASSERT_EQ(visitedTrackLists.size(), 1);
|
||||||
@@ -195,7 +195,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
auto trackLists{ TrackList::find(session, TrackList::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() })) };
|
auto trackLists{ TrackList::find(session, TrackList::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() }))) };
|
||||||
EXPECT_EQ(trackLists.results.size(), 0);
|
EXPECT_EQ(trackLists.results.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ namespace lms::db::tests
|
|||||||
{
|
{
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
auto trackLists{ TrackList::find(session, TrackList::FindParameters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() })) };
|
auto trackLists{ TrackList::find(session, TrackList::FindParameters{}.setFilters(Filters{}.setClusters(std::initializer_list<ClusterId>{ cluster.getId() }))) };
|
||||||
ASSERT_EQ(trackLists.results.size(), 1);
|
ASSERT_EQ(trackLists.results.size(), 1);
|
||||||
EXPECT_EQ(trackLists.results.front(), trackList1.getId());
|
EXPECT_EQ(trackLists.results.front(), trackList1.getId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,14 +97,12 @@ namespace lms::feedback
|
|||||||
return {};
|
return {};
|
||||||
|
|
||||||
Artist::FindParameters searchParams;
|
Artist::FindParameters searchParams;
|
||||||
|
searchParams.setFilters(params.filters);
|
||||||
searchParams.setStarringUser(params.user, *backend);
|
searchParams.setStarringUser(params.user, *backend);
|
||||||
searchParams.setClusters(params.clusters);
|
|
||||||
searchParams.setKeywords(params.keywords);
|
searchParams.setKeywords(params.keywords);
|
||||||
searchParams.setLinkType(params.linkType);
|
searchParams.setLinkType(params.linkType);
|
||||||
searchParams.setSortMethod(params.sortMethod);
|
searchParams.setSortMethod(params.sortMethod);
|
||||||
searchParams.setRange(params.range);
|
searchParams.setRange(params.range);
|
||||||
searchParams.setMediaLibrary(params.library);
|
|
||||||
searchParams.setLabel(params.label);
|
|
||||||
|
|
||||||
Session& session{ _db.getTLSSession() };
|
Session& session{ _db.getTLSSession() };
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
@@ -150,12 +148,10 @@ namespace lms::feedback
|
|||||||
|
|
||||||
Release::FindParameters searchParams;
|
Release::FindParameters searchParams;
|
||||||
searchParams.setStarringUser(params.user, *backend);
|
searchParams.setStarringUser(params.user, *backend);
|
||||||
searchParams.setClusters(params.clusters);
|
searchParams.setFilters(params.filters);
|
||||||
searchParams.setKeywords(params.keywords);
|
searchParams.setKeywords(params.keywords);
|
||||||
searchParams.setSortMethod(ReleaseSortMethod::StarredDateDesc);
|
searchParams.setSortMethod(ReleaseSortMethod::StarredDateDesc);
|
||||||
searchParams.setRange(params.range);
|
searchParams.setRange(params.range);
|
||||||
searchParams.setMediaLibrary(params.library);
|
|
||||||
searchParams.setLabel(params.label);
|
|
||||||
|
|
||||||
Session& session{ _db.getTLSSession() };
|
Session& session{ _db.getTLSSession() };
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
@@ -201,12 +197,10 @@ namespace lms::feedback
|
|||||||
|
|
||||||
Track::FindParameters searchParams;
|
Track::FindParameters searchParams;
|
||||||
searchParams.setStarringUser(params.user, *backend);
|
searchParams.setStarringUser(params.user, *backend);
|
||||||
searchParams.setClusters(params.clusters);
|
searchParams.setFilters(params.filters);
|
||||||
searchParams.setKeywords(params.keywords);
|
searchParams.setKeywords(params.keywords);
|
||||||
searchParams.setSortMethod(TrackSortMethod::StarredDateDesc);
|
searchParams.setSortMethod(TrackSortMethod::StarredDateDesc);
|
||||||
searchParams.setRange(params.range);
|
searchParams.setRange(params.range);
|
||||||
searchParams.setMediaLibrary(params.library);
|
|
||||||
searchParams.setLabel(params.label);
|
|
||||||
|
|
||||||
Session& session{ _db.getTLSSession() };
|
Session& session{ _db.getTLSSession() };
|
||||||
auto transaction{ session.createReadTransaction() };
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|||||||
@@ -27,9 +27,7 @@
|
|||||||
#include <boost/asio/io_service.hpp>
|
#include <boost/asio/io_service.hpp>
|
||||||
|
|
||||||
#include "database/ArtistId.hpp"
|
#include "database/ArtistId.hpp"
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/LabelId.hpp"
|
|
||||||
#include "database/MediaLibraryId.hpp"
|
|
||||||
#include "database/ReleaseId.hpp"
|
#include "database/ReleaseId.hpp"
|
||||||
#include "database/TrackId.hpp"
|
#include "database/TrackId.hpp"
|
||||||
#include "database/Types.hpp"
|
#include "database/Types.hpp"
|
||||||
@@ -54,20 +52,18 @@ namespace lms::feedback
|
|||||||
struct FindParameters
|
struct FindParameters
|
||||||
{
|
{
|
||||||
db::UserId user;
|
db::UserId user;
|
||||||
std::vector<db::ClusterId> clusters; // if non empty, at least one artist that belongs to these clusters
|
db::Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
||||||
std::optional<db::Range> range;
|
std::optional<db::Range> range;
|
||||||
db::MediaLibraryId library;
|
|
||||||
db::LabelId label;
|
|
||||||
|
|
||||||
FindParameters& setUser(const db::UserId _user)
|
FindParameters& setUser(const db::UserId _user)
|
||||||
{
|
{
|
||||||
user = _user;
|
user = _user;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setClusters(std::span<const db::ClusterId> _clusters)
|
FindParameters& setFilters(const db::Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -80,16 +76,6 @@ namespace lms::feedback
|
|||||||
range = _range;
|
range = _range;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setMediaLibrary(db::MediaLibraryId _library)
|
|
||||||
{
|
|
||||||
library = _library;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setLabel(db::LabelId _label)
|
|
||||||
{
|
|
||||||
label = _label;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Artists
|
// Artists
|
||||||
|
|||||||
@@ -41,11 +41,9 @@ namespace lms::scrobbling
|
|||||||
{
|
{
|
||||||
db::Listen::StatsFindParameters listenFindParams;
|
db::Listen::StatsFindParameters listenFindParams;
|
||||||
listenFindParams.setUser(params.user);
|
listenFindParams.setUser(params.user);
|
||||||
listenFindParams.setClusters(params.clusters);
|
listenFindParams.setFilters(params.filters);
|
||||||
listenFindParams.setKeywords(params.keywords);
|
listenFindParams.setKeywords(params.keywords);
|
||||||
listenFindParams.setRange(params.range);
|
listenFindParams.setRange(params.range);
|
||||||
listenFindParams.setMediaLibrary(params.library);
|
|
||||||
listenFindParams.setLabel(params.label);
|
|
||||||
listenFindParams.setArtist(params.artist);
|
listenFindParams.setArtist(params.artist);
|
||||||
|
|
||||||
return listenFindParams;
|
return listenFindParams;
|
||||||
|
|||||||
@@ -28,9 +28,7 @@
|
|||||||
#include <boost/asio/io_service.hpp>
|
#include <boost/asio/io_service.hpp>
|
||||||
|
|
||||||
#include "database/ArtistId.hpp"
|
#include "database/ArtistId.hpp"
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/LabelId.hpp"
|
|
||||||
#include "database/MediaLibraryId.hpp"
|
|
||||||
#include "database/ReleaseId.hpp"
|
#include "database/ReleaseId.hpp"
|
||||||
#include "database/TrackId.hpp"
|
#include "database/TrackId.hpp"
|
||||||
#include "database/Types.hpp"
|
#include "database/Types.hpp"
|
||||||
@@ -62,21 +60,19 @@ namespace lms::scrobbling
|
|||||||
struct FindParameters
|
struct FindParameters
|
||||||
{
|
{
|
||||||
db::UserId user;
|
db::UserId user;
|
||||||
std::vector<db::ClusterId> clusters; // if non empty, at least one artist that belongs to these clusters
|
db::Filters filters;
|
||||||
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
std::vector<std::string_view> keywords; // if non empty, name must match all of these keywords
|
||||||
std::optional<db::Range> range;
|
std::optional<db::Range> range;
|
||||||
db::MediaLibraryId library; // if set, match this library
|
db::ArtistId artist; // if set, match this artist
|
||||||
db::LabelId label; // if set, match this label
|
|
||||||
db::ArtistId artist; // if set, match this artist
|
|
||||||
|
|
||||||
FindParameters& setUser(const db::UserId _user)
|
FindParameters& setUser(const db::UserId _user)
|
||||||
{
|
{
|
||||||
user = _user;
|
user = _user;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setClusters(std::span<const db::ClusterId> _clusters)
|
FindParameters& setFilters(const db::Filters& _filters)
|
||||||
{
|
{
|
||||||
clusters.assign(std::cbegin(_clusters), std::cend(_clusters));
|
filters = _filters;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
FindParameters& setKeywords(const std::vector<std::string_view>& _keywords)
|
||||||
@@ -89,16 +85,6 @@ namespace lms::scrobbling
|
|||||||
range = _range;
|
range = _range;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
FindParameters& setMediaLibrary(db::MediaLibraryId _library)
|
|
||||||
{
|
|
||||||
library = _library;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setLabel(db::LabelId _label)
|
|
||||||
{
|
|
||||||
label = _label;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
FindParameters& setArtist(db::ArtistId _artist)
|
FindParameters& setArtist(db::ArtistId _artist)
|
||||||
{
|
{
|
||||||
artist = _artist;
|
artist = _artist;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ namespace lms::api::subsonic
|
|||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setSortMethod(ReleaseSortMethod::Name);
|
params.setSortMethod(ReleaseSortMethod::Name);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ namespace lms::api::subsonic
|
|||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setSortMethod(ReleaseSortMethod::ArtistNameThenName);
|
params.setSortMethod(ReleaseSortMethod::ArtistNameThenName);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
}
|
}
|
||||||
@@ -90,10 +90,10 @@ namespace lms::api::subsonic
|
|||||||
if (const Cluster::pointer cluster{ clusterType->getCluster(genre) })
|
if (const Cluster::pointer cluster{ clusterType->getCluster(genre) })
|
||||||
{
|
{
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(std::initializer_list<ClusterId>{ cluster->getId() });
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster->getId() });
|
||||||
params.setSortMethod(ReleaseSortMethod::Name);
|
params.setSortMethod(ReleaseSortMethod::Name);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
}
|
}
|
||||||
@@ -108,7 +108,7 @@ namespace lms::api::subsonic
|
|||||||
params.setSortMethod(fromYear > toYear ? ReleaseSortMethod::DateDesc : ReleaseSortMethod::DateAsc);
|
params.setSortMethod(fromYear > toYear ? ReleaseSortMethod::DateDesc : ReleaseSortMethod::DateAsc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setDateRange(YearRange{ std::min(fromYear, toYear), std::max(fromYear, toYear) });
|
params.setDateRange(YearRange{ std::min(fromYear, toYear), std::max(fromYear, toYear) });
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ namespace lms::api::subsonic
|
|||||||
scrobbling::IScrobblingService::FindParameters params;
|
scrobbling::IScrobblingService::FindParameters params;
|
||||||
params.setUser(context.user->getId());
|
params.setUser(context.user->getId());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = scrobblingService.getTopReleases(params);
|
releases = scrobblingService.getTopReleases(params);
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,7 @@ namespace lms::api::subsonic
|
|||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setSortMethod(ReleaseSortMethod::AddedDesc);
|
params.setSortMethod(ReleaseSortMethod::AddedDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
}
|
}
|
||||||
@@ -137,7 +137,7 @@ namespace lms::api::subsonic
|
|||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setSortMethod(ReleaseSortMethod::Random);
|
params.setSortMethod(ReleaseSortMethod::Random);
|
||||||
params.setRange(Range{ 0, size });
|
params.setRange(Range{ 0, size });
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = Release::findIds(context.dbSession, params);
|
releases = Release::findIds(context.dbSession, params);
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ namespace lms::api::subsonic
|
|||||||
scrobbling::IScrobblingService::FindParameters params;
|
scrobbling::IScrobblingService::FindParameters params;
|
||||||
params.setUser(context.user->getId());
|
params.setUser(context.user->getId());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = scrobblingService.getRecentReleases(params);
|
releases = scrobblingService.getRecentReleases(params);
|
||||||
}
|
}
|
||||||
@@ -155,7 +155,7 @@ namespace lms::api::subsonic
|
|||||||
feedback::IFeedbackService::FindParameters params;
|
feedback::IFeedbackService::FindParameters params;
|
||||||
params.setUser(context.user->getId());
|
params.setUser(context.user->getId());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
releases = feedbackService.findStarredReleases(params);
|
releases = feedbackService.findStarredReleases(params);
|
||||||
}
|
}
|
||||||
@@ -203,7 +203,7 @@ namespace lms::api::subsonic
|
|||||||
|
|
||||||
feedback::IFeedbackService::FindParameters findParameters;
|
feedback::IFeedbackService::FindParameters findParameters;
|
||||||
findParameters.setUser(context.user->getId());
|
findParameters.setUser(context.user->getId());
|
||||||
findParameters.setMediaLibrary(mediaLibrary);
|
findParameters.filters.setMediaLibrary(mediaLibrary);
|
||||||
|
|
||||||
for (const ReleaseId releaseId : feedbackService.findStarredReleases(findParameters).results)
|
for (const ReleaseId releaseId : feedbackService.findStarredReleases(findParameters).results)
|
||||||
{
|
{
|
||||||
@@ -247,7 +247,7 @@ namespace lms::api::subsonic
|
|||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setSortMethod(TrackSortMethod::Random);
|
params.setSortMethod(TrackSortMethod::Random);
|
||||||
params.setRange(Range{ 0, size });
|
params.setRange(Range{ 0, size });
|
||||||
params.setMediaLibrary(mediaLibraryId);
|
params.filters.setMediaLibrary(mediaLibraryId);
|
||||||
|
|
||||||
Track::find(context.dbSession, params, [&](const Track::pointer& track) {
|
Track::find(context.dbSession, params, [&](const Track::pointer& track) {
|
||||||
randomSongsNode.addArrayChild("song", createSongNode(context, track, context.user));
|
randomSongsNode.addArrayChild("song", createSongNode(context, track, context.user));
|
||||||
@@ -283,9 +283,9 @@ namespace lms::api::subsonic
|
|||||||
Response::Node& songsByGenreNode{ response.createNode("songsByGenre") };
|
Response::Node& songsByGenreNode{ response.createNode("songsByGenre") };
|
||||||
|
|
||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setClusters(std::initializer_list<ClusterId>{ cluster->getId() });
|
params.filters.setClusters(std::initializer_list<ClusterId>{ cluster->getId() });
|
||||||
|
params.filters.setMediaLibrary(mediaLibrary);
|
||||||
params.setRange(Range{ offset, count });
|
params.setRange(Range{ offset, count });
|
||||||
params.setMediaLibrary(mediaLibrary);
|
|
||||||
|
|
||||||
Track::find(context.dbSession, params, [&](const Track::pointer& track) {
|
Track::find(context.dbSession, params, [&](const Track::pointer& track) {
|
||||||
songsByGenreNode.addArrayChild("song", createSongNode(context, track, context.user));
|
songsByGenreNode.addArrayChild("song", createSongNode(context, track, context.user));
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ namespace lms::api::subsonic
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
parameters.setMediaLibrary(mediaLibrary);
|
parameters.filters.setMediaLibrary(mediaLibrary);
|
||||||
|
|
||||||
// This endpoint does not scale: make sort lived transactions in order not to block the whole application
|
// This endpoint does not scale: make sort lived transactions in order not to block the whole application
|
||||||
|
|
||||||
|
|||||||
@@ -159,9 +159,9 @@ namespace lms::api::subsonic
|
|||||||
ArtistId lastRetrievedId;
|
ArtistId lastRetrievedId;
|
||||||
auto findArtists{ [&] {
|
auto findArtists{ [&] {
|
||||||
Artist::FindParameters params;
|
Artist::FindParameters params;
|
||||||
|
params.filters.setMediaLibrary(mediaLibrary);
|
||||||
params.setKeywords(keywords);
|
params.setKeywords(keywords);
|
||||||
params.setRange(Range{ artistOffset, artistCount });
|
params.setRange(Range{ artistOffset, artistCount });
|
||||||
params.setMediaLibrary(mediaLibrary);
|
|
||||||
params.setSortMethod(ArtistSortMethod::Id); // must be consistent with both methods
|
params.setSortMethod(ArtistSortMethod::Id); // must be consistent with both methods
|
||||||
|
|
||||||
Artist::find(context.dbSession, params, [&](const Artist::pointer& artist) {
|
Artist::find(context.dbSession, params, [&](const Artist::pointer& artist) {
|
||||||
@@ -225,7 +225,7 @@ namespace lms::api::subsonic
|
|||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setKeywords(keywords);
|
params.setKeywords(keywords);
|
||||||
params.setRange(Range{ albumOffset, albumCount });
|
params.setRange(Range{ albumOffset, albumCount });
|
||||||
params.setMediaLibrary(mediaLibrary);
|
params.filters.setMediaLibrary(mediaLibrary);
|
||||||
params.setSortMethod(ReleaseSortMethod::Id); // must be consistent with both methods
|
params.setSortMethod(ReleaseSortMethod::Id); // must be consistent with both methods
|
||||||
|
|
||||||
Release::find(context.dbSession, params, [&](const Release::pointer& release) {
|
Release::find(context.dbSession, params, [&](const Release::pointer& release) {
|
||||||
@@ -289,7 +289,7 @@ namespace lms::api::subsonic
|
|||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setKeywords(keywords);
|
params.setKeywords(keywords);
|
||||||
params.setRange(Range{ songOffset, songCount });
|
params.setRange(Range{ songOffset, songCount });
|
||||||
params.setMediaLibrary(mediaLibrary);
|
params.filters.setMediaLibrary(mediaLibrary);
|
||||||
params.setSortMethod(TrackSortMethod::Id); // must be consistent with both methods
|
params.setSortMethod(TrackSortMethod::Id); // must be consistent with both methods
|
||||||
|
|
||||||
Track::find(context.dbSession, params, [&](const Track::pointer& track) {
|
Track::find(context.dbSession, params, [&](const Track::pointer& track) {
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ namespace lms::ui
|
|||||||
scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() };
|
scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() };
|
||||||
|
|
||||||
const Range range{ getActualRange(requestedRange) };
|
const Range range{ getActualRange(requestedRange) };
|
||||||
const Filters& filters{ getFilters() };
|
|
||||||
|
|
||||||
RangeResults<ArtistId> artists;
|
RangeResults<ArtistId> artists;
|
||||||
|
|
||||||
@@ -53,11 +52,9 @@ namespace lms::ui
|
|||||||
case Mode::Starred:
|
case Mode::Starred:
|
||||||
{
|
{
|
||||||
feedback::IFeedbackService::ArtistFindParameters params;
|
feedback::IFeedbackService::ArtistFindParameters params;
|
||||||
|
params.setFilters(getDbFilters());
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(filters.getClusters());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setSortMethod(ArtistSortMethod::StarredDateDesc);
|
params.setSortMethod(ArtistSortMethod::StarredDateDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -69,10 +66,8 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
scrobbling::IScrobblingService::ArtistFindParameters params;
|
scrobbling::IScrobblingService::ArtistFindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -84,10 +79,8 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
scrobbling::IScrobblingService::ArtistFindParameters params;
|
scrobbling::IScrobblingService::ArtistFindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -98,10 +91,8 @@ namespace lms::ui
|
|||||||
case Mode::RecentlyAdded:
|
case Mode::RecentlyAdded:
|
||||||
{
|
{
|
||||||
Artist::FindParameters params;
|
Artist::FindParameters params;
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setSortMethod(ArtistSortMethod::AddedDesc);
|
params.setSortMethod(ArtistSortMethod::AddedDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -116,10 +107,8 @@ namespace lms::ui
|
|||||||
case Mode::RecentlyModified:
|
case Mode::RecentlyModified:
|
||||||
{
|
{
|
||||||
Artist::FindParameters params;
|
Artist::FindParameters params;
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setSortMethod(ArtistSortMethod::LastWrittenDesc);
|
params.setSortMethod(ArtistSortMethod::LastWrittenDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -134,9 +123,7 @@ namespace lms::ui
|
|||||||
case Mode::All:
|
case Mode::All:
|
||||||
{
|
{
|
||||||
Artist::FindParameters params;
|
Artist::FindParameters params;
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setSortMethod(ArtistSortMethod::SortName);
|
params.setSortMethod(ArtistSortMethod::SortName);
|
||||||
@@ -163,9 +150,7 @@ namespace lms::ui
|
|||||||
if (!_randomArtists)
|
if (!_randomArtists)
|
||||||
{
|
{
|
||||||
Artist::FindParameters params;
|
Artist::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setLinkType(_linkType);
|
params.setLinkType(_linkType);
|
||||||
params.setSortMethod(ArtistSortMethod::Random);
|
params.setSortMethod(ArtistSortMethod::Random);
|
||||||
|
|||||||
@@ -193,9 +193,7 @@ namespace lms::ui
|
|||||||
_releaseContainers.clear();
|
_releaseContainers.clear();
|
||||||
|
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(_filters.getClusters());
|
params.setFilters(_filters.getDbFilters());
|
||||||
params.setMediaLibrary(_filters.getMediaLibrary());
|
|
||||||
params.setLabel(_filters.getLabel());
|
|
||||||
params.setArtist(_artistId, { TrackArtistLinkType::ReleaseArtist }, {});
|
params.setArtist(_artistId, { TrackArtistLinkType::ReleaseArtist }, {});
|
||||||
params.setSortMethod(LmsApp->getUser()->getUIArtistReleaseSortMethod());
|
params.setSortMethod(LmsApp->getUser()->getUIArtistReleaseSortMethod());
|
||||||
|
|
||||||
@@ -252,9 +250,7 @@ namespace lms::ui
|
|||||||
_appearsOnReleaseContainer = {};
|
_appearsOnReleaseContainer = {};
|
||||||
|
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(_filters.getClusters());
|
params.setFilters(_filters.getDbFilters());
|
||||||
params.setMediaLibrary(_filters.getMediaLibrary());
|
|
||||||
params.setLabel(_filters.getLabel());
|
|
||||||
params.setArtist(_artistId, types, { TrackArtistLinkType::ReleaseArtist });
|
params.setArtist(_artistId, types, { TrackArtistLinkType::ReleaseArtist });
|
||||||
params.setSortMethod(ReleaseSortMethod::OriginalDateDesc);
|
params.setSortMethod(ReleaseSortMethod::OriginalDateDesc);
|
||||||
|
|
||||||
@@ -338,9 +334,7 @@ namespace lms::ui
|
|||||||
const Range range{ static_cast<std::size_t>(_trackContainer->getCount()), _tracksBatchSize };
|
const Range range{ static_cast<std::size_t>(_trackContainer->getCount()), _tracksBatchSize };
|
||||||
|
|
||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setClusters(_filters.getClusters());
|
params.setFilters(_filters.getDbFilters());
|
||||||
params.setMediaLibrary(_filters.getMediaLibrary());
|
|
||||||
params.setLabel(_filters.getLabel());
|
|
||||||
params.setArtist(_artistId);
|
params.setArtist(_artistId);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setSortMethod(TrackSortMethod::Name);
|
params.setSortMethod(TrackSortMethod::Name);
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "core/String.hpp"
|
#include "core/String.hpp"
|
||||||
|
|
||||||
|
#include "explore/Filters.hpp"
|
||||||
|
|
||||||
namespace lms::ui
|
namespace lms::ui
|
||||||
{
|
{
|
||||||
DatabaseCollectorBase::DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount)
|
DatabaseCollectorBase::DatabaseCollectorBase(Filters& filters, Mode defaultMode, std::size_t maxCount)
|
||||||
@@ -56,6 +58,11 @@ namespace lms::ui
|
|||||||
return _maxCount;
|
return _maxCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const db::Filters& DatabaseCollectorBase::getDbFilters() const
|
||||||
|
{
|
||||||
|
return _filters.getDbFilters();
|
||||||
|
}
|
||||||
|
|
||||||
void DatabaseCollectorBase::setSearch(std::string_view searchText)
|
void DatabaseCollectorBase::setSearch(std::string_view searchText)
|
||||||
{
|
{
|
||||||
_searchText = searchText;
|
_searchText = searchText;
|
||||||
|
|||||||
@@ -26,6 +26,11 @@
|
|||||||
|
|
||||||
#include "database/Types.hpp"
|
#include "database/Types.hpp"
|
||||||
|
|
||||||
|
namespace lms::db
|
||||||
|
{
|
||||||
|
struct Filters;
|
||||||
|
}
|
||||||
|
|
||||||
namespace lms::ui
|
namespace lms::ui
|
||||||
{
|
{
|
||||||
class Filters;
|
class Filters;
|
||||||
@@ -57,7 +62,7 @@ namespace lms::ui
|
|||||||
protected:
|
protected:
|
||||||
Range getActualRange(std::optional<Range> range) const;
|
Range getActualRange(std::optional<Range> range) const;
|
||||||
std::size_t getMaxCount() const;
|
std::size_t getMaxCount() const;
|
||||||
const Filters& getFilters() { return _filters; }
|
const db::Filters& getDbFilters() const;
|
||||||
const std::vector<std::string_view>& getSearchKeywords() const { return _searchKeywords; }
|
const std::vector<std::string_view>& getSearchKeywords() const { return _searchKeywords; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ namespace lms::ui
|
|||||||
|
|
||||||
void Filters::add(db::ClusterId clusterId)
|
void Filters::add(db::ClusterId clusterId)
|
||||||
{
|
{
|
||||||
if (std::find(std::cbegin(_clusterIds), std::cend(_clusterIds), clusterId) != std::cend(_clusterIds))
|
if (std::find(std::cbegin(_dbFilters.clusters), std::cend(_dbFilters.clusters), clusterId) != std::cend(_dbFilters.clusters))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Wt::WInteractWidget* filter{};
|
Wt::WInteractWidget* filter{};
|
||||||
@@ -195,11 +195,11 @@ namespace lms::ui
|
|||||||
filter = _filters->addWidget(std::move(cluster));
|
filter = _filters->addWidget(std::move(cluster));
|
||||||
}
|
}
|
||||||
|
|
||||||
_clusterIds.push_back(clusterId);
|
_dbFilters.clusters.push_back(clusterId);
|
||||||
|
|
||||||
filter->clicked().connect([this, filter, clusterId] {
|
filter->clicked().connect([this, filter, clusterId] {
|
||||||
_filters->removeWidget(filter);
|
_filters->removeWidget(filter);
|
||||||
_clusterIds.erase(std::remove_if(std::begin(_clusterIds), std::end(_clusterIds), [clusterId](db::ClusterId id) { return id == clusterId; }), std::end(_clusterIds));
|
_dbFilters.clusters.erase(std::remove_if(std::begin(_dbFilters.clusters), std::end(_dbFilters.clusters), [clusterId](db::ClusterId id) { return id == clusterId; }), std::end(_dbFilters.clusters));
|
||||||
_sigUpdated.emit();
|
_sigUpdated.emit();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
_filters->removeWidget(_mediaLibraryFilter);
|
_filters->removeWidget(_mediaLibraryFilter);
|
||||||
_mediaLibraryFilter = nullptr;
|
_mediaLibraryFilter = nullptr;
|
||||||
_mediaLibraryId = db::MediaLibraryId{};
|
_dbFilters.mediaLibrary = db::MediaLibraryId{};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string libraryName;
|
std::string libraryName;
|
||||||
@@ -226,11 +226,11 @@ namespace lms::ui
|
|||||||
libraryName = library->getName();
|
libraryName = library->getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
_mediaLibraryId = mediaLibraryId;
|
_dbFilters.mediaLibrary = mediaLibraryId;
|
||||||
_mediaLibraryFilter = _filters->addWidget(utils::createFilter(Wt::WString::fromUTF8(libraryName), Wt::WString::tr("Lms.Explore.media-library"), "bg-primary", true));
|
_mediaLibraryFilter = _filters->addWidget(utils::createFilter(Wt::WString::fromUTF8(libraryName), Wt::WString::tr("Lms.Explore.media-library"), "bg-primary", true));
|
||||||
_mediaLibraryFilter->clicked().connect(_mediaLibraryFilter, [this] {
|
_mediaLibraryFilter->clicked().connect(_mediaLibraryFilter, [this] {
|
||||||
_filters->removeWidget(_mediaLibraryFilter);
|
_filters->removeWidget(_mediaLibraryFilter);
|
||||||
_mediaLibraryId = db::MediaLibraryId{};
|
_dbFilters.mediaLibrary = db::MediaLibraryId{};
|
||||||
_mediaLibraryFilter = nullptr;
|
_mediaLibraryFilter = nullptr;
|
||||||
_sigUpdated.emit();
|
_sigUpdated.emit();
|
||||||
state::writeValue<db::MediaLibraryId::ValueType>("filters_media_library_id", std::nullopt);
|
state::writeValue<db::MediaLibraryId::ValueType>("filters_media_library_id", std::nullopt);
|
||||||
@@ -245,7 +245,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
_filters->removeWidget(_labelFilter);
|
_filters->removeWidget(_labelFilter);
|
||||||
_labelFilter = nullptr;
|
_labelFilter = nullptr;
|
||||||
_labelId = db::LabelId{};
|
_dbFilters.label = db::LabelId{};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
@@ -259,11 +259,11 @@ namespace lms::ui
|
|||||||
name = label->getName();
|
name = label->getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
_labelId = labelId;
|
_dbFilters.label = labelId;
|
||||||
_labelFilter = _filters->addWidget(utils::createFilter(Wt::WString::fromUTF8(name), Wt::WString::tr("Lms.Explore.label"), "bg-secondary", true));
|
_labelFilter = _filters->addWidget(utils::createFilter(Wt::WString::fromUTF8(name), Wt::WString::tr("Lms.Explore.label"), "bg-secondary", true));
|
||||||
_labelFilter->clicked().connect(_labelFilter, [this] {
|
_labelFilter->clicked().connect(_labelFilter, [this] {
|
||||||
_filters->removeWidget(_labelFilter);
|
_filters->removeWidget(_labelFilter);
|
||||||
_labelId = db::LabelId{};
|
_dbFilters.label = db::LabelId{};
|
||||||
_labelFilter = nullptr;
|
_labelFilter = nullptr;
|
||||||
_sigUpdated.emit();
|
_sigUpdated.emit();
|
||||||
state::writeValue<db::LabelId::ValueType>("filters_label_id", std::nullopt);
|
state::writeValue<db::LabelId::ValueType>("filters_label_id", std::nullopt);
|
||||||
|
|||||||
@@ -26,9 +26,7 @@
|
|||||||
#include <Wt/WSignal.h>
|
#include <Wt/WSignal.h>
|
||||||
#include <Wt/WTemplate.h>
|
#include <Wt/WTemplate.h>
|
||||||
|
|
||||||
#include "database/ClusterId.hpp"
|
#include "database/Filters.hpp"
|
||||||
#include "database/LabelId.hpp"
|
|
||||||
#include "database/MediaLibraryId.hpp"
|
|
||||||
|
|
||||||
namespace lms::ui
|
namespace lms::ui
|
||||||
{
|
{
|
||||||
@@ -37,9 +35,7 @@ namespace lms::ui
|
|||||||
public:
|
public:
|
||||||
Filters();
|
Filters();
|
||||||
|
|
||||||
std::span<const db::ClusterId> getClusters() const { return _clusterIds; }
|
const db::Filters& getDbFilters() const { return _dbFilters; }
|
||||||
db::MediaLibraryId getMediaLibrary() const { return _mediaLibraryId; }
|
|
||||||
db::LabelId getLabel() const { return _labelId; }
|
|
||||||
|
|
||||||
void add(db::ClusterId clusterId);
|
void add(db::ClusterId clusterId);
|
||||||
|
|
||||||
@@ -52,13 +48,11 @@ namespace lms::ui
|
|||||||
void emitFilterAddedNotification();
|
void emitFilterAddedNotification();
|
||||||
|
|
||||||
Wt::WContainerWidget* _filters{};
|
Wt::WContainerWidget* _filters{};
|
||||||
Wt::Signal<> _sigUpdated;
|
|
||||||
std::vector<db::ClusterId> _clusterIds;
|
|
||||||
|
|
||||||
Wt::WInteractWidget* _mediaLibraryFilter{};
|
Wt::WInteractWidget* _mediaLibraryFilter{};
|
||||||
db::MediaLibraryId _mediaLibraryId;
|
|
||||||
|
|
||||||
Wt::WInteractWidget* _labelFilter{};
|
Wt::WInteractWidget* _labelFilter{};
|
||||||
db::LabelId _labelId;
|
|
||||||
|
Wt::Signal<> _sigUpdated;
|
||||||
|
|
||||||
|
db::Filters _dbFilters;
|
||||||
};
|
};
|
||||||
} // namespace lms::ui
|
} // namespace lms::ui
|
||||||
|
|||||||
@@ -44,9 +44,7 @@ namespace lms::ui
|
|||||||
db::Track::FindParameters params;
|
db::Track::FindParameters params;
|
||||||
params.setArtist(artistId);
|
params.setArtist(artistId);
|
||||||
params.setSortMethod(db::TrackSortMethod::DateDescAndRelease);
|
params.setSortMethod(db::TrackSortMethod::DateDescAndRelease);
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(filters.getDbFilters());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(filters.getLabel());
|
|
||||||
params.setRange(db::Range{ 0, maxTrackCount - res.size() });
|
params.setRange(db::Range{ 0, maxTrackCount - res.size() });
|
||||||
|
|
||||||
const auto tracks{ db::Track::findIds(session, params) };
|
const auto tracks{ db::Track::findIds(session, params) };
|
||||||
@@ -75,9 +73,7 @@ namespace lms::ui
|
|||||||
db::Track::FindParameters params;
|
db::Track::FindParameters params;
|
||||||
params.setRelease(releaseId);
|
params.setRelease(releaseId);
|
||||||
params.setSortMethod(db::TrackSortMethod::Release);
|
params.setSortMethod(db::TrackSortMethod::Release);
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(filters.getDbFilters());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(filters.getLabel());
|
|
||||||
params.setRange(db::Range{ 0, maxTrackCount - res.size() });
|
params.setRange(db::Range{ 0, maxTrackCount - res.size() });
|
||||||
|
|
||||||
const auto tracks{ db::Track::findIds(session, params) };
|
const auto tracks{ db::Track::findIds(session, params) };
|
||||||
@@ -107,9 +103,7 @@ namespace lms::ui
|
|||||||
params.setRelease(disc.releaseId);
|
params.setRelease(disc.releaseId);
|
||||||
params.setSortMethod(db::TrackSortMethod::Release);
|
params.setSortMethod(db::TrackSortMethod::Release);
|
||||||
params.setDiscNumber(disc.discNumber);
|
params.setDiscNumber(disc.discNumber);
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(filters.getDbFilters());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(filters.getLabel());
|
|
||||||
params.setRange(db::Range{ 0, maxTrackCount - res.size() });
|
params.setRange(db::Range{ 0, maxTrackCount - res.size() });
|
||||||
|
|
||||||
const auto tracks{ db::Track::findIds(session, params) };
|
const auto tracks{ db::Track::findIds(session, params) };
|
||||||
@@ -133,9 +127,7 @@ namespace lms::ui
|
|||||||
|
|
||||||
db::Track::FindParameters params;
|
db::Track::FindParameters params;
|
||||||
params.setTrackList(trackListId);
|
params.setTrackList(trackListId);
|
||||||
params.setClusters(filters.getClusters());
|
params.setFilters(filters.getDbFilters());
|
||||||
params.setMediaLibrary(filters.getMediaLibrary());
|
|
||||||
params.setLabel(filters.getLabel());
|
|
||||||
params.setRange(db::Range{ 0, maxTrackCount });
|
params.setRange(db::Range{ 0, maxTrackCount });
|
||||||
params.setSortMethod(TrackSortMethod::TrackList);
|
params.setSortMethod(TrackSortMethod::TrackList);
|
||||||
|
|
||||||
|
|||||||
@@ -52,9 +52,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
feedback::IFeedbackService::FindParameters params;
|
feedback::IFeedbackService::FindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
releases = feedbackService.findStarredReleases(params);
|
releases = feedbackService.findStarredReleases(params);
|
||||||
@@ -65,9 +63,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
scrobbling::IScrobblingService::FindParameters params;
|
scrobbling::IScrobblingService::FindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -79,9 +75,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
scrobbling::IScrobblingService::FindParameters params;
|
scrobbling::IScrobblingService::FindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -92,9 +86,7 @@ namespace lms::ui
|
|||||||
case Mode::RecentlyAdded:
|
case Mode::RecentlyAdded:
|
||||||
{
|
{
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setSortMethod(ReleaseSortMethod::AddedDesc);
|
params.setSortMethod(ReleaseSortMethod::AddedDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -109,9 +101,7 @@ namespace lms::ui
|
|||||||
case Mode::RecentlyModified:
|
case Mode::RecentlyModified:
|
||||||
{
|
{
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setSortMethod(ReleaseSortMethod::LastWrittenDesc);
|
params.setSortMethod(ReleaseSortMethod::LastWrittenDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -126,9 +116,7 @@ namespace lms::ui
|
|||||||
case Mode::All:
|
case Mode::All:
|
||||||
{
|
{
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setSortMethod(ReleaseSortMethod::Name);
|
params.setSortMethod(ReleaseSortMethod::Name);
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -154,9 +142,7 @@ namespace lms::ui
|
|||||||
if (!_randomReleases)
|
if (!_randomReleases)
|
||||||
{
|
{
|
||||||
Release::FindParameters params;
|
Release::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setSortMethod(ReleaseSortMethod::Random);
|
params.setSortMethod(ReleaseSortMethod::Random);
|
||||||
params.setRange(Range{ 0, getMaxCount() });
|
params.setRange(Range{ 0, getMaxCount() });
|
||||||
|
|||||||
@@ -397,9 +397,7 @@ namespace lms::ui
|
|||||||
db::Track::FindParameters params;
|
db::Track::FindParameters params;
|
||||||
params.setRelease(_releaseId);
|
params.setRelease(_releaseId);
|
||||||
params.setSortMethod(db::TrackSortMethod::Release);
|
params.setSortMethod(db::TrackSortMethod::Release);
|
||||||
params.setClusters(_filters.getClusters());
|
params.setFilters(_filters.getDbFilters()); // TODO: do we really want to hide all tracks when a release does not match the current label filter?
|
||||||
params.setMediaLibrary(_filters.getMediaLibrary());
|
|
||||||
params.setLabel(_filters.getLabel()); // TODO: do we really want to hide all tracks when a release does not match the current label filter?
|
|
||||||
|
|
||||||
db::Track::find(LmsApp->getDbSession(), params, [&](const db::Track::pointer& track) {
|
db::Track::find(LmsApp->getDbSession(), params, [&](const db::Track::pointer& track) {
|
||||||
const db::TrackId trackId{ track->getId() };
|
const db::TrackId trackId{ track->getId() };
|
||||||
|
|||||||
@@ -52,9 +52,7 @@ namespace lms::ui
|
|||||||
case Mode::Starred:
|
case Mode::Starred:
|
||||||
{
|
{
|
||||||
feedback::IFeedbackService::FindParameters params;
|
feedback::IFeedbackService::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
@@ -66,9 +64,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
scrobbling::IScrobblingService::FindParameters params;
|
scrobbling::IScrobblingService::FindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -80,9 +76,7 @@ namespace lms::ui
|
|||||||
{
|
{
|
||||||
scrobbling::IScrobblingService::FindParameters params;
|
scrobbling::IScrobblingService::FindParameters params;
|
||||||
params.setUser(LmsApp->getUserId());
|
params.setUser(LmsApp->getUserId());
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -93,9 +87,7 @@ namespace lms::ui
|
|||||||
case Mode::RecentlyAdded:
|
case Mode::RecentlyAdded:
|
||||||
{
|
{
|
||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setSortMethod(TrackSortMethod::AddedDesc);
|
params.setSortMethod(TrackSortMethod::AddedDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -110,9 +102,7 @@ namespace lms::ui
|
|||||||
case Mode::RecentlyModified:
|
case Mode::RecentlyModified:
|
||||||
{
|
{
|
||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setSortMethod(TrackSortMethod::LastWrittenDesc);
|
params.setSortMethod(TrackSortMethod::LastWrittenDesc);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
@@ -127,9 +117,7 @@ namespace lms::ui
|
|||||||
case Mode::All:
|
case Mode::All:
|
||||||
{
|
{
|
||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
@@ -154,9 +142,7 @@ namespace lms::ui
|
|||||||
if (!_randomTracks)
|
if (!_randomTracks)
|
||||||
{
|
{
|
||||||
Track::FindParameters params;
|
Track::FindParameters params;
|
||||||
params.setClusters(getFilters().getClusters());
|
params.setFilters(getDbFilters());
|
||||||
params.setMediaLibrary(getFilters().getMediaLibrary());
|
|
||||||
params.setLabel(getFilters().getLabel());
|
|
||||||
params.setKeywords(getSearchKeywords());
|
params.setKeywords(getSearchKeywords());
|
||||||
params.setSortMethod(TrackSortMethod::Random);
|
params.setSortMethod(TrackSortMethod::Random);
|
||||||
params.setRange(Range{ 0, getMaxCount() });
|
params.setRange(Range{ 0, getMaxCount() });
|
||||||
|
|||||||
@@ -187,9 +187,7 @@ namespace lms::ui
|
|||||||
auto transaction{ LmsApp->getDbSession().createReadTransaction() };
|
auto transaction{ LmsApp->getDbSession().createReadTransaction() };
|
||||||
|
|
||||||
db::Track::FindParameters params;
|
db::Track::FindParameters params;
|
||||||
params.setClusters(_filters.getClusters());
|
params.setFilters(_filters.getDbFilters());
|
||||||
params.setMediaLibrary(_filters.getMediaLibrary());
|
|
||||||
params.setLabel(_filters.getLabel());
|
|
||||||
params.setTrackList(_trackListId);
|
params.setTrackList(_trackListId);
|
||||||
params.setSortMethod(db::TrackSortMethod::TrackList);
|
params.setSortMethod(db::TrackSortMethod::TrackList);
|
||||||
params.setRange(db::Range{ static_cast<std::size_t>(_container->getCount()), _batchSize });
|
params.setRange(db::Range{ static_cast<std::size_t>(_container->getCount()), _batchSize });
|
||||||
|
|||||||
@@ -120,8 +120,7 @@ namespace lms::ui
|
|||||||
|
|
||||||
if (!_searchText.empty())
|
if (!_searchText.empty())
|
||||||
params.setKeywords(core::stringUtils::splitString(_searchText, ' '));
|
params.setKeywords(core::stringUtils::splitString(_searchText, ' '));
|
||||||
params.setClusters(_filters.getClusters());
|
params.setFilters(_filters.getDbFilters());
|
||||||
params.setMediaLibrary(_filters.getMediaLibrary());
|
|
||||||
params.setType(TrackListType::PlayList);
|
params.setType(TrackListType::PlayList);
|
||||||
params.setRange(range);
|
params.setRange(range);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user