diff --git a/src/database/Artist.cpp b/src/database/Artist.cpp index bd022bf8..c898eb4f 100644 --- a/src/database/Artist.cpp +++ b/src/database/Artist.cpp @@ -31,8 +31,9 @@ namespace Database { Artist::Artist(const std::string& name, const std::string& MBID) -: _name{std::string(name, 0 , _maxNameLength)}, -_MBID{MBID} +: _name {std::string(name, 0 , _maxNameLength)}, +_sortName {_name}, +_MBID {MBID} { } @@ -68,7 +69,7 @@ Artist::getAll(Wt::Dbo::Session& session, boost::optional offset, b Wt::Dbo::collection res = session.find() .offset(offset ? static_cast(*offset) : -1) .limit(size ? static_cast(*size) : -1) - .orderBy("name COLLATE NOCASE"); + .orderBy("sort_name COLLATE NOCASE"); return std::vector(res.begin(), res.end()); } @@ -111,7 +112,7 @@ getQuery(Wt::Dbo::Session& session, if (!clusterIds.empty()) oss << " GROUP BY t.id HAVING COUNT(*) = " << clusterIds.size(); - oss << " ORDER BY a.name COLLATE NOCASE"; + oss << " ORDER BY a.sort_name COLLATE NOCASE"; Wt::Dbo::Query query = session.query( oss.str() ); @@ -255,4 +256,10 @@ Artist::getClusterGroups(std::vector clusterTypes, std::si return res; } +void +Artist::setSortName(const std::string& sortName) +{ + _sortName = std::string(sortName, 0 , _maxNameLength); +} + } // namespace Database diff --git a/src/database/Artist.hpp b/src/database/Artist.hpp index bb376461..f60c4060 100644 --- a/src/database/Artist.hpp +++ b/src/database/Artist.hpp @@ -74,7 +74,8 @@ class Artist : public Wt::Dbo::Dbo // size is the max number of cluster per cluster type std::vector>> getClusterGroups(std::vector> clusterTypes, std::size_t size) const; - void setMBID(std::string mbid) { _MBID = mbid; } + void setMBID(const std::string& mbid) { _MBID = mbid; } + void setSortName(const std::string& sortName); // Create static pointer create(Wt::Dbo::Session& session, const std::string& name, const std::string& MBID = ""); @@ -84,6 +85,7 @@ class Artist : public Wt::Dbo::Dbo void persist(Action& a) { Wt::Dbo::field(a, _name, "name"); + Wt::Dbo::field(a, _name, "sort_name"); Wt::Dbo::field(a, _MBID, "mbid"); Wt::Dbo::hasMany(a, _tracks, Wt::Dbo::ManyToMany, "track_artist", "", Wt::Dbo::OnDeleteCascade); @@ -94,6 +96,7 @@ class Artist : public Wt::Dbo::Dbo static const std::size_t _maxNameLength = 128; std::string _name; + std::string _sortName; std::string _MBID; // Musicbrainz Identifier Wt::Dbo::collection> _tracks; // Tracks of this artist diff --git a/tools/similarity/Makefile.am b/tools/similarity/Makefile.am index bc7eb69b..ee51c219 100644 --- a/tools/similarity/Makefile.am +++ b/tools/similarity/Makefile.am @@ -1,4 +1,4 @@ -bin_PROGRAMS = lms-similarity +noinst_PROGRAMS = lms-similarity lms_similarity_SOURCES = \ $(srcdir)/LmsSimilarity.cpp \