diff options
author | Max Kellermann <max@musicpd.org> | 2018-07-06 16:56:12 +0200 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2018-07-06 16:56:12 +0200 |
commit | 45139f94bbb0c7a52d0b22f4a73128f6e0137e4b (patch) | |
tree | f6bfe1456515787fee7a0d8654abb7366cca2b5b | |
parent | 80cb680fca973a1e6d09dbd53a852f0f50caec06 (diff) |
db/LightSong: pass URI to constructor
-rw-r--r-- | src/DetachedSong.cxx | 3 | ||||
-rw-r--r-- | src/db/LightSong.hxx | 4 | ||||
-rw-r--r-- | src/db/plugins/ProxyDatabasePlugin.cxx | 4 | ||||
-rw-r--r-- | src/db/plugins/simple/Song.cxx | 3 | ||||
-rw-r--r-- | src/db/plugins/upnp/UpnpDatabasePlugin.cxx | 25 |
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)) |