diff options
author | 2011-04-16 21:01:37 +0200 | |
---|---|---|
committer | 2011-04-16 21:01:37 +0200 | |
commit | 1416dfbf622b443c309e299e0b1efd01646c8b37 (patch) | |
tree | 4794b0edfff95bce654f253b586c9aaa4e970e7f | |
parent | d804aaaad0df4a532cfe397b5190f833837257b9 (diff) |
get rid of some legacy events;
update playlist grouping on metadata changes
-rw-r--r-- | deadbeef.h | 12 | ||||
-rw-r--r-- | playlist.c | 14 | ||||
-rw-r--r-- | playlist.h | 6 | ||||
-rw-r--r-- | plugins.c | 6 | ||||
-rw-r--r-- | plugins/gtkui/ddblistview.c | 6 | ||||
-rw-r--r-- | plugins/gtkui/ddblistview.h | 4 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.c | 6 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.h | 4 | ||||
-rw-r--r-- | plugins/gtkui/mainplaylist.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/search.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/trkproperties.c | 1 | ||||
-rw-r--r-- | plugins/vfs_curl/vfs_curl.c | 13 | ||||
-rw-r--r-- | plugins/vorbis/vorbis.c | 12 |
13 files changed, 45 insertions, 43 deletions
@@ -375,11 +375,12 @@ typedef struct { int (*plt_get_title) (void *handle, char *buffer, int bufsize); int (*plt_set_title) (void *handle, const char *title); - // sets the modification time using time(NULL) call + // increments modification index void (*plt_modified) (void *handle); - // returns the time of last modification - time_t (*plt_get_modification_time) (void *handle); + // returns modication index + // the index is incremented by 1 every time playlist changes + int (*plt_get_modification_idx) (void *handle); // playlist metadata // this kind of metadata is stored in playlist (dbpl) files @@ -604,11 +605,6 @@ typedef struct { void (*plug_remove_decoder_id) (const char *id); struct DB_plugin_s *(*plug_get_for_id) (const char *id); - // plugin events - void (*plug_trigger_event_trackchange) (DB_playItem_t *from, DB_playItem_t *to); - void (*plug_trigger_event_trackinfochanged) (DB_playItem_t *track); - void (*plug_trigger_event_playlistchanged) (void); - // misc utilities int (*is_local_file) (const char *fname); // returns 1 for local filename, 0 otherwise @@ -504,20 +504,16 @@ plt_set_title (playlist_t *p, const char *title) { void plt_modified (playlist_t *plt) { pl_lock (); - time_t modtime = time (NULL); - if (modtime <= plt->modification_time) { - modtime = plt->modification_time+1; - } - plt->modification_time = modtime; + plt->modification_idx++; pl_unlock (); } -time_t -plt_get_modification_time (playlist_t *plt) { +int +plt_get_modification_idx (playlist_t *plt) { pl_lock (); - time_t res = plt->modification_time; + int idx = plt->modification_idx; pl_unlock (); - return res; + return idx; } void @@ -52,7 +52,7 @@ typedef struct playlist_s { struct playlist_s *next; int count[2]; float totaltime; - time_t modification_time; + int modification_idx; playItem_t *head[PL_MAX_ITERATORS]; // head of linked list playItem_t *tail[PL_MAX_ITERATORS]; // tail of linked list int current_row[PL_MAX_ITERATORS]; // current row (cursor) @@ -129,8 +129,8 @@ plt_set_title (playlist_t *plt, const char *title); void plt_modified (playlist_t *plt); -time_t -plt_get_modification_time (playlist_t *plt); +int +plt_get_modification_idx (playlist_t *plt); // moves playlist #from to position #to void @@ -117,7 +117,7 @@ static DB_functions_t deadbeef_api = { .plt_get_title = (int (*)(void *handle, char *buffer, int sz))plt_get_title, .plt_set_title = (int (*)(void *handle, const char *buffer))plt_set_title, .plt_modified = (void (*) (void *handle))plt_modified, - .plt_get_modification_time = (time_t (*) (void *handle))plt_get_modification_time, + .plt_get_modification_idx = (int (*) (void *handle))plt_get_modification_idx, // playlist metadata .plt_add_meta = (void (*) (void *handle, const char *key, const char *value))plt_add_meta, @@ -282,10 +282,6 @@ static DB_functions_t deadbeef_api = { .plug_get_decoder_id = plug_get_decoder_id, .plug_remove_decoder_id = plug_remove_decoder_id, .plug_get_for_id = plug_get_for_id, - // plugin events - .plug_trigger_event_trackchange = (void (*) (DB_playItem_t *from, DB_playItem_t *to))plug_trigger_event_trackchange, - .plug_trigger_event_trackinfochanged = (void (*) (DB_playItem_t *track))plug_trigger_event_trackinfochanged, - .plug_trigger_event_playlistchanged = plug_trigger_event_playlistchanged, // misc utilities .is_local_file = plug_is_local_file, // pcm utilities diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c index 996e66cd..a2c4bd16 100644 --- a/plugins/gtkui/ddblistview.c +++ b/plugins/gtkui/ddblistview.c @@ -530,8 +530,8 @@ ddb_listview_list_configure_event (GtkWidget *widget, static void ddb_listview_groupcheck (DdbListview *listview) { - time_t tm = listview->binding->modification_time (); - if (tm != listview->groups_build_time) { + int idx = listview->binding->modification_idx (); + if (idx != listview->groups_build_idx) { ddb_listview_build_groups (listview); } } @@ -2882,7 +2882,7 @@ void ddb_listview_build_groups (DdbListview *listview) { deadbeef->pl_lock (); int old_height = listview->fullheight; - listview->groups_build_time = listview->binding->modification_time (); + listview->groups_build_idx = listview->binding->modification_idx (); ddb_listview_free_groups (listview); listview->fullheight = 0; diff --git a/plugins/gtkui/ddblistview.h b/plugins/gtkui/ddblistview.h index c7476607..ed1334e8 100644 --- a/plugins/gtkui/ddblistview.h +++ b/plugins/gtkui/ddblistview.h @@ -85,7 +85,7 @@ typedef struct { void (*col_free_user_data) (void *user_data); void (*vscroll_changed) (int pos); void (*cursor_changed) (int pos); - time_t (*modification_time) (void); + int (*modification_idx) (void); } DdbListviewBinding; struct _DdbListviewColumn; @@ -140,7 +140,7 @@ struct _DdbListview { struct _DdbListviewColumn *columns; struct _DdbListviewGroup *groups; - time_t groups_build_time; + int groups_build_idx; // must be the same as playlist modification idx int fullheight; int block_redraw_on_scroll; int grouptitle_height; diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index e1ee403a..7e3a0ee0 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -573,11 +573,11 @@ gtkui_hide_status_icon () { } } -time_t -gtkui_get_curr_playlist_modtime (void) { +int +gtkui_get_curr_playlist_mod (void) { deadbeef->pl_lock (); void *plt = deadbeef->plt_get_handle (deadbeef->plt_get_curr ()); - time_t res = plt ? deadbeef->plt_get_modification_time (plt) : 0; + int res = plt ? deadbeef->plt_get_modification_idx (plt) : 0; deadbeef->pl_unlock (); return res; } diff --git a/plugins/gtkui/gtkui.h b/plugins/gtkui/gtkui.h index e940bcfa..dfc73455 100644 --- a/plugins/gtkui/gtkui.h +++ b/plugins/gtkui/gtkui.h @@ -166,7 +166,7 @@ gtkui_playlist_set_curr (int playlist); void gtkui_setup_gui_refresh (); -time_t -gtkui_get_curr_playlist_modtime (void); +int +gtkui_get_curr_playlist_mod (void); #endif diff --git a/plugins/gtkui/mainplaylist.c b/plugins/gtkui/mainplaylist.c index 9c4c5877..e1537ea0 100644 --- a/plugins/gtkui/mainplaylist.c +++ b/plugins/gtkui/mainplaylist.c @@ -284,7 +284,7 @@ DdbListviewBinding main_binding = { .list_context_menu = list_context_menu, .delete_selected = main_delete_selected, .vscroll_changed = main_vscroll_changed, - .modification_time = gtkui_get_curr_playlist_modtime, + .modification_idx = gtkui_get_curr_playlist_mod, }; void diff --git a/plugins/gtkui/search.c b/plugins/gtkui/search.c index 4f0eeb46..471d3620 100644 --- a/plugins/gtkui/search.c +++ b/plugins/gtkui/search.c @@ -369,7 +369,7 @@ DdbListviewBinding search_binding = { .header_context_menu = header_context_menu, .list_context_menu = list_context_menu, .delete_selected = search_delete_selected, - .modification_time = gtkui_get_curr_playlist_modtime, + .modification_idx = gtkui_get_curr_playlist_mod, }; void diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c index 5b58890c..12e51924 100644 --- a/plugins/gtkui/trkproperties.c +++ b/plugins/gtkui/trkproperties.c @@ -462,6 +462,7 @@ static gboolean write_finished_cb (void *ctx) { gtk_widget_destroy (progressdlg); progressdlg = NULL; + deadbeef->plt_modified (deadbeef->plt_get_handle (deadbeef->plt_get_curr ())); main_refresh (); search_refresh (); trkproperties_modified = 0; diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c index 528b3809..0ef5cc6a 100644 --- a/plugins/vfs_curl/vfs_curl.c +++ b/plugins/vfs_curl/vfs_curl.c @@ -170,7 +170,12 @@ vfs_curl_set_meta (DB_playItem_t *it, const char *meta, const char *value) { uint32_t f = deadbeef->pl_get_item_flags (it); f |= DDB_TAG_ICY; deadbeef->pl_set_item_flags (it, f); - deadbeef->plug_trigger_event_trackinfochanged (it); + ddb_event_track_t *ev = (ddb_event_track_t *)deadbeef->event_alloc (DB_EV_TRACKINFOCHANGED); + ev->track = it; + if (ev->track) { + deadbeef->pl_item_ref (ev->track); + } + deadbeef->event_send ((ddb_event_t *)ev, 0, 0); } int @@ -207,7 +212,8 @@ http_parse_shoutcast_meta (HTTP_FILE *fp, const char *meta, int size) { else { vfs_curl_set_meta (fp->track, "title", title); } - deadbeef->plug_trigger_event_playlistchanged (); + deadbeef->plt_modified (deadbeef->plt_get_handle (deadbeef->plt_get_curr ())); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } return 0; } @@ -462,8 +468,9 @@ http_content_header_handler (void *ptr, size_t size, size_t nmemb, void *stream) fp->wait_meta = fp->icy_metaint; } } + deadbeef->plt_modified (deadbeef->plt_get_handle (deadbeef->plt_get_curr ())); if (refresh_playlist) { - deadbeef->plug_trigger_event_playlistchanged (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } if (!fp->icyheader) { fp->gotsomeheader = 1; diff --git a/plugins/vorbis/vorbis.c b/plugins/vorbis/vorbis.c index 691e40f3..27275eec 100644 --- a/plugins/vorbis/vorbis.c +++ b/plugins/vorbis/vorbis.c @@ -94,7 +94,7 @@ static const char *metainfo[] = { NULL }; -// refresh_playlist == 1 means "call plug_trigger_event_playlistchanged if metadata had been changed" +// refresh_playlist == 1 means "send playlistchanged event if metadata had been changed" // refresh_playlist == 2 means "don't change memory, just check for changes" static int update_vorbis_comments (DB_playItem_t *it, vorbis_comment *vc, int refresh_playlist) { @@ -165,8 +165,9 @@ update_vorbis_comments (DB_playItem_t *it, vorbis_comment *vc, int refresh_playl f &= ~DDB_TAG_MASK; f |= DDB_TAG_VORBISCOMMENTS; deadbeef->pl_set_item_flags (it, f); + deadbeef->plt_modified (deadbeef->plt_get_handle (deadbeef->plt_get_curr ())); if (refresh_playlist) { - deadbeef->plug_trigger_event_playlistchanged (); + deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0); } return 0; } @@ -320,7 +321,12 @@ cvorbis_read (DB_fileinfo_t *_info, char *bytes, int size) { info->last_comment_update = info->currentsample; vorbis_comment *vc = ov_comment (&info->vorbis_file, -1); update_vorbis_comments (info->ptrack, vc, 1); - deadbeef->plug_trigger_event_trackinfochanged (info->ptrack); + ddb_event_track_t *ev = (ddb_event_track_t *)deadbeef->event_alloc (DB_EV_TRACKINFOCHANGED); + ev->track = info->ptrack; + if (ev->track) { + deadbeef->pl_item_ref (ev->track); + } + deadbeef->event_send ((ddb_event_t *)ev, 0, 0); } else { info->ptrack = NULL; |