playlist/registry: add option "as_directory"
This allows users to disable the "CUE files as directories" feature without having to disable the CUE playlist plugin completely. This feature has been annoying some users.
This commit is contained in:
@@ -95,7 +95,7 @@ UpdateWalk::UpdatePlaylistFile(Directory &directory,
|
||||
if (plugin == nullptr)
|
||||
return false;
|
||||
|
||||
if (plugin->as_folder)
|
||||
if (GetPlaylistPluginAsFolder(*plugin))
|
||||
UpdatePlaylistFile(directory, name, info, *plugin);
|
||||
|
||||
PlaylistInfo pi(name, info.mtime);
|
||||
|
||||
@@ -52,7 +52,16 @@ static bool
|
||||
HavePlaylistPluginForFilename(const char *filename) noexcept
|
||||
{
|
||||
const char *suffix = PathTraitsUTF8::GetFilenameSuffix(filename);
|
||||
return suffix != nullptr && playlist_suffix_supported(suffix);
|
||||
if (suffix == nullptr)
|
||||
return false;
|
||||
|
||||
const auto plugin = FindPlaylistPluginBySuffix(suffix);
|
||||
if (plugin == nullptr)
|
||||
return false;
|
||||
|
||||
/* discard the special directory if the user disables the
|
||||
plugin's "as_directory" setting */
|
||||
return GetPlaylistPluginAsFolder(*plugin);
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
@@ -71,6 +71,9 @@ static constexpr unsigned n_playlist_plugins =
|
||||
/** which plugins have been initialized successfully? */
|
||||
static bool playlist_plugins_enabled[n_playlist_plugins];
|
||||
|
||||
/** which plugins have the "as_folder" option enabled? */
|
||||
static bool playlist_plugins_as_folder[n_playlist_plugins];
|
||||
|
||||
#define playlist_plugins_for_each_enabled(plugin) \
|
||||
playlist_plugins_for_each(plugin) \
|
||||
if (playlist_plugins_enabled[playlist_plugin_iterator - playlist_plugins])
|
||||
@@ -96,6 +99,10 @@ playlist_list_global_init(const ConfigData &config)
|
||||
|
||||
playlist_plugins_enabled[i] =
|
||||
playlist_plugin_init(playlist_plugins[i], *param);
|
||||
|
||||
playlist_plugins_as_folder[i] =
|
||||
param->GetBlockValue("as_directory",
|
||||
playlist_plugins[i]->as_folder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,6 +113,16 @@ playlist_list_global_finish() noexcept
|
||||
playlist_plugin_finish(plugin);
|
||||
}
|
||||
|
||||
bool
|
||||
GetPlaylistPluginAsFolder(const PlaylistPlugin &plugin) noexcept
|
||||
{
|
||||
/* this loop has no end condition because it must finish when
|
||||
the plugin was found */
|
||||
for (std::size_t i = 0;; ++i)
|
||||
if (playlist_plugins[i] == &plugin)
|
||||
return playlist_plugins_as_folder[i];
|
||||
}
|
||||
|
||||
static std::unique_ptr<SongEnumerator>
|
||||
playlist_list_open_uri_scheme(const char *uri, Mutex &mutex,
|
||||
bool *tried)
|
||||
|
||||
@@ -59,6 +59,14 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Shall this playlists supported by this plugin be represented as
|
||||
* directories in the database?
|
||||
*/
|
||||
gcc_const
|
||||
bool
|
||||
GetPlaylistPluginAsFolder(const PlaylistPlugin &plugin) noexcept;
|
||||
|
||||
/**
|
||||
* Opens a playlist by its URI.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user