From 32b2afbb977f8f07dbc09e087bb88c3877b31d73 Mon Sep 17 00:00:00 2001 From: Mattias Andersson Date: Sun, 14 Jun 2015 08:45:39 +0200 Subject: [PATCH] Parse the year of a disc from musicbrainz. Run make format --- src/musicbrainz/musicbrainzclient.cpp | 38 +++++++++++++++++++-------- tests/musicbrainzclient_test.cpp | 11 ++++---- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/musicbrainz/musicbrainzclient.cpp b/src/musicbrainz/musicbrainzclient.cpp index 576af44d8..25b1b7c11 100644 --- a/src/musicbrainz/musicbrainzclient.cpp +++ b/src/musicbrainz/musicbrainzclient.cpp @@ -55,8 +55,8 @@ void MusicBrainzClient::Start(int id, const QStringList& mbid_list) { QNetworkReply* reply = network_->get(req); NewClosure(reply, SIGNAL(finished()), this, - SLOT(RequestFinished(QNetworkReply*, int, int)), - reply, id, request_number++); + SLOT(RequestFinished(QNetworkReply*, int, int)), reply, id, + request_number++); requests_.insert(id, reply); timeouts_->AddReply(reply); @@ -99,12 +99,13 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString& discid, ResultList ret; QString artist; QString album; + int year = 0; if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200) { - qLog(Error) << "Error:" << - reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << - "http status code received"; + qLog(Error) << "Error:" + << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) + .toInt() << "http status code received"; qLog(Error) << reply->readAll(); emit Finished(artist, album, ret); return; @@ -113,6 +114,7 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString& discid, // Parse xml result: // -get title // -get artist + // -get year // -get all the tracks' tags // Note: If there are multiple releases for the discid, the first // release is chosen. @@ -123,6 +125,11 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString& discid, QStringRef name = reader.name(); if (name == "title") { album = reader.readElementText(); + } else if (name == "date") { + QRegExp regex(kDateRegex); + if (regex.indexIn(reader.readElementText()) == 0) { + year = regex.cap(0).toInt(); + } } else if (name == "artist-credit") { ParseArtist(&reader, &artist); } else if (name == "medium-list") { @@ -151,16 +158,25 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString& discid, } } + // If we parsed a year, copy it to the tracks. + if (year > 0) { + for (ResultList::iterator it = ret.begin(); it != ret.end(); ++it) { + it->year_ = year; + } + } + emit Finished(artist, album, UniqueResults(ret, SortResults)); } -void MusicBrainzClient::RequestFinished(QNetworkReply* reply, int id, int request_number) { +void MusicBrainzClient::RequestFinished(QNetworkReply* reply, int id, + int request_number) { reply->deleteLater(); const int nb_removed = requests_.remove(id, reply); if (nb_removed != 1) { - qLog(Error) << "Error: unknown reply received:" << nb_removed << - "requests removed, while only one was supposed to be removed"; + qLog(Error) + << "Error: unknown reply received:" << nb_removed + << "requests removed, while only one was supposed to be removed"; } if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == @@ -180,8 +196,9 @@ void MusicBrainzClient::RequestFinished(QNetworkReply* reply, int id, int reques } pending_results_[id] << PendingResults(request_number, res); } else { - qLog(Error) << "Error:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << - "http status code received"; + qLog(Error) << "Error:" + << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute) + .toInt() << "http status code received"; qLog(Error) << reply->readAll(); } @@ -361,7 +378,6 @@ MusicBrainzClient::Release MusicBrainzClient::ParseRelease( MusicBrainzClient::ResultList MusicBrainzClient::UniqueResults( const ResultList& results, UniqueResultsSortOption opt) { - ResultList ret; if (opt == SortResults) { ret = QSet::fromList(results).toList(); diff --git a/tests/musicbrainzclient_test.cpp b/tests/musicbrainzclient_test.cpp index 715edd890..4b019ce6e 100644 --- a/tests/musicbrainzclient_test.cpp +++ b/tests/musicbrainzclient_test.cpp @@ -41,9 +41,7 @@ class MusicBrainzClientTest : public ::testing::Test { qRegisterMetaType("MusicBrainzClient::ResultList"); } - void SetUp() { - mock_network_.reset(new MockNetworkAccessManager); - } + void SetUp() { mock_network_.reset(new MockNetworkAccessManager); } // Reads the data from a file into a QByteArray and returns it. QByteArray ReadDataFromFile(const QString& filename) { @@ -56,7 +54,6 @@ class MusicBrainzClientTest : public ::testing::Test { std::unique_ptr mock_network_; }; - // Test if a discid that do not exist in the musicbrainz database // generates an empty result. TEST_F(MusicBrainzClientTest, DiscIdNotFound) { @@ -111,6 +108,7 @@ TEST_F(MusicBrainzClientTest, ParseDiscID) { const QString expected_artist = "Symphony X"; const QString expected_title = "Live on the Edge of Forever"; const int expected_number_of_tracks = 6; + const int expected_year = 2001; // Create a MusicBrainzClient instance with mock_network_. MusicBrainzClient musicbrainz_client(nullptr, mock_network_.get()); @@ -149,9 +147,10 @@ TEST_F(MusicBrainzClientTest, ParseDiscID) { EXPECT_EQ(expected_number_of_tracks, tracks.count()); // Check that the tracks is ordered by track number in ascending - // order. + // order and that the expected year is added to all tracks. for (int i = 0; i < tracks.count(); ++i) { EXPECT_EQ(i + 1, tracks[i].track_); + EXPECT_EQ(expected_year, tracks[i].year_); } // Check some track information. @@ -174,6 +173,7 @@ TEST_F(MusicBrainzClientTest, ParseTrack) { const QString expected_title = "Victoria und ihr Husar: Pardon Madame"; const QString expected_artist = "Paul Abraham"; const QString expected_album = "An Evening at the Operetta"; + const int expected_year = 1992; // Create a MusicBrainzClient instance with mock_network_. MusicBrainzClient musicbrainz_client(nullptr, mock_network_.get()); @@ -207,6 +207,7 @@ TEST_F(MusicBrainzClientTest, ParseTrack) { EXPECT_EQ(expected_title, track.title_); EXPECT_EQ(expected_artist, track.artist_); EXPECT_EQ(expected_album, track.album_); + EXPECT_EQ(expected_year, track.year_); } }