allow loading playlists specified as absolute filesystem paths
implement for the "load" command the same logic used for the "add" command: local clients can load playlist specified as absolute paths. For relative paths the old logic is preserved: first look for a stored playlist, then look in the music directory.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "LocateUri.hxx"
|
||||
#include "PlaylistAny.hxx"
|
||||
#include "PlaylistStream.hxx"
|
||||
#include "PlaylistMapper.hxx"
|
||||
@@ -25,17 +26,26 @@
|
||||
#include "config.h"
|
||||
|
||||
std::unique_ptr<SongEnumerator>
|
||||
playlist_open_any(const char *uri,
|
||||
playlist_open_any(const LocatedUri &located_uri,
|
||||
#ifdef ENABLE_DATABASE
|
||||
const Storage *storage,
|
||||
#endif
|
||||
Mutex &mutex)
|
||||
{
|
||||
return uri_has_scheme(uri)
|
||||
? playlist_open_remote(uri, mutex)
|
||||
: playlist_mapper_open(uri,
|
||||
switch (located_uri.type) {
|
||||
case LocatedUri::Type::ABSOLUTE:
|
||||
return playlist_open_remote(located_uri.canonical_uri, mutex);
|
||||
|
||||
case LocatedUri::Type::PATH:
|
||||
return playlist_open_path(located_uri.path, mutex);
|
||||
|
||||
case LocatedUri::Type::RELATIVE:
|
||||
return playlist_mapper_open(located_uri.canonical_uri,
|
||||
#ifdef ENABLE_DATABASE
|
||||
storage,
|
||||
#endif
|
||||
mutex);
|
||||
}
|
||||
|
||||
gcc_unreachable();
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ class Storage;
|
||||
* music or playlist directory.
|
||||
*/
|
||||
std::unique_ptr<SongEnumerator>
|
||||
playlist_open_any(const char *uri,
|
||||
playlist_open_any(const LocatedUri &located_uri,
|
||||
#ifdef ENABLE_DATABASE
|
||||
const Storage *storage,
|
||||
#endif
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "LocateUri.hxx"
|
||||
#include "PlaylistQueue.hxx"
|
||||
#include "PlaylistAny.hxx"
|
||||
#include "PlaylistSong.hxx"
|
||||
@@ -63,7 +64,7 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,
|
||||
}
|
||||
|
||||
void
|
||||
playlist_open_into_queue(const char *uri,
|
||||
playlist_open_into_queue(const LocatedUri &uri,
|
||||
unsigned start_index, unsigned end_index,
|
||||
playlist &dest, PlayerControl &pc,
|
||||
const SongLoader &loader)
|
||||
@@ -78,7 +79,7 @@ playlist_open_into_queue(const char *uri,
|
||||
if (playlist == nullptr)
|
||||
throw PlaylistError::NoSuchList();
|
||||
|
||||
playlist_load_into_queue(uri, *playlist,
|
||||
playlist_load_into_queue(uri.canonical_uri, *playlist,
|
||||
start_index, end_index,
|
||||
dest, pc, loader);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ playlist_load_into_queue(const char *uri, SongEnumerator &e,
|
||||
* play queue.
|
||||
*/
|
||||
void
|
||||
playlist_open_into_queue(const char *uri,
|
||||
playlist_open_into_queue(const LocatedUri &uri,
|
||||
unsigned start_index, unsigned end_index,
|
||||
playlist &dest, PlayerControl &pc,
|
||||
const SongLoader &loader);
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "LocateUri.hxx"
|
||||
#include "Print.hxx"
|
||||
#include "PlaylistAny.hxx"
|
||||
#include "PlaylistSong.hxx"
|
||||
@@ -55,7 +56,7 @@ playlist_provider_print(Response &r,
|
||||
bool
|
||||
playlist_file_print(Response &r, Partition &partition,
|
||||
const SongLoader &loader,
|
||||
const char *uri, bool detail)
|
||||
const LocatedUri &uri, bool detail)
|
||||
{
|
||||
Mutex mutex;
|
||||
|
||||
@@ -71,6 +72,6 @@ playlist_file_print(Response &r, Partition &partition,
|
||||
if (playlist == nullptr)
|
||||
return false;
|
||||
|
||||
playlist_provider_print(r, loader, uri, *playlist, detail);
|
||||
playlist_provider_print(r, loader, uri.canonical_uri, *playlist, detail);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,6 @@ struct Partition;
|
||||
bool
|
||||
playlist_file_print(Response &r, Partition &partition,
|
||||
const SongLoader &loader,
|
||||
const char *uri, bool detail);
|
||||
const LocatedUri &uri, bool detail);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user