summaryrefslogtreecommitdiff
path: root/src/playlist
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2018-06-22 19:37:18 +0200
committerMax Kellermann <max@musicpd.org>2018-06-22 19:37:18 +0200
commitd0fbf6db592eb445c9741fc7544b7bee739fcdfa (patch)
treed8cd22fa2f23dc150ef8b07f46d9561c276ee316 /src/playlist
parent01d8eb629072e4d5d02345868f4233177c99d70a (diff)
input/Stream: remove attribute "cond", replace with handler interface
This adds a bit of overhead, but also adds flexibility to the API, because arbitrary triggers may be invoked from that virtual method implementation, not just Cond::signal(). The motivation for this is to make the handlers more dynamic, for the upcoming buffering class utilizing ProxyInputStream.
Diffstat (limited to 'src/playlist')
-rw-r--r--src/playlist/PlaylistAny.cxx6
-rw-r--r--src/playlist/PlaylistAny.hxx3
-rw-r--r--src/playlist/PlaylistMapper.cxx19
-rw-r--r--src/playlist/PlaylistMapper.hxx3
-rw-r--r--src/playlist/PlaylistPlugin.hxx3
-rw-r--r--src/playlist/PlaylistQueue.cxx4
-rw-r--r--src/playlist/PlaylistRegistry.cxx14
-rw-r--r--src/playlist/PlaylistRegistry.hxx3
-rw-r--r--src/playlist/PlaylistStream.cxx16
-rw-r--r--src/playlist/PlaylistStream.hxx5
-rw-r--r--src/playlist/Print.cxx4
-rw-r--r--src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx3
-rw-r--r--src/playlist/plugins/FlacPlaylistPlugin.cxx2
-rw-r--r--src/playlist/plugins/SoundCloudPlaylistPlugin.cxx8
14 files changed, 40 insertions, 53 deletions
diff --git a/src/playlist/PlaylistAny.cxx b/src/playlist/PlaylistAny.cxx
index 6c1c6367d..993c09e46 100644
--- a/src/playlist/PlaylistAny.cxx
+++ b/src/playlist/PlaylistAny.cxx
@@ -29,13 +29,13 @@ playlist_open_any(const char *uri,
#ifdef ENABLE_DATABASE
const Storage *storage,
#endif
- Mutex &mutex, Cond &cond)
+ Mutex &mutex)
{
return uri_has_scheme(uri)
- ? playlist_open_remote(uri, mutex, cond)
+ ? playlist_open_remote(uri, mutex)
: playlist_mapper_open(uri,
#ifdef ENABLE_DATABASE
storage,
#endif
- mutex, cond);
+ mutex);
}
diff --git a/src/playlist/PlaylistAny.hxx b/src/playlist/PlaylistAny.hxx
index f2f3fb4a0..d021d20d5 100644
--- a/src/playlist/PlaylistAny.hxx
+++ b/src/playlist/PlaylistAny.hxx
@@ -23,7 +23,6 @@
#include <memory>
class Mutex;
-class Cond;
class SongEnumerator;
class Storage;
@@ -37,6 +36,6 @@ playlist_open_any(const char *uri,
#ifdef ENABLE_DATABASE
const Storage *storage,
#endif
- Mutex &mutex, Cond &cond);
+ Mutex &mutex);
#endif
diff --git a/src/playlist/PlaylistMapper.cxx b/src/playlist/PlaylistMapper.cxx
index aa79febc9..9fdc237a4 100644
--- a/src/playlist/PlaylistMapper.cxx
+++ b/src/playlist/PlaylistMapper.cxx
@@ -33,7 +33,7 @@
* Load a playlist from the configured playlist directory.
*/
static std::unique_ptr<SongEnumerator>
-playlist_open_in_playlist_dir(const char *uri, Mutex &mutex, Cond &cond)
+playlist_open_in_playlist_dir(const char *uri, Mutex &mutex)
{
assert(spl_valid_name(uri));
@@ -41,7 +41,7 @@ playlist_open_in_playlist_dir(const char *uri, Mutex &mutex, Cond &cond)
if (path_fs.IsNull())
return nullptr;
- return playlist_open_path(path_fs, mutex, cond);
+ return playlist_open_path(path_fs, mutex);
}
#ifdef ENABLE_DATABASE
@@ -50,8 +50,7 @@ playlist_open_in_playlist_dir(const char *uri, Mutex &mutex, Cond &cond)
* Load a playlist from the configured music directory.
*/
static std::unique_ptr<SongEnumerator>
-playlist_open_in_storage(const char *uri, const Storage *storage,
- Mutex &mutex, Cond &cond)
+playlist_open_in_storage(const char *uri, const Storage *storage, Mutex &mutex)
{
assert(uri_safe_local(uri));
@@ -61,11 +60,11 @@ playlist_open_in_storage(const char *uri, const Storage *storage,
{
const auto path = storage->MapFS(uri);
if (!path.IsNull())
- return playlist_open_path(path, mutex, cond);
+ return playlist_open_path(path, mutex);
}
const auto uri2 = storage->MapUTF8(uri);
- return playlist_open_remote(uri2.c_str(), mutex, cond);
+ return playlist_open_remote(uri2.c_str(), mutex);
}
#endif
@@ -75,19 +74,17 @@ playlist_mapper_open(const char *uri,
#ifdef ENABLE_DATABASE
const Storage *storage,
#endif
- Mutex &mutex, Cond &cond)
+ Mutex &mutex)
{
if (spl_valid_name(uri)) {
- auto playlist = playlist_open_in_playlist_dir(uri,
- mutex, cond);
+ auto playlist = playlist_open_in_playlist_dir(uri, mutex);
if (playlist != nullptr)
return playlist;
}
#ifdef ENABLE_DATABASE
if (uri_safe_local(uri)) {
- auto playlist = playlist_open_in_storage(uri, storage,
- mutex, cond);
+ auto playlist = playlist_open_in_storage(uri, storage, mutex);
if (playlist != nullptr)
return playlist;
}
diff --git a/src/playlist/PlaylistMapper.hxx b/src/playlist/PlaylistMapper.hxx
index 116faa46e..bc3345c84 100644
--- a/src/playlist/PlaylistMapper.hxx
+++ b/src/playlist/PlaylistMapper.hxx
@@ -25,7 +25,6 @@
#include <memory>
class Mutex;
-class Cond;
class SongEnumerator;
class Storage;
@@ -38,6 +37,6 @@ playlist_mapper_open(const char *uri,
#ifdef ENABLE_DATABASE
const Storage *storage,
#endif
- Mutex &mutex, Cond &cond);
+ Mutex &mutex);
#endif
diff --git a/src/playlist/PlaylistPlugin.hxx b/src/playlist/PlaylistPlugin.hxx
index a3f2eb8a1..acd4d67ee 100644
--- a/src/playlist/PlaylistPlugin.hxx
+++ b/src/playlist/PlaylistPlugin.hxx
@@ -25,7 +25,6 @@
struct ConfigBlock;
struct Tag;
class Mutex;
-class Cond;
class SongEnumerator;
struct playlist_plugin {
@@ -52,7 +51,7 @@ struct playlist_plugin {
* either matched one of the schemes or one of the suffixes.
*/
std::unique_ptr<SongEnumerator> (*open_uri)(const char *uri,
- Mutex &mutex, Cond &cond);
+ Mutex &mutex);
/**
* Opens the playlist in the specified input stream. It has
diff --git a/src/playlist/PlaylistQueue.cxx b/src/playlist/PlaylistQueue.cxx
index 77edb7249..ca01d7267 100644
--- a/src/playlist/PlaylistQueue.cxx
+++ b/src/playlist/PlaylistQueue.cxx
@@ -26,7 +26,6 @@
#include "SongEnumerator.hxx"
#include "DetachedSong.hxx"
#include "thread/Mutex.hxx"
-#include "thread/Cond.hxx"
#include "fs/Traits.hxx"
#ifdef ENABLE_DATABASE
@@ -70,13 +69,12 @@ playlist_open_into_queue(const char *uri,
const SongLoader &loader)
{
Mutex mutex;
- Cond cond;
auto playlist = playlist_open_any(uri,
#ifdef ENABLE_DATABASE
loader.GetStorage(),
#endif
- mutex, cond);
+ mutex);
if (playlist == nullptr)
throw PlaylistError::NoSuchList();
diff --git a/src/playlist/PlaylistRegistry.cxx b/src/playlist/PlaylistRegistry.cxx
index be8b536f1..01151c83a 100644
--- a/src/playlist/PlaylistRegistry.cxx
+++ b/src/playlist/PlaylistRegistry.cxx
@@ -103,7 +103,7 @@ playlist_list_global_finish() noexcept
}
static std::unique_ptr<SongEnumerator>
-playlist_list_open_uri_scheme(const char *uri, Mutex &mutex, Cond &cond,
+playlist_list_open_uri_scheme(const char *uri, Mutex &mutex,
bool *tried)
{
assert(uri != nullptr);
@@ -120,7 +120,7 @@ playlist_list_open_uri_scheme(const char *uri, Mutex &mutex, Cond &cond,
if (playlist_plugins_enabled[i] && plugin->open_uri != nullptr &&
plugin->schemes != nullptr &&
StringArrayContainsCase(plugin->schemes, scheme.c_str())) {
- auto playlist = plugin->open_uri(uri, mutex, cond);
+ auto playlist = plugin->open_uri(uri, mutex);
if (playlist)
return playlist;
@@ -132,7 +132,7 @@ playlist_list_open_uri_scheme(const char *uri, Mutex &mutex, Cond &cond,
}
static std::unique_ptr<SongEnumerator>
-playlist_list_open_uri_suffix(const char *uri, Mutex &mutex, Cond &cond,
+playlist_list_open_uri_suffix(const char *uri, Mutex &mutex,
const bool *tried)
{
assert(uri != nullptr);
@@ -148,7 +148,7 @@ playlist_list_open_uri_suffix(const char *uri, Mutex &mutex, Cond &cond,
if (playlist_plugins_enabled[i] && !tried[i] &&
plugin->open_uri != nullptr && plugin->suffixes != nullptr &&
StringArrayContainsCase(plugin->suffixes, suffix)) {
- auto playlist = plugin->open_uri(uri, mutex, cond);
+ auto playlist = plugin->open_uri(uri, mutex);
if (playlist != nullptr)
return playlist;
}
@@ -158,7 +158,7 @@ playlist_list_open_uri_suffix(const char *uri, Mutex &mutex, Cond &cond,
}
std::unique_ptr<SongEnumerator>
-playlist_list_open_uri(const char *uri, Mutex &mutex, Cond &cond)
+playlist_list_open_uri(const char *uri, Mutex &mutex)
{
/** this array tracks which plugins have already been tried by
playlist_list_open_uri_scheme() */
@@ -168,9 +168,9 @@ playlist_list_open_uri(const char *uri, Mutex &mutex, Cond &cond)
memset(tried, false, sizeof(tried));
- auto playlist = playlist_list_open_uri_scheme(uri, mutex, cond, tried);
+ auto playlist = playlist_list_open_uri_scheme(uri, mutex, tried);
if (playlist == nullptr)
- playlist = playlist_list_open_uri_suffix(uri, mutex, cond,
+ playlist = playlist_list_open_uri_suffix(uri, mutex,
tried);
return playlist;
diff --git a/src/playlist/PlaylistRegistry.hxx b/src/playlist/PlaylistRegistry.hxx
index 877d6fc84..a651818f6 100644
--- a/src/playlist/PlaylistRegistry.hxx
+++ b/src/playlist/PlaylistRegistry.hxx
@@ -24,7 +24,6 @@
#include "Compiler.h"
class Mutex;
-class Cond;
class SongEnumerator;
extern const struct playlist_plugin *const playlist_plugins[];
@@ -51,7 +50,7 @@ playlist_list_global_finish() noexcept;
* Opens a playlist by its URI.
*/
std::unique_ptr<SongEnumerator>
-playlist_list_open_uri(const char *uri, Mutex &mutex, Cond &cond);
+playlist_list_open_uri(const char *uri, Mutex &mutex);
std::unique_ptr<SongEnumerator>
playlist_list_open_stream_suffix(InputStreamPtr &&is, const char *suffix);
diff --git a/src/playlist/PlaylistStream.cxx b/src/playlist/PlaylistStream.cxx
index e16162680..5c2403a8f 100644
--- a/src/playlist/PlaylistStream.cxx
+++ b/src/playlist/PlaylistStream.cxx
@@ -32,7 +32,7 @@
#include <assert.h>
static std::unique_ptr<SongEnumerator>
-playlist_open_path_suffix(Path path, Mutex &mutex, Cond &cond)
+playlist_open_path_suffix(Path path, Mutex &mutex)
try {
assert(!path.IsNull());
@@ -44,7 +44,7 @@ try {
if (!playlist_suffix_supported(suffix_utf8.c_str()))
return nullptr;
- auto is = OpenLocalInputStream(path, mutex, cond);
+ auto is = OpenLocalInputStream(path, mutex);
return playlist_list_open_stream_suffix(std::move(is),
suffix_utf8.c_str());
} catch (...) {
@@ -53,16 +53,16 @@ try {
}
std::unique_ptr<SongEnumerator>
-playlist_open_path(Path path, Mutex &mutex, Cond &cond)
+playlist_open_path(Path path, Mutex &mutex)
try {
assert(!path.IsNull());
const std::string uri_utf8 = path.ToUTF8();
auto playlist = !uri_utf8.empty()
- ? playlist_list_open_uri(uri_utf8.c_str(), mutex, cond)
+ ? playlist_list_open_uri(uri_utf8.c_str(), mutex)
: nullptr;
if (playlist == nullptr)
- playlist = playlist_open_path_suffix(path, mutex, cond);
+ playlist = playlist_open_path_suffix(path, mutex);
return playlist;
} catch (...) {
@@ -71,15 +71,15 @@ try {
}
std::unique_ptr<SongEnumerator>
-playlist_open_remote(const char *uri, Mutex &mutex, Cond &cond)
+playlist_open_remote(const char *uri, Mutex &mutex)
try {
assert(uri_has_scheme(uri));
- auto playlist = playlist_list_open_uri(uri, mutex, cond);
+ auto playlist = playlist_list_open_uri(uri, mutex);
if (playlist != nullptr)
return playlist;
- auto is = InputStream::OpenReady(uri, mutex, cond);
+ auto is = InputStream::OpenReady(uri, mutex);
return playlist_list_open_stream(std::move(is), uri);
} catch (...) {
LogError(std::current_exception());
diff --git a/src/playlist/PlaylistStream.hxx b/src/playlist/PlaylistStream.hxx
index c53b9f8b0..46742e970 100644
--- a/src/playlist/PlaylistStream.hxx
+++ b/src/playlist/PlaylistStream.hxx
@@ -25,7 +25,6 @@
#include <memory>
class Mutex;
-class Cond;
class SongEnumerator;
class Path;
@@ -37,10 +36,10 @@ class Path;
*/
gcc_nonnull_all
std::unique_ptr<SongEnumerator>
-playlist_open_path(Path path, Mutex &mutex, Cond &cond);
+playlist_open_path(Path path, Mutex &mutex);
gcc_nonnull_all
std::unique_ptr<SongEnumerator>
-playlist_open_remote(const char *uri, Mutex &mutex, Cond &cond);
+playlist_open_remote(const char *uri, Mutex &mutex);
#endif
diff --git a/src/playlist/Print.cxx b/src/playlist/Print.cxx
index bc3c96fa2..95b8ad66b 100644
--- a/src/playlist/Print.cxx
+++ b/src/playlist/Print.cxx
@@ -26,7 +26,6 @@
#include "DetachedSong.hxx"
#include "fs/Traits.hxx"
#include "thread/Mutex.hxx"
-#include "thread/Cond.hxx"
#include "Partition.hxx"
#include "Instance.hxx"
@@ -59,7 +58,6 @@ playlist_file_print(Response &r, Partition &partition,
const char *uri, bool detail)
{
Mutex mutex;
- Cond cond;
#ifndef ENABLE_DATABASE
(void)partition;
@@ -69,7 +67,7 @@ playlist_file_print(Response &r, Partition &partition,
#ifdef ENABLE_DATABASE
partition.instance.storage,
#endif
- mutex, cond);
+ mutex);
if (playlist == nullptr)
return false;
diff --git a/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx b/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx
index ef99428bd..afbf6a55c 100644
--- a/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx
+++ b/src/playlist/plugins/EmbeddedCuePlaylistPlugin.cxx
@@ -89,8 +89,7 @@ static constexpr TagHandler embcue_tag_handler = {
static std::unique_ptr<SongEnumerator>
embcue_playlist_open_uri(const char *uri,
- gcc_unused Mutex &mutex,
- gcc_unused Cond &cond)
+ gcc_unused Mutex &mutex)
{
if (!PathTraitsUTF8::IsAbsolute(uri))
/* only local files supported */
diff --git a/src/playlist/plugins/FlacPlaylistPlugin.cxx b/src/playlist/plugins/FlacPlaylistPlugin.cxx
index 58e5c9641..330c3b332 100644
--- a/src/playlist/plugins/FlacPlaylistPlugin.cxx
+++ b/src/playlist/plugins/FlacPlaylistPlugin.cxx
@@ -88,7 +88,7 @@ FlacPlaylist::NextSong()
static std::unique_ptr<SongEnumerator>
flac_playlist_open_uri(const char *uri,
- gcc_unused Mutex &mutex, gcc_unused Cond &cond)
+ gcc_unused Mutex &mutex)
{
if (!PathTraitsUTF8::IsAbsolute(uri))
/* only local files supported */
diff --git a/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx b/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx
index fdaffb6c9..3a5df3946 100644
--- a/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx
+++ b/src/playlist/plugins/SoundCloudPlaylistPlugin.cxx
@@ -221,9 +221,9 @@ static constexpr yajl_callbacks parse_callbacks = {
*/
static void
soundcloud_parse_json(const char *url, Yajl::Handle &handle,
- Mutex &mutex, Cond &cond)
+ Mutex &mutex)
{
- auto input_stream = InputStream::OpenReady(url, mutex, cond);
+ auto input_stream = InputStream::OpenReady(url, mutex);
Yajl::ParseInputStream(handle, *input_stream);
}
@@ -235,7 +235,7 @@ soundcloud_parse_json(const char *url, Yajl::Handle &handle,
* soundcloud://url/<url or path of soundcloud page>
*/
static std::unique_ptr<SongEnumerator>
-soundcloud_open_uri(const char *uri, Mutex &mutex, Cond &cond)
+soundcloud_open_uri(const char *uri, Mutex &mutex)
{
assert(strncmp(uri, "soundcloud://", 13) == 0);
uri += 13;
@@ -277,7 +277,7 @@ soundcloud_open_uri(const char *uri, Mutex &mutex, Cond &cond)
SoundCloudJsonData data;
Yajl::Handle handle(&parse_callbacks, nullptr, &data);
- soundcloud_parse_json(u, handle, mutex, cond);
+ soundcloud_parse_json(u, handle, mutex);
data.songs.reverse();
return std::make_unique<MemorySongEnumerator>(std::move(data.songs));