summaryrefslogtreecommitdiff
path: root/playlist.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-11-04 20:20:19 +0100
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-11-04 20:20:19 +0100
commita98476f7163c1f6e0aea295a2c2c5374d4b18908 (patch)
tree6028142d925f895f16622944b09cd5963aad5e91 /playlist.c
parente62acd10103783e1d4c51d4b041530400137521a (diff)
file adding API WIP
Diffstat (limited to 'playlist.c')
-rw-r--r--playlist.c48
1 files changed, 38 insertions, 10 deletions
diff --git a/playlist.c b/playlist.c
index 0f8c1899..8cbe26f5 100644
--- a/playlist.c
+++ b/playlist.c
@@ -3939,30 +3939,58 @@ plt_save_config (playlist_t *plt) {
return plt_save_n (i);
}
+typedef struct ddb_fileadd_listener_s {
+ int (*callback)(ddb_fileadd_data_t *data, void *user_data);
+ void *user_data;
+ struct ddb_fileadd_listener_s *next;
+} ddb_fileadd_listener_t;
+
+static ddb_fileadd_listener_t *file_add_listeners;
+
void
listen_file_added (int (*callback)(ddb_fileadd_data_t *data, void *user_data), void *user_data) {
+ ddb_fileadd_listener_t *l = malloc (sizeof (ddb_fileadd_listener_t));
+ memset (l, 0, sizeof (ddb_fileadd_listener_t));
+ l->callback = callback;
+ l->user_data = user_data;
+ l->next = file_add_listeners;
+ file_add_listeners = l;
+
}
void
unlisten_file_added (int (*callback)(ddb_fileadd_data_t *data, void *user_data), void *user_data) {
+ ddb_fileadd_listener_t *prev = NULL;
+ for (ddb_fileadd_listener_t *l = file_add_listeners; l; prev = l, l = l->next) {
+ if (l->callback == callback && l->user_data == user_data) {
+ if (prev) {
+ prev->next = l->next;
+ }
+ else {
+ file_add_listeners = l->next;
+ }
+ free (l);
+ break;
+ }
+ }
}
DB_playItem_t *
-plt_load2 (int visibility, playlist_t *plt, playItem_t *after, const char *fname, int *pabort) {
- plt_load_int (visibility, plt, after, fname, pabort, NULL, NULL);
+plt_load2 (int visibility, playlist_t *plt, playItem_t *after, const char *fname, int *pabort, int (*callback)(playItem_t *it, void *user_data), void *user_data) {
+ plt_load_int (visibility, plt, after, fname, pabort, callback, user_data);
}
int
-plt_add_file2 (int visibility, playlist_t *plt, const char *fname) {
- return plt_add_file_int (visibility, plt, fname, NULL, NULL);
+plt_add_file2 (int visibility, playlist_t *plt, const char *fname, int (*callback)(playItem_t *it, void *user_data), void *user_data) {
+ return plt_add_file_int (visibility, plt, fname, callback, user_data);
}
int
-plt_add_dir2 (int visibility, playlist_t *plt, const char *dirname) {
+plt_add_dir2 (int visibility, playlist_t *plt, const char *dirname, int (*callback)(playItem_t *it, void *user_data), void *user_data) {
follow_symlinks = conf_get_int ("add_folders_follow_symlinks", 0);
ignore_archives = conf_get_int ("ignore_archives", 1);
int abort = 0;
- playItem_t *it = plt_insert_dir_int (visibility, plt, NULL, plt->tail[PL_MAIN], dirname, &abort, NULL, NULL);
+ playItem_t *it = plt_insert_dir_int (visibility, plt, NULL, plt->tail[PL_MAIN], dirname, &abort, callback, user_data);
if (it) {
// pl_insert_file doesn't hold reference, don't unref here
return 0;
@@ -3971,11 +3999,11 @@ plt_add_dir2 (int visibility, playlist_t *plt, const char *dirname) {
}
playItem_t *
-plt_insert_file2 (int visibility, playlist_t *playlist, playItem_t *after, const char *fname, int *pabort) {
- return plt_insert_file_int (visibility, playlist, after, fname, pabort, NULL, NULL);
+plt_insert_file2 (int visibility, playlist_t *playlist, playItem_t *after, const char *fname, int *pabort, int (*callback)(playItem_t *it, void *user_data), void *user_data) {
+ return plt_insert_file_int (visibility, playlist, after, fname, pabort, callback, user_data);
}
playItem_t *
-plt_insert_dir2 (int visibility, playlist_t *plt, playItem_t *after, const char *dirname, int *pabort) {
- return plt_insert_dir_int (visibility, plt, NULL, after, dirname, pabort, NULL, NULL);
+plt_insert_dir2 (int visibility, playlist_t *plt, playItem_t *after, const char *dirname, int *pabort, int (*callback)(playItem_t *it, void *user_data), void *user_data) {
+ return plt_insert_dir_int (visibility, plt, NULL, after, dirname, pabort, callback, user_data);
}