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 @@
#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
......
......@@ -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");
......
......@@ -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;
}
......@@ -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) {}
......
......@@ -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)
{
......
......@@ -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.
*
......
......@@ -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"
......
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