From: Darren S. <ds...@us...> - 2005-01-28 02:16:40
|
Update of /cvsroot/xine/gnome-xine/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30900/src Modified Files: play_item.c play_item.h player.c playlist.c playlist.h Log Message: Try to update the current playlist item's title from the stream (unless edited). If the currently-being-played playlist item is deleted, start playing the next item. Index: play_item.c =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/play_item.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- play_item.c 27 Jan 2005 18:13:47 -0000 1.19 +++ play_item.c 28 Jan 2005 02:16:26 -0000 1.20 @@ -44,6 +44,7 @@ { play_item_t *play_item = (play_item_t *) malloc (sizeof (play_item_t)); + play_item->untitled = !title; if (!title) { /* find the leafname of the MRL */ @@ -160,12 +161,12 @@ indent[depth * 2] = 0; fprintf (fh, "%s<ENTRY>\n" - "%s <TITLE>%s</TITLE>\n" + "%s <TITLE%s>%s</TITLE>\n" "%s <REF HREF=\"%s\"/>\n" "%s <TIME start=\"%d\"/>\n" "%s</ENTRY>\n", indent, - indent, title, + indent, item->untitled ? " default=\"y\"" : "", title, indent, mrl, indent, item->start_time, indent); @@ -174,20 +175,19 @@ free (indent); } -play_item_t *play_item_load (xml_node_t *node) { - - play_item_t *play_item; - - play_item = malloc (sizeof (play_item_t)); +play_item_t *play_item_load (xml_node_t *node) +{ + play_item_t *play_item = malloc (sizeof (play_item_t)); + memset (play_item, 0, sizeof (play_item_t)); play_item->title = NULL; play_item->options = NULL; play_item->mrl = NULL; - play_item->start_time = 0; while (node) { if (!strcasecmp (node->name, "title")) { + play_item->untitled = xml_parser_get_property (node, "default") != NULL; play_item->title = strdup (node->data); logprintf ("play_item: title = %s\n", play_item->title); } else if (!strcasecmp (node->name, "ref")) { @@ -259,6 +259,7 @@ static void response_cb (GtkDialog *dbox, int response, gpointer data) { + const char *tmp; switch (response) { case GTK_RESPONSE_REJECT: @@ -269,8 +270,12 @@ gtk_entry_set_text (GTK_ENTRY (entry), item_title); break; case GTK_RESPONSE_OK: + tmp = gtk_entry_get_text (GTK_ENTRY (entry)); + edit_item->untitled &= !strcmp (tmp, edit_item->title); + free (edit_item->mrl); + free (edit_item->title); edit_item->mrl = strdup(gtk_entry_get_text (GTK_ENTRY (mrl_entry))); - edit_item->title = strdup(gtk_entry_get_text (GTK_ENTRY (entry))); + edit_item->title = strdup(tmp); edit_item->start_time = parse_timestring (gtk_entry_get_text (GTK_ENTRY (time_entry)))*1000; edited = 1; default: Index: play_item.h =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/play_item.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- play_item.h 15 Jan 2005 04:10:28 -0000 1.7 +++ play_item.h 28 Jan 2005 02:16:27 -0000 1.8 @@ -39,7 +39,8 @@ GList *options; /* options are simply script engine command strings */ - int played; /* bool indicating this has been played in playlist */ + gboolean untitled; /* the title was extracted from the MRL */ + gboolean played; /* this has been played in playlist */ }; play_item_t *play_item_new (const char *title, const char *mrl, int start_time); Index: player.c =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/player.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- player.c 19 Jan 2005 00:51:49 -0000 1.28 +++ player.c 28 Jan 2005 02:16:27 -0000 1.29 @@ -116,6 +116,7 @@ gdk_threads_enter(); ui_set_status (playlist_showing_logo () ? UI_STOP : UI_PLAY); infobar_show_metadata (); + playlist_check_set_title (); gdk_threads_leave(); done: Index: playlist.c =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/playlist.c,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- playlist.c 16 Jan 2005 17:57:15 -0000 1.107 +++ playlist.c 28 Jan 2005 02:16:27 -0000 1.108 @@ -67,6 +67,7 @@ #define unmark_play_item() set_mark_play_item (FALSE) #define mark_play_item() set_mark_play_item (TRUE) static void set_mark_play_item (gboolean state); +static void play_next (void); static inline void remove_trailing_cr (char *str) { @@ -123,6 +124,9 @@ indices = gtk_tree_path_get_indices (path); pos = indices[0]; + if (pos == cur_list_pos) + play_next (); + if (pos <= cur_list_pos) --cur_list_pos; gtk_list_store_remove (pl_store, &iter); @@ -225,10 +229,8 @@ static void edit_cb (GtkWidget* widget, gpointer data) { GtkTreeView *tree = (GtkTreeView *) data; - GtkTreeSelection *sel; - GtkTreeIter iter; - - sel = gtk_tree_view_get_selection (tree); + GtkTreeSelection *sel = gtk_tree_view_get_selection (tree); + GtkTreeIter iter; if (gtk_tree_selection_get_selected (sel, NULL, &iter)) { GValue v; @@ -243,6 +245,7 @@ ? xine_get_meta_info (stream, XINE_META_INFO_TITLE) : NULL; if (play_item_edit (play_item, PLAY_ITEM_LIST, title)) + /* FIXME: what if the MRL is changed? */ gtk_list_store_set (pl_store, &iter, 0, play_item->title, 1, play_item->mrl, 2, play_item, -1); @@ -1235,6 +1238,7 @@ { gdk_threads_enter(); infobar_show_metadata (); + playlist_check_set_title (); gdk_flush(); gdk_threads_leave(); } @@ -1320,6 +1324,34 @@ } } +void playlist_check_set_title (void) +{ + const char *title; + if ((title = xine_get_meta_info (stream, XINE_META_INFO_TITLE))) + { + GtkTreeIter iter; + play_item_t *play_item; + GValue v; + + gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (pl_store), &iter, + NULL, cur_list_pos); + + memset (&v, 0, sizeof (GValue)); + gtk_tree_model_get_value (GTK_TREE_MODEL (pl_store), &iter, 2, &v); + play_item = g_value_peek_pointer (&v); + + if (play_item->untitled) + { + free (play_item->title); + play_item->title = strdup (title); + play_item->untitled = FALSE; + gtk_list_store_set (pl_store, &iter, 0, play_item->title, -1); + } + + g_value_unset (&v); + } +} + /* * drag and drop */ Index: playlist.h =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/playlist.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- playlist.h 8 Nov 2004 01:48:07 -0000 1.11 +++ playlist.h 28 Jan 2005 02:16:27 -0000 1.12 @@ -34,6 +34,8 @@ int playlist_add (play_item_t *play_item, gint ins_pos /* -1 => append */); int playlist_add_mrl (const char *mrl, gint ins_pos /* -1 => append */) ; +void playlist_check_set_title (void); + void playlist_play (int list_pos); void playlist_play_from (int list_pos, int pos, int pos_time); |