input_plugin: added methods init(), finish()
Instead of hard-coding the plugin global initialization in input_stream_global_init(), make it walk the plugin list and initialize all plugins.
This commit is contained in:
parent
36d24fb7ea
commit
9a350acf04
@ -91,17 +91,23 @@ struct input_curl {
|
|||||||
/** libcurl should accept "ICY 200 OK" */
|
/** libcurl should accept "ICY 200 OK" */
|
||||||
static struct curl_slist *http_200_aliases;
|
static struct curl_slist *http_200_aliases;
|
||||||
|
|
||||||
void input_curl_global_init(void)
|
static bool
|
||||||
|
input_curl_init(void)
|
||||||
{
|
{
|
||||||
CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
|
CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
|
||||||
if (code != CURLE_OK)
|
if (code != CURLE_OK) {
|
||||||
g_warning("curl_global_init() failed: %s\n",
|
g_warning("curl_global_init() failed: %s\n",
|
||||||
curl_easy_strerror(code));
|
curl_easy_strerror(code));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
http_200_aliases = curl_slist_append(http_200_aliases, "ICY 200 OK");
|
http_200_aliases = curl_slist_append(http_200_aliases, "ICY 200 OK");
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_curl_global_finish(void)
|
static void
|
||||||
|
input_curl_finish(void)
|
||||||
{
|
{
|
||||||
curl_slist_free_all(http_200_aliases);
|
curl_slist_free_all(http_200_aliases);
|
||||||
|
|
||||||
@ -948,6 +954,9 @@ input_curl_open(struct input_stream *is, const char *url)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const struct input_plugin input_plugin_curl = {
|
const struct input_plugin input_plugin_curl = {
|
||||||
|
.init = input_curl_init,
|
||||||
|
.finish = input_curl_finish,
|
||||||
|
|
||||||
.open = input_curl_open,
|
.open = input_curl_open,
|
||||||
.close = input_curl_close,
|
.close = input_curl_close,
|
||||||
.tag = input_curl_tag,
|
.tag = input_curl_tag,
|
||||||
|
@ -21,8 +21,4 @@
|
|||||||
|
|
||||||
extern const struct input_plugin input_plugin_curl;
|
extern const struct input_plugin input_plugin_curl;
|
||||||
|
|
||||||
void input_curl_global_init(void);
|
|
||||||
|
|
||||||
void input_curl_global_finish(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -28,6 +28,20 @@
|
|||||||
struct input_stream;
|
struct input_stream;
|
||||||
|
|
||||||
struct input_plugin {
|
struct input_plugin {
|
||||||
|
/**
|
||||||
|
* Global initialization. This method is called when MPD starts.
|
||||||
|
*
|
||||||
|
* @return true on success, false if the plugin should be
|
||||||
|
* disabled
|
||||||
|
*/
|
||||||
|
bool (*init)(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global deinitialization. Called once before MPD shuts
|
||||||
|
* down (only if init() has returned true).
|
||||||
|
*/
|
||||||
|
void (*finish)(void);
|
||||||
|
|
||||||
bool (*open)(struct input_stream *is, const char *url);
|
bool (*open)(struct input_stream *is, const char *url);
|
||||||
void (*close)(struct input_stream *is);
|
void (*close)(struct input_stream *is);
|
||||||
|
|
||||||
|
@ -49,21 +49,24 @@ static const struct input_plugin *const input_plugins[] = {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool input_plugins_enabled[G_N_ELEMENTS(input_plugins)];
|
||||||
|
|
||||||
static const unsigned num_input_plugins =
|
static const unsigned num_input_plugins =
|
||||||
sizeof(input_plugins) / sizeof(input_plugins[0]);
|
sizeof(input_plugins) / sizeof(input_plugins[0]);
|
||||||
|
|
||||||
void input_stream_global_init(void)
|
void input_stream_global_init(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CURL
|
for (unsigned i = 0; i < num_input_plugins; ++i)
|
||||||
input_curl_global_init();
|
if (input_plugins[i]->init == NULL || input_plugins[i]->init())
|
||||||
#endif
|
input_plugins_enabled[i] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_stream_global_finish(void)
|
void input_stream_global_finish(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CURL
|
for (unsigned i = 0; i < num_input_plugins; ++i)
|
||||||
input_curl_global_finish();
|
if (input_plugins_enabled[i] &&
|
||||||
#endif
|
input_plugins[i]->finish != NULL)
|
||||||
|
input_plugins[i]->finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
Loading…
Reference in New Issue
Block a user