summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-04-16 21:01:37 +0200
committerGravatar waker <wakeroid@gmail.com>2011-04-16 21:01:37 +0200
commit1416dfbf622b443c309e299e0b1efd01646c8b37 (patch)
tree4794b0edfff95bce654f253b586c9aaa4e970e7f
parentd804aaaad0df4a532cfe397b5190f833837257b9 (diff)
get rid of some legacy events;
update playlist grouping on metadata changes
-rw-r--r--deadbeef.h12
-rw-r--r--playlist.c14
-rw-r--r--playlist.h6
-rw-r--r--plugins.c6
-rw-r--r--plugins/gtkui/ddblistview.c6
-rw-r--r--plugins/gtkui/ddblistview.h4
-rw-r--r--plugins/gtkui/gtkui.c6
-rw-r--r--plugins/gtkui/gtkui.h4
-rw-r--r--plugins/gtkui/mainplaylist.c2
-rw-r--r--plugins/gtkui/search.c2
-rw-r--r--plugins/gtkui/trkproperties.c1
-rw-r--r--plugins/vfs_curl/vfs_curl.c13
-rw-r--r--plugins/vorbis/vorbis.c12
13 files changed, 45 insertions, 43 deletions
diff --git a/deadbeef.h b/deadbeef.h
index 49971f30..bd288177 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -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
diff --git a/playlist.c b/playlist.c
index 22c3a3bf..23354df4 100644
--- a/playlist.c
+++ b/playlist.c
@@ -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
diff --git a/playlist.h b/playlist.h
index 3aa48b49..88d35c47 100644
--- a/playlist.h
+++ b/playlist.h
@@ -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
diff --git a/plugins.c b/plugins.c
index db028bb8..6671a501 100644
--- a/plugins.c
+++ b/plugins.c
@@ -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;