Cache SubsonicService in SubsonicDynamicPlaylist
This commit is contained in:
parent
69801a9e2a
commit
38a5d183c2
|
@ -40,13 +40,16 @@ const int SubsonicDynamicPlaylist::kDefaultSongCount = 20;
|
||||||
const int SubsonicDynamicPlaylist::kDefaultOffset = 0;
|
const int SubsonicDynamicPlaylist::kDefaultOffset = 0;
|
||||||
|
|
||||||
SubsonicDynamicPlaylist::SubsonicDynamicPlaylist()
|
SubsonicDynamicPlaylist::SubsonicDynamicPlaylist()
|
||||||
: type_(QueryType_Album), stat_(QueryStat_Newest), offset_(kDefaultOffset) {}
|
: type_(QueryType_Album), stat_(QueryStat_Newest), offset_(kDefaultOffset) {
|
||||||
|
service_ = InternetModel::Service<SubsonicService>();
|
||||||
|
}
|
||||||
|
|
||||||
SubsonicDynamicPlaylist::SubsonicDynamicPlaylist(const QString& name,
|
SubsonicDynamicPlaylist::SubsonicDynamicPlaylist(const QString& name,
|
||||||
QueryType type,
|
QueryType type,
|
||||||
QueryStat stat)
|
QueryStat stat)
|
||||||
: type_(type), stat_(stat), offset_(kDefaultOffset) {
|
: type_(type), stat_(stat), offset_(kDefaultOffset) {
|
||||||
set_name(name);
|
set_name(name);
|
||||||
|
service_ = InternetModel::Service<SubsonicService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SubsonicDynamicPlaylist::Load(const QByteArray& data) {
|
void SubsonicDynamicPlaylist::Load(const QByteArray& data) {
|
||||||
|
@ -93,9 +96,7 @@ PlaylistItemList SubsonicDynamicPlaylist::Generate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int count) {
|
PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int count) {
|
||||||
SubsonicService* service = InternetModel::Service<SubsonicService>();
|
QUrl url = service_->BuildRequestUrl("getRandomSongs");
|
||||||
|
|
||||||
QUrl url = service->BuildRequestUrl("getRandomSongs");
|
|
||||||
QNetworkAccessManager network;
|
QNetworkAccessManager network;
|
||||||
|
|
||||||
if (count > kMaxCount) count = kMaxCount;
|
if (count > kMaxCount) count = kMaxCount;
|
||||||
|
@ -106,7 +107,7 @@ PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int count) {
|
||||||
|
|
||||||
PlaylistItemList items;
|
PlaylistItemList items;
|
||||||
|
|
||||||
QNetworkReply* reply = Send(network, url, service->usesslv3_);
|
QNetworkReply* reply = Send(network, url, service_->usesslv3_);
|
||||||
WaitForSignal(reply, SIGNAL(finished()));
|
WaitForSignal(reply, SIGNAL(finished()));
|
||||||
|
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
@ -146,10 +147,10 @@ PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int count) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Song song = ReadSong(service, reader);
|
Song song = ReadSong(reader);
|
||||||
|
|
||||||
items << std::shared_ptr<PlaylistItem>(
|
items << std::shared_ptr<PlaylistItem>(
|
||||||
new InternetPlaylistItem(service, song));
|
new InternetPlaylistItem(service_, song));
|
||||||
|
|
||||||
reader.skipCurrentElement();
|
reader.skipCurrentElement();
|
||||||
}
|
}
|
||||||
|
@ -157,9 +158,7 @@ PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreAlbums(int count) {
|
PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreAlbums(int count) {
|
||||||
SubsonicService* service = InternetModel::Service<SubsonicService>();
|
QUrl url = service_->BuildRequestUrl("getAlbumList");
|
||||||
|
|
||||||
QUrl url = service->BuildRequestUrl("getAlbumList");
|
|
||||||
QNetworkAccessManager network;
|
QNetworkAccessManager network;
|
||||||
|
|
||||||
if (count > kMaxCount) count = kMaxCount;
|
if (count > kMaxCount) count = kMaxCount;
|
||||||
|
@ -172,7 +171,7 @@ PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreAlbums(int count) {
|
||||||
|
|
||||||
PlaylistItemList items;
|
PlaylistItemList items;
|
||||||
|
|
||||||
QNetworkReply* reply = Send(network, url, service->usesslv3_);
|
QNetworkReply* reply = Send(network, url, service_->usesslv3_);
|
||||||
WaitForSignal(reply, SIGNAL(finished()));
|
WaitForSignal(reply, SIGNAL(finished()));
|
||||||
|
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
@ -214,22 +213,21 @@ PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreAlbums(int count) {
|
||||||
|
|
||||||
qLog(Debug) << "Getting album: "
|
qLog(Debug) << "Getting album: "
|
||||||
<< reader.attributes().value("album").toString();
|
<< reader.attributes().value("album").toString();
|
||||||
GetAlbum(service, items, reader.attributes().value("id").toString(),
|
GetAlbum(items, reader.attributes().value("id").toString(), network,
|
||||||
network, service->usesslv3_);
|
service_->usesslv3_);
|
||||||
reader.skipCurrentElement();
|
reader.skipCurrentElement();
|
||||||
}
|
}
|
||||||
offset_ += count;
|
offset_ += count;
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SubsonicDynamicPlaylist::GetAlbum(SubsonicService* service,
|
void SubsonicDynamicPlaylist::GetAlbum(PlaylistItemList& list, QString id,
|
||||||
PlaylistItemList& list, QString id,
|
|
||||||
QNetworkAccessManager& network,
|
QNetworkAccessManager& network,
|
||||||
const bool usesslv3) {
|
const bool usesslv3) {
|
||||||
QUrl url = service->BuildRequestUrl("getAlbum");
|
QUrl url = service_->BuildRequestUrl("getAlbum");
|
||||||
QUrlQuery url_query(url.query());
|
QUrlQuery url_query(url.query());
|
||||||
url_query.addQueryItem("id", id);
|
url_query.addQueryItem("id", id);
|
||||||
if (service->IsAmpache()) {
|
if (service_->IsAmpache()) {
|
||||||
url_query.addQueryItem("ampache", "1");
|
url_query.addQueryItem("ampache", "1");
|
||||||
}
|
}
|
||||||
url.setQuery(url_query);
|
url.setQuery(url_query);
|
||||||
|
@ -273,18 +271,17 @@ void SubsonicDynamicPlaylist::GetAlbum(SubsonicService* service,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Song song = ReadSong(service, reader);
|
Song song = ReadSong(reader);
|
||||||
song.set_albumartist(album_artist);
|
song.set_albumartist(album_artist);
|
||||||
|
|
||||||
list << std::shared_ptr<PlaylistItem>(
|
list << std::shared_ptr<PlaylistItem>(
|
||||||
new InternetPlaylistItem(service, song));
|
new InternetPlaylistItem(service_, song));
|
||||||
|
|
||||||
reader.skipCurrentElement();
|
reader.skipCurrentElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Song SubsonicDynamicPlaylist::ReadSong(SubsonicService* service,
|
Song SubsonicDynamicPlaylist::ReadSong(QXmlStreamReader &reader) {
|
||||||
QXmlStreamReader &reader) {
|
|
||||||
Song song;
|
Song song;
|
||||||
QString id = reader.attributes().value("id").toString();
|
QString id = reader.attributes().value("id").toString();
|
||||||
song.set_title(reader.attributes().value("title").toString());
|
song.set_title(reader.attributes().value("title").toString());
|
||||||
|
@ -302,7 +299,7 @@ Song SubsonicDynamicPlaylist::ReadSong(SubsonicService* service,
|
||||||
QUrlQuery song_query(url.query());
|
QUrlQuery song_query(url.query());
|
||||||
song_query.addQueryItem("id", id);
|
song_query.addQueryItem("id", id);
|
||||||
url.setQuery(song_query);
|
url.setQuery(song_query);
|
||||||
QUrl cover_url = service->BuildRequestUrl("getCoverArt");
|
QUrl cover_url = service_->BuildRequestUrl("getCoverArt");
|
||||||
QUrlQuery cover_url_query(cover_url.query());
|
QUrlQuery cover_url_query(cover_url.query());
|
||||||
cover_url_query.addQueryItem("id", id);
|
cover_url_query.addQueryItem("id", id);
|
||||||
cover_url.setQuery(cover_url_query);
|
cover_url.setQuery(cover_url_query);
|
||||||
|
|
|
@ -62,7 +62,7 @@ class SubsonicDynamicPlaylist : public smart_playlists::Generator {
|
||||||
PlaylistItemList GenerateMoreAlbums(int count);
|
PlaylistItemList GenerateMoreAlbums(int count);
|
||||||
PlaylistItemList GenerateMoreSongs(int count);
|
PlaylistItemList GenerateMoreSongs(int count);
|
||||||
|
|
||||||
Song ReadSong(SubsonicService* service, QXmlStreamReader& reader);
|
Song ReadSong(QXmlStreamReader& reader);
|
||||||
|
|
||||||
static const int kMaxCount;
|
static const int kMaxCount;
|
||||||
static const int kDefaultAlbumCount;
|
static const int kDefaultAlbumCount;
|
||||||
|
@ -70,8 +70,8 @@ class SubsonicDynamicPlaylist : public smart_playlists::Generator {
|
||||||
static const int kDefaultOffset;
|
static const int kDefaultOffset;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void GetAlbum(SubsonicService* service, PlaylistItemList& list, QString id,
|
void GetAlbum(PlaylistItemList& list, QString id, QNetworkAccessManager& network,
|
||||||
QNetworkAccessManager& network, const bool usesslv3);
|
const bool usesslv3);
|
||||||
// need our own one since we run in a different thread from service
|
// need our own one since we run in a different thread from service
|
||||||
QNetworkReply* Send(QNetworkAccessManager& network, const QUrl& url,
|
QNetworkReply* Send(QNetworkAccessManager& network, const QUrl& url,
|
||||||
const bool usesslv3);
|
const bool usesslv3);
|
||||||
|
|
Loading…
Reference in New Issue