Sort music brainz releases according to status
This commit is contained in:
parent
f34f868c0f
commit
16b2ac547c
|
@ -295,6 +295,7 @@ MusicBrainzClient::ResultList MusicBrainzClient::ParseTrack(
|
||||||
if (releases.isEmpty()) {
|
if (releases.isEmpty()) {
|
||||||
ret << result;
|
ret << result;
|
||||||
} else {
|
} else {
|
||||||
|
qStableSort(releases);
|
||||||
for (const Release& release : releases) {
|
for (const Release& release : releases) {
|
||||||
ret << release.CopyAndMergeInto(result);
|
ret << release.CopyAndMergeInto(result);
|
||||||
}
|
}
|
||||||
|
@ -336,6 +337,8 @@ MusicBrainzClient::Release MusicBrainzClient::ParseRelease(
|
||||||
QStringRef name = reader->name();
|
QStringRef name = reader->name();
|
||||||
if (name == "title") {
|
if (name == "title") {
|
||||||
ret.album_ = reader->readElementText();
|
ret.album_ = reader->readElementText();
|
||||||
|
} else if (name == "status") {
|
||||||
|
ret.SetStatusFromString(reader->readElementText());
|
||||||
} else if (name == "date") {
|
} else if (name == "date") {
|
||||||
QRegExp regex(kDateRegex);
|
QRegExp regex(kDateRegex);
|
||||||
if (regex.indexIn(reader->readElementText()) == 0) {
|
if (regex.indexIn(reader->readElementText()) == 0) {
|
||||||
|
|
|
@ -110,7 +110,16 @@ signals:
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Release {
|
struct Release {
|
||||||
Release() : track_(0), year_(0) {}
|
|
||||||
|
enum Status {
|
||||||
|
Status_Unknown = 0,
|
||||||
|
Status_PseudoRelease,
|
||||||
|
Status_Bootleg,
|
||||||
|
Status_Promotional,
|
||||||
|
Status_Official
|
||||||
|
};
|
||||||
|
|
||||||
|
Release() : track_(0), year_(0), status_(Status_Unknown) {}
|
||||||
|
|
||||||
Result CopyAndMergeInto(const Result& orig) const {
|
Result CopyAndMergeInto(const Result& orig) const {
|
||||||
Result ret(orig);
|
Result ret(orig);
|
||||||
|
@ -120,9 +129,30 @@ signals:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetStatusFromString(const QString& s) {
|
||||||
|
if (s.compare("Official", Qt::CaseInsensitive) == 0) {
|
||||||
|
status_ = Status_Official;
|
||||||
|
} else if (s.compare("Promotion", Qt::CaseInsensitive) == 0) {
|
||||||
|
status_ = Status_Promotional;
|
||||||
|
} else if (s.compare("Bootleg", Qt::CaseInsensitive) == 0) {
|
||||||
|
status_ = Status_Bootleg;
|
||||||
|
} else if (s.compare("Pseudo-release", Qt::CaseInsensitive) == 0) {
|
||||||
|
status_ = Status_PseudoRelease;
|
||||||
|
} else {
|
||||||
|
status_ = Status_Unknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator<(const Release& other) const {
|
||||||
|
// Compare status so that "best" status (e.g. Official) will be first
|
||||||
|
// when sorting a list of releases.
|
||||||
|
return status_ > other.status_;
|
||||||
|
}
|
||||||
|
|
||||||
QString album_;
|
QString album_;
|
||||||
int track_;
|
int track_;
|
||||||
int year_;
|
int year_;
|
||||||
|
Status status_;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PendingResults {
|
struct PendingResults {
|
||||||
|
|
Loading…
Reference in New Issue