diff options
Diffstat (limited to 'plugins.c')
-rw-r--r-- | plugins.c | 139 |
1 files changed, 105 insertions, 34 deletions
@@ -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 |