diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2009-12-10 21:40:35 +0100 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2009-12-10 21:40:35 +0100 |
commit | dffdb68b1b6d587787a60118ae4ca10e0d398a8b (patch) | |
tree | c313d84a0cdd50e3398714f433e6e8b5c058ef3c /plugins.c | |
parent | e2ee21995ee43411965ec9f7e7a95f3c139850b2 (diff) |
plugin dynamic start/stop WIP
Diffstat (limited to 'plugins.c')
-rw-r--r-- | plugins.c | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -166,6 +166,7 @@ static DB_functions_t deadbeef_api = { // plugin communication .plug_get_decoder_list = plug_get_decoder_list, .plug_get_list = plug_get_list, + .plug_activate = plug_activate, }; DB_functions_t *deadbeef = &deadbeef_api; @@ -609,3 +610,43 @@ struct DB_plugin_s ** plug_get_list (void) { return g_plugins; } + +int +plug_activate (DB_plugin_t *plug, int activate) { + if (plug->inactive && !activate) { + return -1; + } + if (!plug->inactive && activate) { + return -1; + } + if (activate) { + if (plug->start) { + if (!plug->start ()) { + plug->inactive = 0; + } + else { + fprintf (stderr, "failed to start plugin %s\n", plug->name); + return -1; + } + return 0; + } + else { + return -1; + } + } + else { + if (plug->stop) { + if (!plug->stop ()) { + plug->inactive = 1; + } + else { + fprintf (stderr, "failed to stop plugin %s\n", plug->name); + return -1; + } + return 0; + } + else { + return -1; + } + } +} |