mirror of
https://github.com/clementine-player/Clementine
synced 2025-01-18 20:40:43 +01:00
Adding spot for a unique album ID and implementing on Spotify
To resolve albums with duplicate tracks Fixes issue 3429
This commit is contained in:
parent
970a615846
commit
9578c6c647
@ -114,6 +114,13 @@ struct Song::Private : public QSharedData {
|
||||
bool forced_compilation_on_; // Set by the user
|
||||
bool forced_compilation_off_; // Set by the user
|
||||
|
||||
// A unique album ID
|
||||
// Used to distinguish between albums from providers that have multiple
|
||||
// versions of a given album with the same title (e.g. Spotify).
|
||||
// This is never persisted, it is only stored temporarily for global search
|
||||
// results.
|
||||
int album_id_;
|
||||
|
||||
float rating_;
|
||||
int playcount_;
|
||||
int skipcount_;
|
||||
@ -177,6 +184,7 @@ Song::Private::Private()
|
||||
sampler_(false),
|
||||
forced_compilation_on_(false),
|
||||
forced_compilation_off_(false),
|
||||
album_id_(-1),
|
||||
rating_(-1.0),
|
||||
playcount_(0),
|
||||
skipcount_(0),
|
||||
@ -243,6 +251,7 @@ int Song::lastplayed() const { return d->lastplayed_; }
|
||||
int Song::score() const { return d->score_; }
|
||||
const QString& Song::cue_path() const { return d->cue_path_; }
|
||||
bool Song::has_cue() const { return !d->cue_path_.isEmpty(); }
|
||||
int Song::album_id() const { return d->album_id_; }
|
||||
qint64 Song::beginning_nanosec() const { return d->beginning_; }
|
||||
qint64 Song::end_nanosec() const { return d->end_; }
|
||||
qint64 Song::length_nanosec() const { return d->end_ - d->beginning_; }
|
||||
@ -280,6 +289,7 @@ void Song::set_genre(const QString& v) { d->genre_ = v; }
|
||||
void Song::set_comment(const QString& v) { d->comment_ = v; }
|
||||
void Song::set_compilation(bool v) { d->compilation_ = v; }
|
||||
void Song::set_sampler(bool v) { d->sampler_ = v; }
|
||||
void Song::set_album_id(int v) { d->album_id_ = v; }
|
||||
void Song::set_beginning_nanosec(qint64 v) { d->beginning_ = qMax(0ll, v); }
|
||||
void Song::set_end_nanosec(qint64 v) { d->end_ = v; }
|
||||
void Song::set_length_nanosec(qint64 v) { d->end_ = d->beginning_ + v; }
|
||||
|
@ -173,6 +173,7 @@ class Song {
|
||||
int skipcount() const;
|
||||
int lastplayed() const;
|
||||
int score() const;
|
||||
int album_id() const;
|
||||
|
||||
const QString& cue_path() const;
|
||||
bool has_cue() const;
|
||||
@ -242,6 +243,7 @@ class Song {
|
||||
void set_comment(const QString& v);
|
||||
void set_compilation(bool v);
|
||||
void set_sampler(bool v);
|
||||
void set_album_id(int v);
|
||||
void set_beginning_nanosec(qint64 v);
|
||||
void set_end_nanosec(qint64 v);
|
||||
void set_length_nanosec(qint64 v);
|
||||
|
@ -95,6 +95,7 @@ QStandardItem* GlobalSearchModel::BuildContainers(
|
||||
bool has_album_icon = false;
|
||||
QString display_text;
|
||||
QString sort_text;
|
||||
int unique_tag = -1;
|
||||
int year = 0;
|
||||
|
||||
switch (group_by_[level]) {
|
||||
@ -113,6 +114,7 @@ QStandardItem* GlobalSearchModel::BuildContainers(
|
||||
year = qMax(0, s.year());
|
||||
display_text = LibraryModel::PrettyYearAlbum(year, s.album());
|
||||
sort_text = LibraryModel::SortTextForYear(year) + s.album();
|
||||
unique_tag = s.album_id();
|
||||
has_album_icon = true;
|
||||
break;
|
||||
|
||||
@ -124,7 +126,12 @@ QStandardItem* GlobalSearchModel::BuildContainers(
|
||||
|
||||
case LibraryModel::GroupBy_Composer: display_text = s.composer();
|
||||
case LibraryModel::GroupBy_Genre: if (display_text.isNull()) display_text = s.genre();
|
||||
case LibraryModel::GroupBy_Album: if (display_text.isNull()) display_text = s.album();
|
||||
case LibraryModel::GroupBy_Album:
|
||||
unique_tag = s.album_id();
|
||||
if (display_text.isNull()) {
|
||||
display_text = s.album();
|
||||
}
|
||||
// fallthrough
|
||||
case LibraryModel::GroupBy_AlbumArtist: if (display_text.isNull()) display_text = s.effective_albumartist();
|
||||
display_text = LibraryModel::TextOrUnknown(display_text);
|
||||
sort_text = LibraryModel::SortTextForArtist(display_text);
|
||||
@ -141,7 +148,7 @@ QStandardItem* GlobalSearchModel::BuildContainers(
|
||||
}
|
||||
|
||||
// Find a container for this level
|
||||
key->group_[level] = display_text;
|
||||
key->group_[level] = display_text + QString::number(unique_tag);
|
||||
QStandardItem* container = containers_[*key];
|
||||
if (!container) {
|
||||
container = new QStandardItem(display_text);
|
||||
|
@ -107,6 +107,10 @@ void SpotifySearchProvider::SearchFinishedSlot(const pb::spotify::SearchResponse
|
||||
for (int j=0; j < album.track_size() ; ++j) {
|
||||
Result result(this);
|
||||
SpotifyService::SongFromProtobuf(album.track(j), &result.metadata_);
|
||||
|
||||
// Just use the album index as an id.
|
||||
result.metadata_.set_album_id(i);
|
||||
|
||||
ret << result;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user