Skip to content

Commit

Permalink
Add an opaque parameter to add_ti_cb
Browse files Browse the repository at this point in the history
  • Loading branch information
mahkoh committed Jul 31, 2016
1 parent 900a28e commit 1613d92
Show file tree
Hide file tree
Showing 13 changed files with 37 additions and 29 deletions.
4 changes: 3 additions & 1 deletion cmus.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,16 @@ enum file_type cmus_detect_ft(const char *name, char **ret)
return FILE_TYPE_FILE;
}

void cmus_add(add_ti_cb add, const char *name, enum file_type ft, int jt, int force)
void cmus_add(add_ti_cb add, const char *name, enum file_type ft, int jt, int force,
void *opaque)
{
struct add_data *data = xnew(struct add_data, 1);

data->add = add;
data->name = xstrdup(name);
data->type = ft;
data->force = force;
data->opaque = opaque;

job_schedule_add(jt, data);
}
Expand Down
5 changes: 3 additions & 2 deletions cmus.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ typedef int (*for_each_ti_cb)(track_info_cb cb, void *data);
typedef int (*for_each_sel_ti_cb)(track_info_cb cb, void *data, int reverse);

/* lib_add_track, pl_add_track, play_queue_append, play_queue_prepend */
typedef void (*add_ti_cb)(struct track_info *);
typedef void (*add_ti_cb)(struct track_info *, void *opaque);

/* cmus_save, cmus_save_ext */
typedef int (*save_ti_cb)(for_each_ti_cb for_each_ti, const char *filename);
Expand All @@ -72,7 +72,8 @@ enum file_type cmus_detect_ft(const char *name, char **ret);
*
* returns immediately, actual work is done in the worker thread.
*/
void cmus_add(add_ti_cb, const char *name, enum file_type ft, int jt, int force);
void cmus_add(add_ti_cb, const char *name, enum file_type ft, int jt,
int force, void *opaque);

int cmus_save(for_each_ti_cb for_each_ti, const char *filename);
int cmus_save_ext(for_each_ti_cb for_each_ti, const char *filename);
Expand Down
20 changes: 10 additions & 10 deletions command_mode.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,16 +105,16 @@ void view_add(int view, char *arg, int prepend)
switch (view) {
case TREE_VIEW:
case SORTED_VIEW:
cmus_add(lib_add_track, name, ft, JOB_TYPE_LIB, 0);
cmus_add(lib_add_track, name, ft, JOB_TYPE_LIB, 0, NULL);
break;
case PLAYLIST_VIEW:
cmus_add(pl_add_track, name, ft, JOB_TYPE_PL, 0);
cmus_add(pl_add_track, name, ft, JOB_TYPE_PL, 0, NULL);
break;
case QUEUE_VIEW:
if (prepend) {
cmus_add(play_queue_prepend, name, ft, JOB_TYPE_QUEUE, 0);
cmus_add(play_queue_prepend, name, ft, JOB_TYPE_QUEUE, 0, NULL);
} else {
cmus_add(play_queue_append, name, ft, JOB_TYPE_QUEUE, 0);
cmus_add(play_queue_append, name, ft, JOB_TYPE_QUEUE, 0, NULL);
}
break;
default:
Expand Down Expand Up @@ -150,14 +150,14 @@ void view_load(int view, char *arg)
case SORTED_VIEW:
worker_remove_jobs(JOB_TYPE_LIB);
editable_clear(&lib_editable);
cmus_add(lib_add_track, name, FILE_TYPE_PL, JOB_TYPE_LIB, 0);
cmus_add(lib_add_track, name, FILE_TYPE_PL, JOB_TYPE_LIB, 0, NULL);
free(lib_filename);
lib_filename = name;
break;
case PLAYLIST_VIEW:
worker_remove_jobs(JOB_TYPE_PL);
editable_clear(&pl_editable);
cmus_add(pl_add_track, name, FILE_TYPE_PL, JOB_TYPE_PL, 0);
cmus_add(pl_add_track, name, FILE_TYPE_PL, JOB_TYPE_PL, 0, NULL);
free(pl_filename);
pl_filename = name;
break;
Expand Down Expand Up @@ -1381,7 +1381,7 @@ static int wrapper_cb(void *data, struct track_info *ti)
{
struct wrapper_cb_data *add = data;

add->cb(ti);
add->cb(ti, NULL);
return 0;
}

Expand All @@ -1401,7 +1401,7 @@ static void add_from_browser(add_ti_cb add, int job_type)

ft = cmus_detect_ft(sel, &ret);
if (ft != FILE_TYPE_INVALID) {
cmus_add(add, ret, ft, job_type, 0);
cmus_add(add, ret, ft, job_type, 0, NULL);
window_down(browser_win, 1);
}
free(ret);
Expand Down Expand Up @@ -1882,7 +1882,7 @@ static void cmd_lqueue(char *arg)
struct rb_node *tmp;

rb_for_each_entry(t, tmp, &a->album->track_root, tree_node)
play_queue_append(tree_track_info(t));
play_queue_append(tree_track_info(t), NULL);
free(a);
item = next;
} while (item != &head);
Expand Down Expand Up @@ -1934,7 +1934,7 @@ static void cmd_tqueue(char *arg)
do {
struct list_head *next = item->next;
struct track_list *t = container_of(item, struct track_list, node);
play_queue_append(t->track->info);
play_queue_append(t->track->info, NULL);
free(t);
item = next;
} while (item != &head);
Expand Down
8 changes: 5 additions & 3 deletions job.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ struct job_result {
add_ti_cb add_cb;
size_t add_num;
struct track_info **add_ti;
void *add_opaque;
};
struct {
size_t update_num;
Expand Down Expand Up @@ -143,6 +144,7 @@ static void flush_ti_buffer(void)
res->add_cb = jd->add;
res->add_num = ti_buffer_fill;
res->add_ti = ti_buffer;
res->add_opaque = jd->opaque;

job_push_result(res);

Expand Down Expand Up @@ -415,7 +417,7 @@ static void free_add_job(void *data)
static void job_handle_add_result(struct job_result *res)
{
for (size_t i = 0; i < res->add_num; i++) {
res->add_cb(res->add_ti[i]);
res->add_cb(res->add_ti[i], res->add_opaque);
track_info_unref(res->add_ti[i]);
}

Expand Down Expand Up @@ -498,7 +500,7 @@ static void job_handle_update_result(struct job_result *res)
d_print("mtime changed: %s\n", ti->filename);
force = ti->duration == 0;
cmus_add(lib_add_track, ti->filename, FILE_TYPE_FILE,
JOB_TYPE_LIB, force);
JOB_TYPE_LIB, force, NULL);
}

track_info_unref(ti);
Expand Down Expand Up @@ -546,7 +548,7 @@ static void job_handle_update_cache_result(struct job_result *res)

new = old->next;
if (lib_remove(old) && new)
lib_add_track(new);
lib_add_track(new, NULL);
editable_update_track(&pl_editable, old, new);
editable_update_track(&pq_editable, old, new);
if (player_info.ti == old && new) {
Expand Down
1 change: 1 addition & 0 deletions job.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ struct add_data {
enum file_type type;
char *name;
add_ti_cb add;
void *opaque;
unsigned int force : 1;
};

Expand Down
2 changes: 1 addition & 1 deletion lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ static int is_filtered(struct track_info *ti)
return 0;
}

void lib_add_track(struct track_info *ti)
void lib_add_track(struct track_info *ti, void *opaque)
{
if (!hash_insert(ti)) {
/* duplicate files not allowed */
Expand Down
2 changes: 1 addition & 1 deletion lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ void lib_init(void);
void tree_init(void);
struct track_info *lib_goto_next(void);
struct track_info *lib_goto_prev(void);
void lib_add_track(struct track_info *track_info);
void lib_add_track(struct track_info *track_info, void *opaque);
void lib_set_filter(struct expr *expr);
void lib_set_live_filter(const char *str);
int lib_remove(struct track_info *ti);
Expand Down
2 changes: 1 addition & 1 deletion options.c
Original file line number Diff line number Diff line change
Expand Up @@ -1716,7 +1716,7 @@ void resume_load(void)
ti = old = cache_get_ti(resume.lib_filename, 0);
cache_unlock();
if (ti) {
lib_add_track(ti);
lib_add_track(ti, NULL);
track_info_unref(ti);
lib_store_cur_track(ti);
track_info_unref(ti);
Expand Down
6 changes: 3 additions & 3 deletions pl.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ static void pl_free_track(struct list_head *item)
void pl_init(void)
{
editable_init(&pl_editable, pl_free_track);
cmus_add(pl_add_track, pl_autosave_filename, FILE_TYPE_PL, JOB_TYPE_PL, 0);
cmus_add(pl_add_track, pl_autosave_filename, FILE_TYPE_PL, JOB_TYPE_PL, 0, NULL);
}

static int dummy_filter(const struct simple_track *track)
Expand Down Expand Up @@ -119,7 +119,7 @@ void pl_sel_current(void)
}
}

void pl_add_track(struct track_info *ti)
void pl_add_track(struct track_info *ti, void *opaque)
{
struct shuffle_track *track = xnew(struct shuffle_track, 1);

Expand Down Expand Up @@ -215,7 +215,7 @@ void pl_win_toggle(void)
void pl_win_update(void)
{
editable_clear(&pl_editable);
cmus_add(pl_add_track, pl_filename, FILE_TYPE_PL, JOB_TYPE_PL, 0);
cmus_add(pl_add_track, pl_filename, FILE_TYPE_PL, JOB_TYPE_PL, 0, NULL);
}

void pl_win_next(void)
Expand Down
2 changes: 1 addition & 1 deletion pl.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void pl_exit(void);
struct track_info *pl_goto_next(void);
struct track_info *pl_goto_prev(void);
struct track_info *pl_activate_selected(void);
void pl_add_track(struct track_info *track_info);
void pl_add_track(struct track_info *track_info, void *opaque);
void pl_sel_current(void);
void pl_reshuffle(void);
int pl_for_each(int (*cb)(void *data, struct track_info *ti), void *data);
Expand Down
4 changes: 2 additions & 2 deletions play_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ void play_queue_init(void)
editable_init(&pq_editable, pq_free_track);
}

void play_queue_append(struct track_info *ti)
void play_queue_append(struct track_info *ti, void *opaque)
{
struct simple_track *t = simple_track_new(ti);

editable_add(&pq_editable, t);
}

void play_queue_prepend(struct track_info *ti)
void play_queue_prepend(struct track_info *ti, void *opaque)
{
struct simple_track *t = simple_track_new(ti);

Expand Down
4 changes: 2 additions & 2 deletions play_queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
extern struct editable pq_editable;

void play_queue_init(void);
void play_queue_append(struct track_info *ti);
void play_queue_prepend(struct track_info *ti);
void play_queue_append(struct track_info *ti, void *opaque);
void play_queue_prepend(struct track_info *ti, void *opaque);
struct track_info *play_queue_remove(void);
int play_queue_for_each(int (*cb)(void *data, struct track_info *ti), void *data);

Expand Down
6 changes: 4 additions & 2 deletions ui_curses.c
Original file line number Diff line number Diff line change
Expand Up @@ -2331,10 +2331,12 @@ static void init_all(void)

if (resume_cmus) {
resume_load();
cmus_add(play_queue_append, play_queue_autosave_filename, FILE_TYPE_PL, JOB_TYPE_QUEUE, 0);
cmus_add(play_queue_append, play_queue_autosave_filename,
FILE_TYPE_PL, JOB_TYPE_QUEUE, 0, NULL);
}

cmus_add(lib_add_track, lib_autosave_filename, FILE_TYPE_PL, JOB_TYPE_LIB, 0);
cmus_add(lib_add_track, lib_autosave_filename, FILE_TYPE_PL,
JOB_TYPE_LIB, 0, NULL);
}

static void exit_all(void)
Expand Down

0 comments on commit 1613d92

Please sign in to comment.