diff options
-rw-r--r-- | src/DatabasePlaylist.cxx | 4 | ||||
-rw-r--r-- | src/DatabaseQueue.cxx | 4 | ||||
-rw-r--r-- | src/DatabaseSong.cxx | 3 | ||||
-rw-r--r-- | src/DetachedSong.hxx | 6 | ||||
-rw-r--r-- | src/Mapper.cxx | 6 | ||||
-rw-r--r-- | src/Mapper.hxx | 8 | ||||
-rw-r--r-- | src/PlaylistEdit.cxx | 1 |
7 files changed, 27 insertions, 5 deletions
diff --git a/src/DatabasePlaylist.cxx b/src/DatabasePlaylist.cxx index b557cbf29..5f7c85a78 100644 --- a/src/DatabasePlaylist.cxx +++ b/src/DatabasePlaylist.cxx @@ -24,6 +24,7 @@ #include "DatabaseGlue.hxx" #include "DatabasePlugin.hxx" #include "DetachedSong.hxx" +#include "Mapper.hxx" #include <functional> @@ -31,7 +32,8 @@ static bool AddSong(const char *playlist_path_utf8, Song &song, Error &error) { - return spl_append_song(playlist_path_utf8, DetachedSong(song), error); + return spl_append_song(playlist_path_utf8, map_song_detach(song), + error); } bool diff --git a/src/DatabaseQueue.cxx b/src/DatabaseQueue.cxx index 697771273..0ed073285 100644 --- a/src/DatabaseQueue.cxx +++ b/src/DatabaseQueue.cxx @@ -24,6 +24,7 @@ #include "Partition.hxx" #include "util/Error.hxx" #include "DetachedSong.hxx" +#include "Mapper.hxx" #include <functional> @@ -31,7 +32,8 @@ static bool AddToQueue(Partition &partition, const Song &song, Error &error) { PlaylistResult result = - partition.playlist.AppendSong(partition.pc, DetachedSong(song), + partition.playlist.AppendSong(partition.pc, + map_song_detach(song), nullptr); if (result != PlaylistResult::SUCCESS) { error.Set(playlist_domain, int(result), "Playlist error"); diff --git a/src/DatabaseSong.cxx b/src/DatabaseSong.cxx index 9afd109cb..a8f2188cc 100644 --- a/src/DatabaseSong.cxx +++ b/src/DatabaseSong.cxx @@ -22,6 +22,7 @@ #include "DatabaseGlue.hxx" #include "DatabasePlugin.hxx" #include "DetachedSong.hxx" +#include "Mapper.hxx" DetachedSong * DatabaseDetachSong(const char *uri, Error &error) @@ -34,7 +35,7 @@ DatabaseDetachSong(const char *uri, Error &error) if (tmp == nullptr) return nullptr; - DetachedSong *song = new DetachedSong(*tmp); + DetachedSong *song = new DetachedSong(map_song_detach(*tmp)); db->ReturnSong(tmp); return song; } diff --git a/src/DetachedSong.hxx b/src/DetachedSong.hxx index a99cbb4c8..7d841a4c2 100644 --- a/src/DetachedSong.hxx +++ b/src/DetachedSong.hxx @@ -32,6 +32,8 @@ struct Song; class DetachedSong { + friend DetachedSong map_song_detach(const Song &song); + /** * An UTF-8-encoded URI referring to the song file. This can * be one of: @@ -60,6 +62,8 @@ class DetachedSong { */ unsigned end_ms; + explicit DetachedSong(const Song &other); + public: explicit DetachedSong(const DetachedSong &other) :uri(other.uri), @@ -67,8 +71,6 @@ public: mtime(other.mtime), start_ms(other.start_ms), end_ms(other.end_ms) {} - explicit DetachedSong(const Song &other); - explicit DetachedSong(const char *_uri) :uri(_uri), mtime(0), start_ms(0), end_ms(0) {} diff --git a/src/Mapper.cxx b/src/Mapper.cxx index c6d8a3ea5..d41fba957 100644 --- a/src/Mapper.cxx +++ b/src/Mapper.cxx @@ -217,6 +217,12 @@ map_detached_song_fs(const char *uri_utf8) return AllocatedPath::Build(music_dir_fs, uri_fs); } +DetachedSong +map_song_detach(const Song &song) +{ + return DetachedSong(song); +} + AllocatedPath map_song_fs(const Song &song) { diff --git a/src/Mapper.hxx b/src/Mapper.hxx index e19a9e137..18a5ca3fe 100644 --- a/src/Mapper.hxx +++ b/src/Mapper.hxx @@ -107,6 +107,14 @@ AllocatedPath map_directory_child_fs(const Directory &directory, const char *name); /** + * "Detach" the #Song object, i.e. convert it to a #DetachedSong + * instance. + */ +gcc_pure +DetachedSong +map_song_detach(const Song &song); + +/** * Determines the file system path of a song. This must not be a * remote song. * diff --git a/src/PlaylistEdit.cxx b/src/PlaylistEdit.cxx index 24d9d9653..0eea62e18 100644 --- a/src/PlaylistEdit.cxx +++ b/src/PlaylistEdit.cxx @@ -31,6 +31,7 @@ #include "util/Error.hxx" #include "Song.hxx" #include "DetachedSong.hxx" +#include "Mapper.hxx" #include "Idle.hxx" #include "DatabaseSong.hxx" #include "Log.hxx" |