void SpotifyResolver::SearchFinished(const spotify_pb::SearchResponse& response) { QString query_string = QString::fromUtf8(response.request().query().c_str()); qLog(Debug) << query_string; QMap<QString, int>::iterator it = queries_.find(query_string); if (it == queries_.end()) { return; } int id = it.value(); queries_.erase(it); SongList songs; for (int i = 0; i < response.result_size(); ++i) { const spotify_pb::Track& track = response.result(i); Song song; SpotifyService::SongFromProtobuf(track, &song); songs << song; } qLog(Debug) << "Resolved from spotify:" << songs.length(); if (!songs.isEmpty()) { qLog(Debug) << songs[0].title() << songs[0].artist(); } emit ResolveFinished(id, songs); }
TEST_F(AsxIniParserTest, ParsesBasicTrackList) { QFile file(":/testdata/test.asxini"); file.open(QIODevice::ReadOnly); SongList songs = parser_.Load(&file, "", QDir()); ASSERT_EQ(2, songs.length()); EXPECT_EQ(QUrl("http://195.245.168.21/antena3?MSWMExt=.asf"), songs[0].url()); EXPECT_EQ(QUrl("http://195.245.168.21:80/antena3?MSWMExt=.asf"), songs[1].url()); EXPECT_TRUE(songs[0].is_valid()); EXPECT_TRUE(songs[1].is_valid()); }
TEST_F(XSPFParserTest, IgnoresInvalidLength) { QByteArray data = "<playlist><trackList><track>" "<location>http://example.com/foo.mp3</location>" "<title>Foo</title>" "<creator>Bar</creator>" "<album>Baz</album>" "<duration>60000qwerty</duration>" "<image>http://example.com/albumcover.jpg</image>" "<info>http://example.com</info>" "</track></trackList></playlist>"; QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); XSPFParser parser(NULL); SongList songs = parser.Load(&buffer); ASSERT_EQ(1, songs.length()); EXPECT_EQ(-1, songs[0].length_nanosec()); }
TEST_F(ASXParserTest, ParsesOneTrackFromXML) { QByteArray data = "<asx version=\"3.0\"><title>foobar</title><entry>" "<ref href=\"http://example.com/foo.mp3\"/>" "<title>Foo</title>" "<author>Bar</author>" "<copyright>mumble mumble</copyright>" "</entry></asx>"; QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); ASXParser parser(NULL); SongList songs = parser.Load(&buffer); ASSERT_EQ(1, songs.length()); const Song& song = songs[0]; EXPECT_EQ("Foo", song.title()); EXPECT_EQ("Bar", song.artist()); EXPECT_EQ(QUrl("http://example.com/foo.mp3"), song.url()); EXPECT_TRUE(song.is_valid()); }
TEST_F(XSPFParserTest, ParsesMoreThanOneTrackFromXML) { QByteArray data = "<playlist><trackList>" "<track>" "<location>http://example.com/foo.mp3</location>" "</track>" "<track>" "<location>http://example.com/bar.mp3</location>" "</track>" "</trackList></playlist>"; QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); XSPFParser parser(NULL); SongList songs = parser.Load(&buffer); ASSERT_EQ(2, songs.length()); EXPECT_EQ(QUrl("http://example.com/foo.mp3"), songs[0].url()); EXPECT_EQ(QUrl("http://example.com/bar.mp3"), songs[1].url()); EXPECT_TRUE(songs[0].is_stream()); EXPECT_TRUE(songs[1].is_stream()); }
TEST_F(ASXParserTest, ParsesMoreThanOneTrackFromXML) { QByteArray data = "<asx><entry>" "<entry>" "<ref href=\"http://example.com/foo.mp3\"/>" "</entry>" "<entry>" "<ref href=\"http://example.com/bar.mp3\"/>" "</entry>" "</entry></asx>"; QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); ASXParser parser(NULL); SongList songs = parser.Load(&buffer); ASSERT_EQ(2, songs.length()); EXPECT_EQ(QUrl("http://example.com/foo.mp3"), songs[0].url()); EXPECT_EQ(QUrl("http://example.com/bar.mp3"), songs[1].url()); EXPECT_TRUE(songs[0].is_stream()); EXPECT_TRUE(songs[1].is_stream()); }
TEST_F(ASXParserTest, ParsesBrokenXmlEntities) { QByteArray data = "<asx version = \"3.0\">" "<Title>DI.fm</Title>" "<Author>Digitally Imported Radio</Author>" "<Copyright>2006 Digitally Imported., Inc</Copyright>" "<MoreInfo href=\"http://www.di.fm/\" />" " <entry>" " <PARAM name=\"HTMLView\" value=\"http://www.di.fm/classictrance/pro/mini_playlist.html\"/>" " <ref href = \"mms://72.26.204.105/classictrance128k?user=h&pass=xxxxxxxxxxxxxxx\"/>" " <Title>Classic Trance</Title>" " <Author>Digitally Imported Premium</Author>" " </entry>" "</asx>"; QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); ASXParser parser(NULL); SongList songs = parser.Load(&buffer); ASSERT_EQ(1, songs.length()); EXPECT_EQ(QUrl("mms://72.26.204.105/classictrance128k?user=h&pass=xxxxxxxxxxxxxxx"), songs[0].url()); }
TEST_F(XSPFParserTest, ParsesOneTrackFromXML) { QByteArray data = "<playlist><trackList><track>" "<location>http://example.com/foo.mp3</location>" "<title>Foo</title>" "<creator>Bar</creator>" "<album>Baz</album>" "<duration>60000</duration>" "<image>http://example.com/albumcover.jpg</image>" "<info>http://example.com</info>" "</track></trackList></playlist>"; QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); XSPFParser parser(NULL); SongList songs = parser.Load(&buffer); ASSERT_EQ(1, songs.length()); const Song& song = songs[0]; EXPECT_EQ("Foo", song.title()); EXPECT_EQ("Bar", song.artist()); EXPECT_EQ("Baz", song.album()); EXPECT_EQ(QUrl("http://example.com/foo.mp3"), song.url()); EXPECT_EQ(60 * kNsecPerSec, song.length_nanosec()); EXPECT_TRUE(song.is_valid()); }