summaryrefslogtreecommitdiff
path: root/plugins.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins.c')
-rw-r--r--plugins.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/plugins.c b/plugins.c
index 0988d1b7..b982cc82 100644
--- a/plugins.c
+++ b/plugins.c
@@ -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;
+ }
+ }
+}