summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2018-07-06 16:56:12 +0200
committerMax Kellermann <max@musicpd.org>2018-07-06 16:56:12 +0200
commit45139f94bbb0c7a52d0b22f4a73128f6e0137e4b (patch)
treef6bfe1456515787fee7a0d8654abb7366cca2b5b
parent80cb680fca973a1e6d09dbd53a852f0f50caec06 (diff)
db/LightSong: pass URI to constructor
-rw-r--r--src/DetachedSong.cxx3
-rw-r--r--src/db/LightSong.hxx4
-rw-r--r--src/db/plugins/ProxyDatabasePlugin.cxx4
-rw-r--r--src/db/plugins/simple/Song.cxx3
-rw-r--r--src/db/plugins/upnp/UpnpDatabasePlugin.cxx25
5 files changed, 20 insertions, 19 deletions
diff --git a/src/DetachedSong.cxx b/src/DetachedSong.cxx
index 3952ef1a8..8b44b1064 100644
--- a/src/DetachedSong.cxx
+++ b/src/DetachedSong.cxx
@@ -33,9 +33,8 @@ DetachedSong::DetachedSong(const LightSong &other)
DetachedSong::operator LightSong() const noexcept
{
- LightSong result(tag);
+ LightSong result(uri.c_str(), tag);
result.directory = nullptr;
- result.uri = uri.c_str();
result.real_uri = real_uri.empty() ? nullptr : real_uri.c_str();
result.mtime = mtime;
result.start_time = start_time;
diff --git a/src/db/LightSong.hxx b/src/db/LightSong.hxx
index 0aecc4a53..7b5b51043 100644
--- a/src/db/LightSong.hxx
+++ b/src/db/LightSong.hxx
@@ -78,8 +78,8 @@ struct LightSong {
*/
SongTime end_time = SongTime::zero();
- explicit LightSong(const Tag &_tag) noexcept
- :tag(_tag) {}
+ LightSong(const char *_uri, const Tag &_tag) noexcept
+ :uri(_uri), tag(_tag) {}
gcc_pure
std::string GetURI() const noexcept {
diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx
index 5b7a09948..af7c2c336 100644
--- a/src/db/plugins/ProxyDatabasePlugin.cxx
+++ b/src/db/plugins/ProxyDatabasePlugin.cxx
@@ -203,10 +203,8 @@ Copy(TagBuilder &tag, TagType d_tag,
}
ProxySong::ProxySong(const mpd_song *song)
- :LightSong(tag2)
+ :LightSong(mpd_song_get_uri(song), tag2)
{
- uri = mpd_song_get_uri(song);
-
const auto _mtime = mpd_song_get_last_modified(song);
if (_mtime > 0)
mtime = std::chrono::system_clock::from_time_t(_mtime);
diff --git a/src/db/plugins/simple/Song.cxx b/src/db/plugins/simple/Song.cxx
index 9f516cde8..fdac83eed 100644
--- a/src/db/plugins/simple/Song.cxx
+++ b/src/db/plugins/simple/Song.cxx
@@ -98,10 +98,9 @@ Song::GetURI() const noexcept
LightSong
Song::Export() const noexcept
{
- LightSong dest(tag);
+ LightSong dest(uri, tag);
dest.directory = parent->IsRoot()
? nullptr : parent->GetPath();
- dest.uri = uri;
dest.real_uri = nullptr;
dest.mtime = mtime;
dest.start_time = start_time;
diff --git a/src/db/plugins/upnp/UpnpDatabasePlugin.cxx b/src/db/plugins/upnp/UpnpDatabasePlugin.cxx
index f24deb6a4..4679e70db 100644
--- a/src/db/plugins/upnp/UpnpDatabasePlugin.cxx
+++ b/src/db/plugins/upnp/UpnpDatabasePlugin.cxx
@@ -48,18 +48,24 @@
static const char *const rootid = "0";
-class UpnpSong : public LightSong {
- std::string uri2, real_uri2;
+class UpnpSongData {
+protected:
+ std::string uri;
+ Tag tag;
+
+ template<typename U, typename T>
+ UpnpSongData(U &&_uri, T &&_tag) noexcept
+ :uri(std::forward<U>(_uri)), tag(std::forward<T>(_tag)) {}
+};
- Tag tag2;
+class UpnpSong : UpnpSongData, public LightSong {
+ std::string real_uri2;
public:
UpnpSong(UPnPDirObject &&object, std::string &&_uri)
- :LightSong(tag2),
- uri2(std::move(_uri)),
- real_uri2(std::move(object.url)),
- tag2(std::move(object.tag)) {
- uri = uri2.c_str();
+ :UpnpSongData(std::move(_uri), std::move(object.tag)),
+ LightSong(UpnpSongData::uri.c_str(), UpnpSongData::tag),
+ real_uri2(std::move(object.url)) {
real_uri = real_uri2.c_str();
}
};
@@ -318,8 +324,7 @@ visitSong(const UPnPDirObject &meta, const char *path,
if (!visit_song)
return;
- LightSong song(meta.tag);
- song.uri = path;
+ LightSong song(path, meta.tag);
song.real_uri = meta.url.c_str();
if (selection.Match(song))