From ddba21a46f173f57eb34533d50bc9bec4b506018 Mon Sep 17 00:00:00 2001 From: Jim Broadus Date: Tue, 12 May 2020 22:10:29 -0700 Subject: [PATCH] subsonic: Move ReadSong method to SubsonicService. --- .../subsonic/subsonicdynamicplaylist.cpp | 44 +------------------ .../subsonic/subsonicdynamicplaylist.h | 2 - src/internet/subsonic/subsonicservice.cpp | 42 ++++++++++++++++++ src/internet/subsonic/subsonicservice.h | 2 + 4 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/internet/subsonic/subsonicdynamicplaylist.cpp b/src/internet/subsonic/subsonicdynamicplaylist.cpp index 0cc1311f7..b2ff73850 100644 --- a/src/internet/subsonic/subsonicdynamicplaylist.cpp +++ b/src/internet/subsonic/subsonicdynamicplaylist.cpp @@ -151,7 +151,7 @@ PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int count) { continue; } - Song song = ReadSong(reader); + Song song = service_->ReadSong(reader); items << std::shared_ptr( new InternetPlaylistItem(service_, song)); @@ -279,7 +279,7 @@ void SubsonicDynamicPlaylist::GetAlbum(PlaylistItemList& list, QString id, continue; } - Song song = ReadSong(reader); + Song song = service_->ReadSong(reader); song.set_albumartist(album_artist); list << std::shared_ptr( @@ -289,46 +289,6 @@ void SubsonicDynamicPlaylist::GetAlbum(PlaylistItemList& list, QString id, } } -Song SubsonicDynamicPlaylist::ReadSong(QXmlStreamReader &reader) { - Song song; - QString id = reader.attributes().value("id").toString(); - song.set_title(reader.attributes().value("title").toString()); - song.set_album(reader.attributes().value("album").toString()); - song.set_track(reader.attributes().value("track").toString().toInt()); - song.set_disc(reader.attributes().value("discNumber").toString().toInt()); - song.set_artist(reader.attributes().value("artist").toString()); - song.set_bitrate(reader.attributes().value("bitRate").toString().toInt()); - song.set_year(reader.attributes().value("year").toString().toInt()); - song.set_genre(reader.attributes().value("genre").toString()); - qint64 length = reader.attributes().value("duration").toString().toInt(); - length *= kNsecPerSec; - song.set_length_nanosec(length); - QUrl url = QUrl(QString("subsonic://")); - QUrlQuery song_query(url.query()); - song_query.addQueryItem("id", id); - url.setQuery(song_query); - QUrl cover_url = service_->BuildRequestUrl("getCoverArt"); - QUrlQuery cover_url_query(cover_url.query()); - cover_url_query.addQueryItem("id", id); - cover_url.setQuery(cover_url_query); - song.set_art_automatic(cover_url.toEncoded()); - song.set_url(url); - song.set_filesize(reader.attributes().value("size").toString().toInt()); - QFileInfo fi(reader.attributes().value("path").toString()); - song.set_basefilename(fi.fileName()); - // We need to set these to satisfy the database constraints - 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()); - } - - return song; -} - QDataStream& operator<<(QDataStream& s, const SubsonicDynamicPlaylist& p) { s << quint8(p.stat_) << quint8(p.type_); return s; diff --git a/src/internet/subsonic/subsonicdynamicplaylist.h b/src/internet/subsonic/subsonicdynamicplaylist.h index 6f97115fa..c3eb93254 100644 --- a/src/internet/subsonic/subsonicdynamicplaylist.h +++ b/src/internet/subsonic/subsonicdynamicplaylist.h @@ -62,8 +62,6 @@ class SubsonicDynamicPlaylist : public smart_playlists::Generator { PlaylistItemList GenerateMoreAlbums(int count); PlaylistItemList GenerateMoreSongs(int count); - Song ReadSong(QXmlStreamReader& reader); - static const int kMaxCount; static const int kDefaultAlbumCount; static const int kDefaultSongCount; diff --git a/src/internet/subsonic/subsonicservice.cpp b/src/internet/subsonic/subsonicservice.cpp index 4f7719f9e..b906b51e9 100644 --- a/src/internet/subsonic/subsonicservice.cpp +++ b/src/internet/subsonic/subsonicservice.cpp @@ -623,3 +623,45 @@ void SubsonicLibraryScanner::ParsingError(const QString& message) { scanning_ = false; emit ScanFinished(); } + +Song SubsonicService::ReadSong(QXmlStreamReader& reader) { + Song song; + QString id = reader.attributes().value("id").toString(); + song.set_title(reader.attributes().value("title").toString()); + song.set_album(reader.attributes().value("album").toString()); + song.set_track(reader.attributes().value("track").toString().toInt()); + song.set_disc(reader.attributes().value("discNumber").toString().toInt()); + song.set_artist(reader.attributes().value("artist").toString()); + song.set_bitrate(reader.attributes().value("bitRate").toString().toInt()); + song.set_year(reader.attributes().value("year").toString().toInt()); + song.set_genre(reader.attributes().value("genre").toString()); + qint64 length = reader.attributes().value("duration").toString().toInt(); + length *= kNsecPerSec; + song.set_length_nanosec(length); + QUrl url = QUrl(QString("subsonic://")); + QUrlQuery song_query(url.query()); + song_query.addQueryItem("id", id); + url.setQuery(song_query); + + QUrl cover_url = BuildRequestUrl("getCoverArt"); + QUrlQuery cover_url_query(cover_url.query()); + cover_url_query.addQueryItem("id", id); + cover_url.setQuery(cover_url_query); + song.set_art_automatic(cover_url.toEncoded()); + + song.set_url(url); + song.set_filesize(reader.attributes().value("size").toString().toInt()); + QFileInfo fi(reader.attributes().value("path").toString()); + song.set_basefilename(fi.fileName()); + // We need to set these to satisfy the database constraints + 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()); + } + + return song; +} diff --git a/src/internet/subsonic/subsonicservice.h b/src/internet/subsonic/subsonicservice.h index 134ada666..b7a2d0915 100644 --- a/src/internet/subsonic/subsonicservice.h +++ b/src/internet/subsonic/subsonicservice.h @@ -114,6 +114,8 @@ class SubsonicService : public InternetService { // boilerplate. QNetworkReply* Send(const QUrl& url); + Song ReadSong(QXmlStreamReader& reader); + friend PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreAlbums(int); friend PlaylistItemList SubsonicDynamicPlaylist::GenerateMoreSongs(int);