Commit 61b01f82 authored by Max Kellermann's avatar Max Kellermann

Mapper: add function map_song_detach()

Make the DetachedSong(Song) conversion constructor private. Everybody should use map_song_detach() which will take over more responsibilities soon.
parent 75b84713
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "DatabaseGlue.hxx" #include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx" #include "DatabasePlugin.hxx"
#include "DetachedSong.hxx" #include "DetachedSong.hxx"
#include "Mapper.hxx"
#include <functional> #include <functional>
...@@ -31,7 +32,8 @@ static bool ...@@ -31,7 +32,8 @@ static bool
AddSong(const char *playlist_path_utf8, AddSong(const char *playlist_path_utf8,
Song &song, Error &error) 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 bool
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "Partition.hxx" #include "Partition.hxx"
#include "util/Error.hxx" #include "util/Error.hxx"
#include "DetachedSong.hxx" #include "DetachedSong.hxx"
#include "Mapper.hxx"
#include <functional> #include <functional>
...@@ -31,7 +32,8 @@ static bool ...@@ -31,7 +32,8 @@ static bool
AddToQueue(Partition &partition, const Song &song, Error &error) AddToQueue(Partition &partition, const Song &song, Error &error)
{ {
PlaylistResult result = PlaylistResult result =
partition.playlist.AppendSong(partition.pc, DetachedSong(song), partition.playlist.AppendSong(partition.pc,
map_song_detach(song),
nullptr); nullptr);
if (result != PlaylistResult::SUCCESS) { if (result != PlaylistResult::SUCCESS) {
error.Set(playlist_domain, int(result), "Playlist error"); error.Set(playlist_domain, int(result), "Playlist error");
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "DatabaseGlue.hxx" #include "DatabaseGlue.hxx"
#include "DatabasePlugin.hxx" #include "DatabasePlugin.hxx"
#include "DetachedSong.hxx" #include "DetachedSong.hxx"
#include "Mapper.hxx"
DetachedSong * DetachedSong *
DatabaseDetachSong(const char *uri, Error &error) DatabaseDetachSong(const char *uri, Error &error)
...@@ -34,7 +35,7 @@ DatabaseDetachSong(const char *uri, Error &error) ...@@ -34,7 +35,7 @@ DatabaseDetachSong(const char *uri, Error &error)
if (tmp == nullptr) if (tmp == nullptr)
return nullptr; return nullptr;
DetachedSong *song = new DetachedSong(*tmp); DetachedSong *song = new DetachedSong(map_song_detach(*tmp));
db->ReturnSong(tmp); db->ReturnSong(tmp);
return song; return song;
} }
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
struct Song; struct Song;
class DetachedSong { class DetachedSong {
friend DetachedSong map_song_detach(const Song &song);
/** /**
* An UTF-8-encoded URI referring to the song file. This can * An UTF-8-encoded URI referring to the song file. This can
* be one of: * be one of:
...@@ -60,6 +62,8 @@ class DetachedSong { ...@@ -60,6 +62,8 @@ class DetachedSong {
*/ */
unsigned end_ms; unsigned end_ms;
explicit DetachedSong(const Song &other);
public: public:
explicit DetachedSong(const DetachedSong &other) explicit DetachedSong(const DetachedSong &other)
:uri(other.uri), :uri(other.uri),
...@@ -67,8 +71,6 @@ public: ...@@ -67,8 +71,6 @@ public:
mtime(other.mtime), mtime(other.mtime),
start_ms(other.start_ms), end_ms(other.end_ms) {} start_ms(other.start_ms), end_ms(other.end_ms) {}
explicit DetachedSong(const Song &other);
explicit DetachedSong(const char *_uri) explicit DetachedSong(const char *_uri)
:uri(_uri), :uri(_uri),
mtime(0), start_ms(0), end_ms(0) {} mtime(0), start_ms(0), end_ms(0) {}
......
...@@ -217,6 +217,12 @@ map_detached_song_fs(const char *uri_utf8) ...@@ -217,6 +217,12 @@ map_detached_song_fs(const char *uri_utf8)
return AllocatedPath::Build(music_dir_fs, uri_fs); return AllocatedPath::Build(music_dir_fs, uri_fs);
} }
DetachedSong
map_song_detach(const Song &song)
{
return DetachedSong(song);
}
AllocatedPath AllocatedPath
map_song_fs(const Song &song) map_song_fs(const Song &song)
{ {
......
...@@ -107,6 +107,14 @@ AllocatedPath ...@@ -107,6 +107,14 @@ AllocatedPath
map_directory_child_fs(const Directory &directory, const char *name); 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 * Determines the file system path of a song. This must not be a
* remote song. * remote song.
* *
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "util/Error.hxx" #include "util/Error.hxx"
#include "Song.hxx" #include "Song.hxx"
#include "DetachedSong.hxx" #include "DetachedSong.hxx"
#include "Mapper.hxx"
#include "Idle.hxx" #include "Idle.hxx"
#include "DatabaseSong.hxx" #include "DatabaseSong.hxx"
#include "Log.hxx" #include "Log.hxx"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment