summaryrefslogtreecommitdiff
path: root/plugins.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins.c')
-rw-r--r--plugins.c139
1 files changed, 105 insertions, 34 deletions
diff --git a/plugins.c b/plugins.c
index e4b41c27..0d94713d 100644
--- a/plugins.c
+++ b/plugins.c
@@ -22,7 +22,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <gtk/gtk.h>
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@@ -30,7 +29,6 @@
#include "md5/md5.h"
#include "messagepump.h"
#include "threading.h"
-#include "progress.h"
#include "playlist.h"
#include "volume.h"
#include "streamer.h"
@@ -63,6 +61,17 @@ static DB_functions_t deadbeef_api = {
.playback_set_pos = plug_playback_set_pos,
.playback_get_samplerate = p_get_rate,
.playback_update_bitrate = streamer_update_bitrate,
+ .playback_enum_soundcards = palsa_enum_soundcards,
+ // playback status
+ .playback_isstopped = p_isstopped,
+ .playback_ispaused = p_ispaused,
+ // streamer access
+ .streamer_get_playing_track = (DB_playItem_t *(*) (void))streamer_get_playing_track,
+ .streamer_get_streaming_track = (DB_playItem_t *(*) (void))streamer_get_streaming_track,
+ .streamer_get_playpos = streamer_get_playpos,
+ .streamer_seek = streamer_set_seek,
+ .streamer_ok_to_read = streamer_ok_to_read,
+ // process control
.get_config_dir = plug_get_config_dir,
.quit = plug_quit,
// threading
@@ -81,10 +90,36 @@ static DB_functions_t deadbeef_api = {
.pl_item_alloc = (DB_playItem_t* (*)(void))pl_item_alloc,
.pl_item_free = (void (*)(DB_playItem_t *))pl_item_free,
.pl_item_copy = (void (*)(DB_playItem_t *, DB_playItem_t *))pl_item_copy,
+ .pl_add_file = (int (*) (const char *, int (*cb)(DB_playItem_t *it, void *data), void *))pl_add_file,
+ .pl_add_dir = (int (*) (const char *dirname, int (*cb)(DB_playItem_t *it, void *data), void *user_data))pl_add_dir,
.pl_insert_item = (DB_playItem_t *(*) (DB_playItem_t *after, DB_playItem_t *it))pl_insert_item,
+ .pl_insert_dir = (DB_playItem_t *(*) (DB_playItem_t *after, const char *dirname, int *pabort, int (*cb)(DB_playItem_t *it, void *data), void *user_data))pl_insert_dir,
+ .pl_insert_file = (DB_playItem_t *(*) (DB_playItem_t *after, const char *fname, int *pabort, int (*cb)(DB_playItem_t *it, void *data), void *user_data))pl_insert_file,
.pl_get_idx_of = (int (*) (DB_playItem_t *it))pl_get_idx_of,
+ .pl_get_for_idx = (DB_playItem_t * (*)(int))pl_get_for_idx,
+ .pl_get_for_idx_and_iter = (DB_playItem_t * (*) (int idx, int iter))pl_get_for_idx_and_iter,
.pl_set_item_duration = (void (*) (DB_playItem_t *it, float duration))pl_set_item_duration,
.pl_get_item_duration = (float (*) (DB_playItem_t *it))pl_get_item_duration,
+ .pl_get_totaltime = pl_get_totaltime,
+ .pl_getcount = pl_getcount,
+ .pl_getcurrent = (DB_playItem_t *(*)(void))pl_getcurrent,
+ .pl_delete_selected = pl_delete_selected,
+ .pl_set_cursor = pl_set_cursor,
+ .pl_get_cursor = pl_get_cursor,
+ .pl_set_selected = (void (*) (DB_playItem_t *, int))pl_set_selected,
+ .pl_is_selected = (int (*) (DB_playItem_t *))pl_is_selected,
+ .pl_free = pl_free,
+ .pl_load = pl_load,
+ .pl_save = pl_save,
+ .pl_select_all = pl_select_all,
+ .pl_crop_selected = pl_crop_selected,
+ .pl_getselcount = pl_getselcount,
+ .pl_get_first = (DB_playItem_t *(*) (int))pl_get_first,
+ .pl_get_last = (DB_playItem_t *(*) (int))pl_get_last,
+ .pl_get_next = (DB_playItem_t *(*) (DB_playItem_t *, int))pl_get_next,
+ .pl_get_prev = (DB_playItem_t *(*) (DB_playItem_t *, int))pl_get_prev,
+ .pl_format_title = (int (*) (DB_playItem_t *it, char *s, int size, const char *fmt))pl_format_title,
+ .pl_format_item_display_name = (void (*) (DB_playItem_t *it, char *str, int len))pl_format_item_display_name,
// metainfo
.pl_add_meta = (void (*) (DB_playItem_t *, const char *, const char *))pl_add_meta,
.pl_find_meta = (const char *(*) (DB_playItem_t *, const char *))pl_find_meta,
@@ -97,6 +132,7 @@ static DB_functions_t deadbeef_api = {
.volume_get_db = volume_get_db,
.volume_set_amp = plug_volume_set_amp,
.volume_get_amp = volume_get_amp,
+ .volume_get_min_db = volume_get_min_db,
// junk reading
.junk_read_id3v1 = (int (*)(DB_playItem_t *it, DB_FILE *fp))junk_read_id3v1,
.junk_read_id3v2 = (int (*)(DB_playItem_t *it, DB_FILE *fp))junk_read_id3v2,
@@ -121,9 +157,12 @@ static DB_functions_t deadbeef_api = {
.conf_get_float = conf_get_float,
.conf_get_int = conf_get_int,
.conf_set_str = conf_set_str,
+ .conf_set_int = conf_set_int,
.conf_find = conf_find,
- .gui_lock = plug_gui_lock,
- .gui_unlock = plug_gui_unlock,
+ .conf_remove_items = conf_remove_items,
+ // plugin communication
+ .plug_get_decoder_list = plug_get_decoder_list,
+ .plug_get_list = plug_get_list,
};
DB_functions_t *deadbeef = &deadbeef_api;
@@ -134,18 +173,15 @@ plug_get_config_dir (void) {
}
void
-volumebar_notify_changed (void);
-
-void
plug_volume_set_db (float db) {
volume_set_db (db);
- volumebar_notify_changed ();
+ plug_trigger_event_volumechanged ();
}
void
plug_volume_set_amp (float amp) {
volume_set_amp (amp);
- volumebar_notify_changed ();
+ plug_trigger_event_volumechanged ();
}
#define MAX_PLUGINS 100
@@ -158,16 +194,6 @@ DB_decoder_t *g_decoder_plugins[MAX_DECODER_PLUGINS+1];
DB_vfs_t *g_vfs_plugins[MAX_VFS_PLUGINS+1];
void
-plug_gui_lock (void) {
- gdk_threads_enter ();
-}
-
-void
-plug_gui_unlock (void) {
- gdk_threads_leave ();
-}
-
-void
plug_md5 (uint8_t sig[16], const char *in, int len) {
md5_buffer (in, len, sig);
}
@@ -277,43 +303,88 @@ plug_playback_set_pos (float pos) {
void
plug_quit (void) {
- progress_abort ();
+ // FIXME progress_abort ();
messagepump_push (M_TERMINATE, 0, 0, 0);
}
/////// non-api functions (plugin support)
void
-plug_trigger_event (int ev, uintptr_t param) {
+plug_event_call (DB_event_t *ev) {
+ ev->time = time (NULL);
mutex_lock (mutex);
+ for (int i = 0; i < MAX_HANDLERS; i++) {
+ if (handlers[ev->event][i].plugin && !handlers[ev->event][i].plugin->inactive) {
+ handlers[ev->event][i].callback (ev, handlers[ev->event][i].data);
+ }
+ }
+ mutex_unlock (mutex);
+}
+
+void
+plug_trigger_event (int ev, uintptr_t param) {
DB_event_t *event;
switch (ev) {
case DB_EV_SONGSTARTED:
case DB_EV_SONGFINISHED:
{
- DB_event_song_t *pev = malloc (sizeof (DB_event_song_t));
- pev->song = DB_PLAYITEM (&str_playing_song);
+ DB_event_track_t *pev = alloca (sizeof (DB_event_track_t));
+ pev->index = -1;
+ pev->track = DB_PLAYITEM (&str_playing_song);
event = DB_EVENT (pev);
}
break;
case DB_EV_TRACKDELETED:
{
- DB_event_song_t *pev = malloc (sizeof (DB_event_song_t));
- pev->song = DB_PLAYITEM (param);
+ DB_event_track_t *pev = alloca (sizeof (DB_event_track_t));
+ pev->index = -1; // FIXME
+ pev->track = DB_PLAYITEM (param);
event = DB_EVENT (pev);
}
break;
default:
- event = malloc (sizeof (DB_event_t));
+ event = alloca (sizeof (DB_event_t));
}
event->event = ev;
- event->time = (double)clock () / CLOCKS_PER_SEC;
- for (int i = 0; i < MAX_HANDLERS; i++) {
- if (handlers[ev][i].plugin && !handlers[ev][i].plugin->inactive) {
- handlers[ev][i].callback (event, handlers[ev][i].data);
- }
- }
- free (event);
- mutex_unlock (mutex);
+ plug_event_call (event);
+}
+
+void
+plug_trigger_event_trackchange (int from, int to) {
+ DB_event_trackchange_t event;
+ event.ev.event = DB_EV_SONGCHANGED;
+ event.from = from;
+ event.to = to;
+ plug_event_call (DB_EVENT (&event));
+}
+void
+plug_trigger_event_trackinfochanged (int trk) {
+ DB_event_track_t event;
+ event.ev.event = DB_EV_SONGCHANGED;
+ event.index = trk;
+ event.track = DB_PLAYITEM (pl_get_for_idx (trk));
+ plug_event_call (DB_EVENT (&event));
+}
+
+void
+plug_trigger_event_paused (int paused) {
+ DB_event_state_t event;
+ event.ev.event = DB_EV_PAUSED;
+ event.state = paused;
+ plug_event_call (DB_EVENT (&event));
+}
+
+void
+plug_trigger_event_playlistchanged (void) {
+ DB_event_t event;
+ event.event = DB_EV_PLAYLISTCHANGED;
+ plug_event_call (DB_EVENT (&event));
+}
+
+void
+plug_trigger_event_volumechanged (void) {
+ DB_event_t event;
+ event.event = DB_EV_VOLUMECHANGED;
+ plug_event_call (DB_EVENT (&event));
}
int