diff --git a/src/internet/subsonic/subsonicdynamicplaylist.cpp b/src/internet/subsonic/subsonicdynamicplaylist.cpp index c655dc061..e7c18a132 100644 --- a/src/internet/subsonic/subsonicdynamicplaylist.cpp +++ b/src/internet/subsonic/subsonicdynamicplaylist.cpp @@ -158,6 +158,9 @@ void SubsonicDynamicPlaylist::GetAlbum(SubsonicService* service, const bool usesslv3) { QUrl url = service->BuildRequestUrl("getAlbum"); url.addQueryItem("id", id); + if (service->IsAmpache()) { + url.addQueryItem("ampache", "1"); + } QNetworkReply* reply = Send(network, url, usesslv3); WaitForSignal(reply, SIGNAL(finished())); reply->deleteLater(); @@ -221,6 +224,11 @@ void SubsonicDynamicPlaylist::GetAlbum(SubsonicService* service, song.set_mtime(0); song.set_ctime(0); + if (reader.attributes().hasAttribute("playCount")) { + song.set_playcount( + reader.attributes().value("playCount").toString().toInt()); + } + list << std::shared_ptr( new InternetPlaylistItem(service, song)); diff --git a/src/internet/subsonic/subsonicservice.cpp b/src/internet/subsonic/subsonicservice.cpp index 2cd454f12..798bd0004 100644 --- a/src/internet/subsonic/subsonicservice.cpp +++ b/src/internet/subsonic/subsonicservice.cpp @@ -74,7 +74,8 @@ SubsonicService::SubsonicService(Application* app, InternetModel* parent) library_sort_model_(new QSortFilterProxyModel(this)), total_song_count_(0), login_state_(LoginState_OtherError), - redirect_count_(0) { + redirect_count_(0), + is_ampache_(false) { app_->player()->RegisterUrlHandler(url_handler_); connect(scanner_, SIGNAL(ScanFinished()), SLOT(ReloadDatabaseFinished())); @@ -203,6 +204,8 @@ bool SubsonicService::IsConfigured() const { !password_.isEmpty(); } +bool SubsonicService::IsAmpache() const { return is_ampache_; } + void SubsonicService::Login() { // Recreate fresh network state, otherwise old HTTPS settings seem to get // reused @@ -324,6 +327,7 @@ void SubsonicService::OnPingFinished(QNetworkReply* reply) { } else { QXmlStreamReader reader(reply); reader.readNextStartElement(); + is_ampache_ = (reader.attributes().value("type") == "ampache"); QStringRef status = reader.attributes().value("status"); int http_status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); @@ -540,6 +544,12 @@ void SubsonicLibraryScanner::OnGetAlbumFinished(QNetworkReply* reply) { song.set_directory_id(0); song.set_mtime(0); song.set_ctime(0); + + if (reader.attributes().hasAttribute("playCount")) { + song.set_playcount( + reader.attributes().value("playCount").toString().toInt()); + } + songs_ << song; reader.skipCurrentElement(); } @@ -569,6 +579,9 @@ void SubsonicLibraryScanner::GetAlbumList(int offset) { void SubsonicLibraryScanner::GetAlbum(const QString& id) { QUrl url = service_->BuildRequestUrl("getAlbum"); url.addQueryItem("id", id); + if (service_->IsAmpache()) { + url.addQueryItem("ampache", "1"); + } QNetworkReply* reply = service_->Send(url); NewClosure(reply, SIGNAL(finished()), this, SLOT(OnGetAlbumFinished(QNetworkReply*)), reply); diff --git a/src/internet/subsonic/subsonicservice.h b/src/internet/subsonic/subsonicservice.h index 6ce80b3b5..85df53e24 100644 --- a/src/internet/subsonic/subsonicservice.h +++ b/src/internet/subsonic/subsonicservice.h @@ -87,6 +87,7 @@ class SubsonicService : public InternetService { typedef QMap RequestOptions; bool IsConfigured() const; + bool IsAmpache() const; QStandardItem* CreateRootItem(); void LazyPopulate(QStandardItem* item); @@ -155,6 +156,7 @@ signals: LoginState login_state_; QString working_server_; // The actual server, possibly post-redirect int redirect_count_; + bool is_ampache_; private slots: void UpdateTotalSongCount(int count);