changeset 1476:5dbe7cfdcaf5 trunk

[svn] - support the notion of a watchdog function to keep things bound to the proper playlist entry. (half there)
author nenolod
date Wed, 02 Aug 2006 23:33:49 -0700
parents 285215fd3123
children b22164c8eb51
files ChangeLog Plugins/Input/cue/cuesheet.c
diffstat 2 files changed, 28 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Aug 02 22:57:08 2006 -0700
+++ b/ChangeLog	Wed Aug 02 23:33:49 2006 -0700
@@ -1,3 +1,12 @@
+2006-08-03 05:57:08 +0000  William Pitcock <nenolod@nenolod.net>
+  revision [1864]
+  - better support cuesheets outside of your directory
+  
+
+  Changes:        Modified:
+  +11 -14         trunk/Plugins/Input/cue/cuesheet.c  
+
+
 2006-08-03 05:41:00 +0000  William Pitcock <nenolod@nenolod.net>
   revision [1862]
   - remove dependency on the client library.
--- a/Plugins/Input/cue/cuesheet.c	Wed Aug 02 22:57:08 2006 -0700
+++ b/Plugins/Input/cue/cuesheet.c	Wed Aug 02 23:33:49 2006 -0700
@@ -25,7 +25,6 @@
 #define MAX_CUE_LINE_LENGTH 1000
 #define MAX_CUE_TRACKS 1000
 
-static void init(void);
 static void cache_cue_file(gchar *f);
 static void free_cue_info(void);
 static void fix_cue_argument(char *line);
@@ -38,19 +37,18 @@
 static TitleInput *get_tuple(gchar *uri);
 static TitleInput *get_tuple_uri(gchar *uri);
 
+static gint watchdog_func(gpointer unused);
+
 static gchar *cue_performer = NULL;
 static gchar *cue_title = NULL;
 static gchar *cue_file = NULL;
 static gint last_cue_track = 0;
 static gint cur_cue_track = 0;
-static gint entry_lock = 0;
 static struct {
 	gchar *performer;
 	gchar *title;
 	gint index;
 } cue_tracks[MAX_CUE_TRACKS];
-static gint previous_song = -1;
-static gint previous_length = -2;
 static gint timeout_tag = 0;
 
 static InputPlugin *real_ip = NULL;
@@ -205,6 +203,7 @@
 	if (real_ip != NULL)
 		real_ip->stop();
 
+	gtk_timeout_remove(timeout_tag);
 	free_cue_info();
 
 	real_ip->set_info = NULL;
@@ -215,7 +214,6 @@
 static void set_info_override(gchar * unused, gint length, gint rate, gint freq, gint nch)
 {
 	gchar *title;
-	(void) unused;
 
 	/* annoying. */
 	if (playlist_position->tuple == NULL)
@@ -255,6 +253,8 @@
 	}
 
 	cur_cue_track = track;
+
+	timeout_tag = gtk_timeout_add(100, watchdog_func, NULL);
 }
 
 InputPlugin *get_iplugin_info(void)
@@ -263,6 +263,20 @@
 	return &cue_ip;
 }
 
+/******************************************************* watchdog */
+
+static gint watchdog_func(gpointer unused)
+{
+	gint time = get_output_time();
+
+	if (time < cue_tracks[cur_cue_track].index)
+		playlist_prev();
+	else if (cur_cue_track != last_cue_track && (time > cue_tracks[cur_cue_track + 1].index))
+		playlist_next();
+
+	return TRUE;
+}
+
 /******************************************************** cuefile */
 
 static void free_cue_info(void)