PlaylistMapper: use class Storage instead of Mapper.cxx
This commit is contained in:
		| @@ -60,6 +60,12 @@ public: | ||||
| 		:client(nullptr) {} | ||||
| #endif | ||||
|  | ||||
| #ifdef ENABLE_DATABASE | ||||
| 	const Storage *GetStorage() const { | ||||
| 		return storage; | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	gcc_nonnull_all | ||||
| 	DetachedSong *LoadSong(const char *uri_utf8, Error &error) const; | ||||
|  | ||||
|   | ||||
| @@ -24,9 +24,17 @@ | ||||
| #include "util/UriUtil.hxx" | ||||
|  | ||||
| SongEnumerator * | ||||
| playlist_open_any(const char *uri, Mutex &mutex, Cond &cond) | ||||
| playlist_open_any(const char *uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 		  const Storage *storage, | ||||
| #endif | ||||
| 		  Mutex &mutex, Cond &cond) | ||||
| { | ||||
| 	return uri_has_scheme(uri) | ||||
| 		? playlist_open_remote(uri, mutex, cond) | ||||
| 		: playlist_mapper_open(uri, mutex, cond); | ||||
| 		: playlist_mapper_open(uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 				       storage, | ||||
| #endif | ||||
| 				       mutex, cond); | ||||
| } | ||||
|   | ||||
| @@ -23,6 +23,7 @@ | ||||
| class Mutex; | ||||
| class Cond; | ||||
| class SongEnumerator; | ||||
| class Storage; | ||||
|  | ||||
| /** | ||||
|  * Opens a playlist from the specified URI, which can be either an | ||||
| @@ -30,6 +31,10 @@ class SongEnumerator; | ||||
|  * music orplaylist directory. | ||||
|  */ | ||||
| SongEnumerator * | ||||
| playlist_open_any(const char *uri, Mutex &mutex, Cond &cond); | ||||
| playlist_open_any(const char *uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 		  const Storage *storage, | ||||
| #endif | ||||
| 		  Mutex &mutex, Cond &cond); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -24,6 +24,7 @@ | ||||
| #include "PlaylistRegistry.hxx" | ||||
| #include "Mapper.hxx" | ||||
| #include "fs/AllocatedPath.hxx" | ||||
| #include "storage/StorageInterface.hxx" | ||||
| #include "util/UriUtil.hxx" | ||||
|  | ||||
| #include <assert.h> | ||||
| @@ -57,21 +58,32 @@ playlist_open_in_playlist_dir(const char *uri, Mutex &mutex, Cond &cond) | ||||
|  * Load a playlist from the configured music directory. | ||||
|  */ | ||||
| static SongEnumerator * | ||||
| playlist_open_in_music_dir(const char *uri, Mutex &mutex, Cond &cond) | ||||
| playlist_open_in_storage(const char *uri, const Storage *storage, | ||||
| 			 Mutex &mutex, Cond &cond) | ||||
| { | ||||
| 	assert(uri_safe_local(uri)); | ||||
|  | ||||
| 	const auto path = map_uri_fs(uri); | ||||
| 	if (path.IsNull()) | ||||
| 	if (storage == nullptr) | ||||
| 		return nullptr; | ||||
|  | ||||
| 	return playlist_open_path(path.c_str(), mutex, cond); | ||||
| 	{ | ||||
| 		const auto path = storage->MapFS(uri); | ||||
| 		if (!path.IsNull()) | ||||
| 			return playlist_open_path(path.c_str(), mutex, cond); | ||||
| 	} | ||||
|  | ||||
| 	const auto uri2 = storage->MapUTF8(uri); | ||||
| 	return playlist_open_remote(uri, mutex, cond); | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| SongEnumerator * | ||||
| playlist_mapper_open(const char *uri, Mutex &mutex, Cond &cond) | ||||
| playlist_mapper_open(const char *uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 		     const Storage *storage, | ||||
| #endif | ||||
| 		     Mutex &mutex, Cond &cond) | ||||
| { | ||||
| 	if (spl_valid_name(uri)) { | ||||
| 		auto playlist = playlist_open_in_playlist_dir(uri, | ||||
| @@ -82,7 +94,8 @@ playlist_mapper_open(const char *uri, Mutex &mutex, Cond &cond) | ||||
|  | ||||
| #ifdef ENABLE_DATABASE | ||||
| 	if (uri_safe_local(uri)) { | ||||
| 		auto playlist = playlist_open_in_music_dir(uri, mutex, cond); | ||||
| 		auto playlist = playlist_open_in_storage(uri, storage, | ||||
| 							 mutex, cond); | ||||
| 		if (playlist != nullptr) | ||||
| 			return playlist; | ||||
| 	} | ||||
|   | ||||
| @@ -20,15 +20,22 @@ | ||||
| #ifndef MPD_PLAYLIST_MAPPER_HXX | ||||
| #define MPD_PLAYLIST_MAPPER_HXX | ||||
|  | ||||
| #include "check.h" | ||||
|  | ||||
| class Mutex; | ||||
| class Cond; | ||||
| class SongEnumerator; | ||||
| class Storage; | ||||
|  | ||||
| /** | ||||
|  * Opens a playlist from an URI relative to the playlist or music | ||||
|  * directory. | ||||
|  */ | ||||
| SongEnumerator * | ||||
| playlist_mapper_open(const char *uri, Mutex &mutex, Cond &cond); | ||||
| playlist_mapper_open(const char *uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 		     const Storage *storage, | ||||
| #endif | ||||
| 		     Mutex &mutex, Cond &cond); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -28,6 +28,10 @@ | ||||
| #include "thread/Cond.hxx" | ||||
| #include "fs/Traits.hxx" | ||||
|  | ||||
| #ifdef ENABLE_DATABASE | ||||
| #include "SongLoader.hxx" | ||||
| #endif | ||||
|  | ||||
| PlaylistResult | ||||
| playlist_load_into_queue(const char *uri, SongEnumerator &e, | ||||
| 			 unsigned start_index, unsigned end_index, | ||||
| @@ -72,7 +76,11 @@ playlist_open_into_queue(const char *uri, | ||||
| 	Mutex mutex; | ||||
| 	Cond cond; | ||||
|  | ||||
| 	auto playlist = playlist_open_any(uri, mutex, cond); | ||||
| 	auto playlist = playlist_open_any(uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 					  loader.GetStorage(), | ||||
| #endif | ||||
| 					  mutex, cond); | ||||
| 	if (playlist == nullptr) | ||||
| 		return PlaylistResult::NO_SUCH_LIST; | ||||
|  | ||||
|   | ||||
| @@ -28,6 +28,7 @@ | ||||
| #include "fs/Traits.hxx" | ||||
| #include "thread/Mutex.hxx" | ||||
| #include "thread/Cond.hxx" | ||||
| #include "client/Client.hxx" | ||||
|  | ||||
| static void | ||||
| playlist_provider_print(Client &client, const char *uri, | ||||
| @@ -59,7 +60,11 @@ playlist_file_print(Client &client, const char *uri, bool detail) | ||||
| 	Mutex mutex; | ||||
| 	Cond cond; | ||||
|  | ||||
| 	SongEnumerator *playlist = playlist_open_any(uri, mutex, cond); | ||||
| 	SongEnumerator *playlist = playlist_open_any(uri, | ||||
| #ifdef ENABLE_DATABASE | ||||
| 						     client.GetStorage(), | ||||
| #endif | ||||
| 						     mutex, cond); | ||||
| 	if (playlist == nullptr) | ||||
| 		return false; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann