Fix crash in last.fm radio when the user's subscription expires.

This commit is contained in:
John Maguire 2010-03-18 17:18:54 +00:00
parent fd2daf6fa2
commit 7e7aa6a0c4
1 changed files with 23 additions and 16 deletions

View File

@ -585,27 +585,34 @@ void LastFMService::FetchMoreTracksFinished() {
qWarning() << "Invalid reply on radio.getPlaylist";
return;
}
reply->deleteLater();
const XmlQuery& query = lastfm::ws::parse(reply);
const XmlQuery& playlist = query["playlist"];
foreach (const XmlQuery& q, playlist["trackList"].children("track")) {
lastfm::MutableTrack t;
t.setUrl(q["location"].text());
t.setExtra("trackauth", q["extension"]["trackauth"].text());
t.setTitle(q["title"].text());
t.setArtist(q["creator"].text());
t.setAlbum(q["album"].text());
t.setDuration(q["duration"].text().toInt() / 1000);
t.setSource(lastfm::Track::LastFmRadio);
const QString& image = q["image"].text();
if (!image.isEmpty()) {
FetchImage(t, image);
try {
const XmlQuery& query = lastfm::ws::parse(reply);
const XmlQuery& playlist = query["playlist"];
foreach (const XmlQuery& q, playlist["trackList"].children("track")) {
lastfm::MutableTrack t;
t.setUrl(q["location"].text());
t.setExtra("trackauth", q["extension"]["trackauth"].text());
t.setTitle(q["title"].text());
t.setArtist(q["creator"].text());
t.setAlbum(q["album"].text());
t.setDuration(q["duration"].text().toInt() / 1000);
t.setSource(lastfm::Track::LastFmRadio);
const QString& image = q["image"].text();
if (!image.isEmpty()) {
FetchImage(t, image);
}
playlist_ << t;
}
playlist_ << t;
} catch (lastfm::ws::ParseError& e) {
qDebug() << "Lastfm parse error:" << e.enumValue();
} catch (std::runtime_error& e) {
qDebug() << e.what();
return;
}
TunerTrackAvailable();
reply->deleteLater();
}
void LastFMService::Tune(const lastfm::RadioStation& station) {