Extend article sorting to artist and album artist (#210)

This commit is contained in:
Gavin D. Howard 2019-07-11 08:51:25 -06:00 committed by Jonas Kvinge
parent dcf0d6f72d
commit 3a86a93154
3 changed files with 22 additions and 14 deletions

View File

@ -167,7 +167,9 @@ struct Song::Private : public QSharedData {
QString album_; QString album_;
QString album_sortable_; QString album_sortable_;
QString artist_; QString artist_;
QString artist_sortable_;
QString albumartist_; QString albumartist_;
QString albumartist_sortable_;
int track_; int track_;
int disc_; int disc_;
int year_; int year_;
@ -288,9 +290,12 @@ const QString &Song::album_sortable() const { return d->album_sortable_; }
// This value is useful for singles, which are one-track albums on their own. // This value is useful for singles, which are one-track albums on their own.
const QString &Song::effective_album() const { return d->album_.isEmpty() ? d->title_ : d->album_; } const QString &Song::effective_album() const { return d->album_.isEmpty() ? d->title_ : d->album_; }
const QString &Song::artist() const { return d->artist_; } const QString &Song::artist() const { return d->artist_; }
const QString &Song::artist_sortable() const { return d->artist_sortable_; }
const QString &Song::albumartist() const { return d->albumartist_; } const QString &Song::albumartist() const { return d->albumartist_; }
const QString &Song::albumartist_sortable() const { return d->albumartist_sortable_; }
const QString &Song::effective_albumartist() const { return d->albumartist_.isEmpty() ? d->artist_ : d->albumartist_; } const QString &Song::effective_albumartist() const { return d->albumartist_.isEmpty() ? d->artist_ : d->albumartist_; }
const QString &Song::playlist_albumartist() const { return is_compilation() ? d->albumartist_ : effective_albumartist(); } const QString &Song::effective_albumartist_sortable() const { return d->albumartist_.isEmpty() ? d->artist_sortable_ : d->albumartist_sortable_; }
const QString &Song::playlist_albumartist() const { return is_compilation() ? d->albumartist_sortable_ : effective_albumartist_sortable(); }
int Song::track() const { return d->track_; } int Song::track() const { return d->track_; }
int Song::disc() const { return d->disc_; } int Song::disc() const { return d->disc_; }
int Song::year() const { return d->year_; } int Song::year() const { return d->year_; }
@ -387,8 +392,8 @@ QString Song::sortable(const QString &v) const {
void Song::set_title(const QString &v) { d->title_sortable_ = sortable(v); d->title_ = v; } void Song::set_title(const QString &v) { d->title_sortable_ = sortable(v); d->title_ = v; }
void Song::set_album(const QString &v) { d->album_sortable_ = sortable(v); d->album_ = v; } void Song::set_album(const QString &v) { d->album_sortable_ = sortable(v); d->album_ = v; }
void Song::set_artist(const QString &v) { d->artist_ = v; } void Song::set_artist(const QString &v) { d->artist_sortable_ = sortable(v); d->artist_ = v; }
void Song::set_albumartist(const QString &v) { d->albumartist_ = v; } void Song::set_albumartist(const QString &v) { d->albumartist_sortable_ = sortable(v); d->albumartist_ = v; }
void Song::set_track(int v) { d->track_ = v; } void Song::set_track(int v) { d->track_ = v; }
void Song::set_disc(int v) { d->disc_ = v; } void Song::set_disc(int v) { d->disc_ = v; }
void Song::set_year(int v) { d->year_ = v; } void Song::set_year(int v) { d->year_ = v; }
@ -625,7 +630,7 @@ void Song::Init(const QString &title, const QString &artist, const QString &albu
d->valid_ = true; d->valid_ = true;
set_title(title); set_title(title);
d->artist_ = artist; set_artist(artist);
set_album(album); set_album(album);
set_length_nanosec(length_nanosec); set_length_nanosec(length_nanosec);
@ -637,7 +642,7 @@ void Song::Init(const QString &title, const QString &artist, const QString &albu
d->valid_ = true; d->valid_ = true;
set_title(title); set_title(title);
d->artist_ = artist; set_artist(artist);
set_album(album); set_album(album);
d->beginning_ = beginning; d->beginning_ = beginning;
@ -665,8 +670,8 @@ void Song::InitFromProtobuf(const pb::tagreader::SongMetadata &pb) {
d->valid_ = pb.valid(); d->valid_ = pb.valid();
set_title(QStringFromStdString(pb.title())); set_title(QStringFromStdString(pb.title()));
set_album(QStringFromStdString(pb.album())); set_album(QStringFromStdString(pb.album()));
d->artist_ = QStringFromStdString(pb.artist()); set_artist(QStringFromStdString(pb.artist()));
d->albumartist_ = QStringFromStdString(pb.albumartist()); set_albumartist(QStringFromStdString(pb.albumartist()));
d->track_ = pb.track(); d->track_ = pb.track();
d->disc_ = pb.disc(); d->disc_ = pb.disc();
d->year_ = pb.year(); d->year_ = pb.year();
@ -772,10 +777,10 @@ void Song::InitFromQuery(const SqlRow &q, bool reliable_metadata, int col) {
set_album(tostr(x)); set_album(tostr(x));
} }
else if (Song::kColumns.value(i) == "artist") { else if (Song::kColumns.value(i) == "artist") {
d->artist_ = tostr(x); set_artist(tostr(x));
} }
else if (Song::kColumns.value(i) == "albumartist") { else if (Song::kColumns.value(i) == "albumartist") {
d->albumartist_ = tostr(x); set_albumartist(tostr(x));
} }
else if (Song::kColumns.value(i) == "track") { else if (Song::kColumns.value(i) == "track") {
d->track_ = toint(x); d->track_ = toint(x);
@ -973,8 +978,8 @@ void Song::InitFromItdb(const Itdb_Track *track, const QString &prefix) {
set_title(QString::fromUtf8(track->title)); set_title(QString::fromUtf8(track->title));
set_album(QString::fromUtf8(track->album)); set_album(QString::fromUtf8(track->album));
d->artist_ = QString::fromUtf8(track->artist); set_artist(QString::fromUtf8(track->artist));
d->albumartist_ = QString::fromUtf8(track->albumartist); set_albumartist(QString::fromUtf8(track->albumartist));
d->track_ = track->track_nr; d->track_ = track->track_nr;
d->disc_ = track->cd_nr; d->disc_ = track->cd_nr;
d->year_ = track->year; d->year_ = track->year;
@ -1052,7 +1057,7 @@ void Song::InitFromMTP(const LIBMTP_track_t *track, const QString &host) {
d->valid_ = true; d->valid_ = true;
set_title(QString::fromUtf8(track->title)); set_title(QString::fromUtf8(track->title));
d->artist_ = QString::fromUtf8(track->artist); set_artist(QString::fromUtf8(track->artist));
set_album(QString::fromUtf8(track->album)); set_album(QString::fromUtf8(track->album));
d->genre_ = QString::fromUtf8(track->genre); d->genre_ = QString::fromUtf8(track->genre);
d->composer_ = QString::fromUtf8(track->composer); d->composer_ = QString::fromUtf8(track->composer);
@ -1142,7 +1147,7 @@ void Song::MergeFromSimpleMetaBundle(const Engine::SimpleMetaBundle &bundle) {
d->valid_ = true; d->valid_ = true;
if (!bundle.title.isEmpty()) set_title(bundle.title); if (!bundle.title.isEmpty()) set_title(bundle.title);
if (!bundle.artist.isEmpty()) d->artist_ = bundle.artist; if (!bundle.artist.isEmpty()) set_artist(bundle.artist);
if (!bundle.album.isEmpty()) set_album(bundle.album); if (!bundle.album.isEmpty()) set_album(bundle.album);
if (!bundle.comment.isEmpty()) d->comment_ = bundle.comment; if (!bundle.comment.isEmpty()) d->comment_ = bundle.comment;
if (!bundle.genre.isEmpty()) d->genre_ = bundle.genre; if (!bundle.genre.isEmpty()) d->genre_ = bundle.genre;

View File

@ -190,7 +190,9 @@ class Song {
const QString &album() const; const QString &album() const;
const QString &album_sortable() const; const QString &album_sortable() const;
const QString &artist() const; const QString &artist() const;
const QString &artist_sortable() const;
const QString &albumartist() const; const QString &albumartist() const;
const QString &albumartist_sortable() const;
int track() const; int track() const;
int disc() const; int disc() const;
int year() const; int year() const;
@ -237,6 +239,7 @@ class Song {
const QString &effective_album() const; const QString &effective_album() const;
int effective_originalyear() const; int effective_originalyear() const;
const QString &effective_albumartist() const; const QString &effective_albumartist() const;
const QString &effective_albumartist_sortable() const;
bool is_collection_song() const; bool is_collection_song() const;
bool is_stream() const; bool is_stream() const;

View File

@ -1103,7 +1103,7 @@ bool Playlist::CompareItems(int column, Qt::SortOrder order, shared_ptr<Playlist
switch (column) { switch (column) {
case Column_Title: strcmp(title_sortable); case Column_Title: strcmp(title_sortable);
case Column_Artist: strcmp(artist); case Column_Artist: strcmp(artist_sortable);
case Column_Album: strcmp(album_sortable); case Column_Album: strcmp(album_sortable);
case Column_Length: cmp(length_nanosec); case Column_Length: cmp(length_nanosec);
case Column_Track: cmp(track); case Column_Track: cmp(track);