summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deadbeef.h21
-rw-r--r--plugins.c45
-rw-r--r--plugins.h18
3 files changed, 72 insertions, 12 deletions
diff --git a/deadbeef.h b/deadbeef.h
index 8681e10a..422a971c 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -86,23 +86,22 @@ struct DB_plugin_s;
// player api definition
typedef struct {
+ // versioning
+ int vmajor;
+ int vminor;
// event subscribing
void (*ev_subscribe) (struct DB_plugin_s *plugin, int ev, db_callback_t callback, uintptr_t data);
void (*ev_unsubscribe) (struct DB_plugin_s *plugin, int ev, db_callback_t callback, uintptr_t data);
// md5sum calc
void (*md5) (uint8_t sig[16], const char *in, int len);
void (*md5_to_str) (char *str, const uint8_t sig[16]);
-
- // event sending and handling
- int (*messagepump_push)(uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2);
- int (*messagepump_pop)(uint32_t *id, uintptr_t *ctx, uint32_t *p1, uint32_t *p2);
- // playlist access
- DB_playItem_t *(*pl_item_alloc) (void);
- void (*pl_item_free)(DB_playItem_t *it);
- int (*pl_add_dir) (const char *dirname, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
- int (*pl_add_file) (const char *fname, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
- DB_playItem_t *(*pl_insert_dir) (DB_playItem_t *after, const char *dirname, int *pabort, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
- DB_playItem_t *(*pl_insert_file) (DB_playItem_t *after, const char *fname, int *pabort, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
+ // playback control
+ void (*playback_next) (void);
+ void (*playback_prev) (void);
+ void (*playback_pause) (void);
+ void (*playback_stop) (void);
+ void (*playback_play) (void);
+ void (*quit) (void);
} DB_functions_t;
// base plugin interface
diff --git a/plugins.c b/plugins.c
index 43fb875f..3333acd4 100644
--- a/plugins.c
+++ b/plugins.c
@@ -9,13 +9,24 @@
#endif
#include "plugins.h"
#include "md5/md5.h"
+#include "messagepump.h"
+#include "messages.h"
// deadbeef api
DB_functions_t deadbeef_api = {
+ // FIXME: set to 1.0 after api freeze
+ .vmajor = 0,
+ .vminor = 0,
.ev_subscribe = plug_ev_subscribe,
.ev_unsubscribe = plug_ev_unsubscribe,
.md5 = plug_md5,
- .md5_to_str = plug_md5_to_str
+ .md5_to_str = plug_md5_to_str,
+ .playback_next = plug_playback_next,
+ .playback_prev = plug_playback_prev,
+ .playback_pause = plug_playback_pause,
+ .playback_stop = plug_playback_stop,
+ .playback_play = plug_playback_play,
+ .quit = plug_quit,
};
void
@@ -73,6 +84,38 @@ plug_ev_unsubscribe (DB_plugin_t *plugin, int ev, db_callback_t callback, uintpt
}
void
+plug_playback_next (void) {
+ messagepump_push (M_NEXTSONG, 0, 0, 0);
+}
+
+void
+plug_playback_prev (void) {
+ messagepump_push (M_PREVSONG, 0, 0, 0);
+}
+
+void
+plug_playback_pause (void) {
+ messagepump_push (M_PAUSESONG, 0, 0, 0);
+}
+
+void
+plug_playback_stop (void) {
+ messagepump_push (M_STOPSONG, 0, 0, 0);
+}
+
+void
+plug_playback_play (void) {
+ messagepump_push (M_PLAYSONG, 0, 0, 0);
+}
+
+void
+plug_quit (void) {
+ progress_abort ();
+ messagepump_push (M_TERMINATE, 0, 0, 0);
+}
+
+/////// non-api functions (plugin support)
+void
plug_trigger_event (int ev) {
for (int i = 0; i < MAX_HANDLERS; i++) {
if (handlers[ev][i].plugin && !handlers[ev][i].plugin->inactive) {
diff --git a/plugins.h b/plugins.h
index 4cc1a409..ef228b51 100644
--- a/plugins.h
+++ b/plugins.h
@@ -23,4 +23,22 @@ plug_md5 (uint8_t sig[16], const char *in, int len);
void
plug_md5_to_str (char *str, const uint8_t sig[16]);
+void
+plug_playback_next (void);
+
+void
+plug_playback_prev (void);
+
+void
+plug_playback_pause (void);
+
+void
+plug_playback_stop (void);
+
+void
+plug_playback_play (void);
+
+void
+plug_quit (void);
+
#endif // __PLUGINS_H