Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/dialogs/trackselectiondialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ void TrackSelectionDialog::SaveData(const QList<Data> &_data) const {
copy.set_album(new_metadata.album());
copy.set_track(new_metadata.track());
copy.set_year(new_metadata.year());
copy.set_musicbrainz_recording_id(new_metadata.musicbrainz_recording_id());

const TagReaderResult result = tagreader_client_->WriteFileBlocking(copy.url().toLocalFile(), copy, TagReaderClient::SaveOption::Tags, SaveTagCoverData());
if (!result.success()) {
Expand Down
10 changes: 7 additions & 3 deletions src/musicbrainz/musicbrainzclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,14 +190,14 @@ void MusicBrainzClient::SendMbIdRequest(const MbIdRequest &request) {
url_query.addQueryItem(u"fmt"_s, u"json"_s);

QNetworkReply *reply = CreateGetRequest(QUrl(QString::fromLatin1(kTrackUrl) + request.mbid), url_query);
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, request]() { MbIdRequestFinished(reply, request.id, request.number); });
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, request]() { MbIdRequestFinished(reply, request.id, request.number, request.mbid); });
mbid_requests_.insert(request.id, reply);

timeouts_->AddReply(reply);

}

void MusicBrainzClient::MbIdRequestFinished(QNetworkReply *reply, const int id, const int request_number) {
void MusicBrainzClient::MbIdRequestFinished(QNetworkReply *reply, const int id, const int request_number, const QString &mbid) {

if (replies_.contains(reply)) {
replies_.removeAll(reply);
Expand All @@ -223,7 +223,11 @@ void MusicBrainzClient::MbIdRequestFinished(QNetworkReply *reply, const int id,
if (object_root.contains("releases"_L1) && object_root.value("releases"_L1).isArray()) {
const ReleaseList releases = ParseReleases(object_root.value("releases"_L1).toArray());
if (!releases.isEmpty()) {
pending_results_[id] << PendingResults(request_number, ResultListFromReleases(releases));
ResultList results = ResultListFromReleases(releases);
for (Result &result : results) {
result.musicbrainz_recording_id_ = mbid;
}
pending_results_[id] << PendingResults(request_number, results);
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/musicbrainz/musicbrainzclient.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class MusicBrainzClient : public JsonBaseRequest {
int duration_msec_;
int track_;
int year_;
QString musicbrainz_recording_id_;
};
using ResultList = QList<Result>;

Expand All @@ -105,7 +106,7 @@ class MusicBrainzClient : public JsonBaseRequest {
private Q_SLOTS:
void FlushRequests();
// ID identifies the track, and request_number means it's the 'request_number'th request for this track
void MbIdRequestFinished(QNetworkReply *reply, const int id, const int request_number);
void MbIdRequestFinished(QNetworkReply *reply, const int id, const int request_number, const QString &mbid);
void DiscIdRequestFinished(const QString &discid, QNetworkReply *reply);

private:
Expand Down
1 change: 1 addition & 0 deletions src/musicbrainz/tagfetcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ void TagFetcher::TagsFetched(const int index, const MusicBrainzClient::ResultLis
song.set_artistsort(result.sort_artist_);
song.set_track(result.track_);
song.set_year(result.year_);
song.set_musicbrainz_recording_id(result.musicbrainz_recording_id_);
if (!result.album_artist_.isEmpty() && result.album_artist_ != result.artist_) {
song.set_albumartist(result.album_artist_);
}
Expand Down
16 changes: 16 additions & 0 deletions src/tagreader/tagreadertaglib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,9 @@ void TagReaderTagLib::ParseID3v2Tags(TagLib::ID3v2::Tag *tag, QString *disc, QSt
if (frame->description() == kID3v2_AcoustId_Fingerprint) {
song->set_acoustid_fingerprint(frame_field_list.back());
}
if (frame->description() == kID3v2_MusicBrainz_RecordingId) {
song->set_musicbrainz_recording_id(frame_field_list.back());
}
if (frame->description() == kID3v2_MusicBrainz_AlbumArtistId) {
song->set_musicbrainz_album_artist_id(TagLibStringListToSlashSeparatedString(frame_field_list, 1));
}
Expand Down Expand Up @@ -1199,6 +1202,9 @@ TagReaderResult TagReaderTagLib::WriteFile(const QString &filename, const Song &
tag->setItem(kMP4_Lyrics, TagLib::StringList(QStringToTagLibString(song.lyrics())));
tag->setItem(kMP4_AlbumArtist, TagLib::StringList(QStringToTagLibString(song.albumartist())));
tag->setItem(kMP4_Compilation, TagLib::MP4::Item(song.compilation()));
if (!song.musicbrainz_recording_id().isEmpty()) {
tag->setItem(kMP4_MusicBrainz_RecordingId, TagLib::StringList(QStringToTagLibString(song.musicbrainz_recording_id())));
}
}
if (save_playcount) {
SetPlaycount(tag, song.playcount());
Expand Down Expand Up @@ -1330,6 +1336,9 @@ void TagReaderTagLib::SetID3v2Tag(TagLib::ID3v2::Tag *tag, const Song &song) con
SetTextFrame(kID3v2_TitleSort, song.titlesort().isEmpty() ? QString() : song.titlesort(), tag);
SetTextFrame(kID3v2_Compilation, song.compilation() ? QString::number(1) : QString(), tag);
SetUnsyncLyricsFrame(song.lyrics().isEmpty() ? QString() : song.lyrics(), tag);
if (!song.musicbrainz_recording_id().isEmpty()) {
SetUserTextFrame(QLatin1String(kID3v2_MusicBrainz_RecordingId), song.musicbrainz_recording_id(), tag);
}

}

Expand Down Expand Up @@ -1433,6 +1442,9 @@ void TagReaderTagLib::SetVorbisComments(TagLib::Ogg::XiphComment *vorbis_comment

vorbis_comment->addField(kVorbisComment_Lyrics, QStringToTagLibString(song.lyrics()), true);
vorbis_comment->removeFields(kVorbisComment_UnsyncedLyrics);
if (!song.musicbrainz_recording_id().isEmpty()) {
vorbis_comment->addField(kVorbisComment_MusicBrainz_TackId, QStringToTagLibString(song.musicbrainz_recording_id()), true);
}

}

Expand All @@ -1445,6 +1457,9 @@ void TagReaderTagLib::SetAPETag(TagLib::APE::Tag *tag, const Song &song) const {
tag->setItem(kAPE_Performer, TagLib::APE::Item(kAPE_Performer, TagLib::StringList(QStringToTagLibString(song.performer()))));
tag->setItem(kAPE_Lyrics, TagLib::APE::Item(kAPE_Lyrics, QStringToTagLibString(song.lyrics())));
tag->addValue(kAPE_Compilation, QStringToTagLibString(song.compilation() ? QString::number(1) : QString()), true);
if (!song.musicbrainz_recording_id().isEmpty()) {
tag->setItem(kAPE_MusicBrainz_TackId, TagLib::APE::Item(kAPE_MusicBrainz_TackId, TagLib::StringList(QStringToTagLibString(song.musicbrainz_recording_id()))));
}

}

Expand All @@ -1456,6 +1471,7 @@ void TagReaderTagLib::SetASFTag(TagLib::ASF::Tag *tag, const Song &song) const {
SetAsfAttribute(tag, kASF_Disc, song.disc());
SetAsfAttribute(tag, kASF_OriginalDate, song.originalyear());
SetAsfAttribute(tag, kASF_OriginalYear, song.originalyear());
SetAsfAttribute(tag, kASF_MusicBrainz_RecordingId, song.musicbrainz_recording_id());

}

Expand Down