[Xfce4-commits] <parole:master> Cleanup for custom subtitle code.

Sean Davis noreply at xfce.org
Sun Nov 18 14:26:01 CET 2012


Updating branch refs/heads/master
         to a2b91bac9ab47636e2b25c4055bce5e4505c53ab (commit)
       from 4b35c89e8b24c17eb4f5d66d7c2fb29bfb208970 (commit)

commit a2b91bac9ab47636e2b25c4055bce5e4505c53ab
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Nov 18 08:25:18 2012 -0500

    Cleanup for custom subtitle code.

 src/parole-medialist.c |   39 +++++++++++++++++++
 src/parole-medialist.h |    3 +
 src/parole-player.c    |  100 +++++++++++++++++++++++++-----------------------
 3 files changed, 94 insertions(+), 48 deletions(-)

diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index ffb4009..c90cd61 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -517,6 +517,33 @@ parole_media_list_get_first_selected_row (ParoleMediaList *list)
     return row;
 }
 
+/**
+ * parole_media_list_get_first_selected_file:
+ * @list: a #ParoleMediaList
+ *
+ * Get the first selected #ParoleFile media file in the media list view
+ *
+ * Returns: a #ParoleFile
+ **/
+static ParoleFile *
+parole_media_list_get_first_selected_file (ParoleMediaList *list)
+{
+    ParoleFile *file;
+    GtkTreeRowReference *row;
+    GtkTreeIter iter;
+
+    row = parole_media_list_get_first_selected_row(list);
+    
+    if ( gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->store), 
+                                  &iter, 
+                                  gtk_tree_row_reference_get_path (row)) )
+    {
+	    gtk_tree_model_get (GTK_TREE_MODEL (list->priv->store), &iter, DATA_COL, &file, -1);
+    }
+    
+    return file;
+}
+
 /* Callback to save the current playlist */
 void parole_media_list_save_playlist_cb (GtkButton *button, ParolePlaylistSave *data)
 {
@@ -1645,6 +1672,18 @@ GtkTreeRowReference *parole_media_list_get_selected_row (ParoleMediaList *list)
     return parole_media_list_get_first_selected_row (list);
 }
 
+/**
+ * parole_media_list_get_selected_file:
+ * @list: a #ParoleMediaList
+ * 
+ * 
+ * Returns: a #ParoleFile of the selected row.
+ **/
+ParoleFile *parole_media_list_get_selected_file (ParoleMediaList *list)
+{
+    return parole_media_list_get_first_selected_file (list);
+}
+
 void parole_media_list_select_row (ParoleMediaList *list, GtkTreeRowReference *row)
 {
     GtkTreePath *path;
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index 4fe5189..ea788e4 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -22,6 +22,7 @@
 #define __PAROLE_MEDIA_LIST_H
 
 #include <gtk/gtk.h>
+#include <src/misc/parole-file.h>
 
 G_BEGIN_DECLS
 
@@ -88,6 +89,8 @@ GtkTreeRowReference             *parole_media_list_get_first_row    (ParoleMedia
 
 GtkTreeRowReference		*parole_media_list_get_selected_row (ParoleMediaList *list);
 
+ParoleFile              *parole_media_list_get_selected_file (ParoleMediaList *list);
+
 void				 parole_media_list_select_row 	    (ParoleMediaList *list,
 								     GtkTreeRowReference *row);
 
diff --git a/src/parole-player.c b/src/parole-player.c
index 6c30875..3cfbeb8 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -817,28 +817,31 @@ parole_player_update_languages (ParolePlayer *player, ParoleGst *gst)
 	}
 }
 
+/**
+ * parole_player_select_custom_subtitle:
+ * @widget : The #GtkMenuItem for selecting a custom subtitle file.
+ * @data   : The #ParolePlayer instance passed by the callback function.
+ *
+ * Display the #FileChooserDialog for selecting a custom subtitle file and load
+ * the subtitles selected.
+ **/
 static void
 parole_player_select_custom_subtitle (GtkMenuItem *widget, gpointer data)
 {
-    ParolePlayer *player;
-    GtkWidget *chooser;
-    GtkFileFilter *filter, *all;
-    gchar *sub = NULL;
-    const gchar *folder;
-    gint response;
-    gchar *uri = NULL;
+    ParolePlayer  *player;
+    ParoleFile    *file;
     
-    GtkTreeRowReference *row;
+    GtkWidget     *chooser;
+    GtkFileFilter *filter, *all_files;
+    gint           response;
     
-    ParoleFile *file;
-    GtkTreeIter iter;
-    GtkTreeModel *model;
+    const gchar   *folder;
+    gchar         *sub = NULL;
+    gchar         *uri = NULL;
     
     player = PAROLE_PLAYER(data);
-    row = parole_media_list_get_selected_row (player->priv->list);
-    
-    
 
+    /* Build the FileChooser dialog for subtitle selection. */
     chooser = gtk_file_chooser_dialog_new (_("Select Subtitle File"), NULL,
 					   GTK_FILE_CHOOSER_ACTION_OPEN,
 					   GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -848,11 +851,12 @@ parole_player_select_custom_subtitle (GtkMenuItem *widget, gpointer data)
     gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), FALSE);
     gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE);
     
-    folder = parole_rc_read_entry_string ("iso-image-folder", PAROLE_RC_GROUP_GENERAL, NULL);
+    folder = parole_rc_read_entry_string ("media-chooser-folder", PAROLE_RC_GROUP_GENERAL, NULL);
     
     if ( folder )
 	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder);
     
+    /* Subtitle format filter */
     filter = gtk_file_filter_new ();
     gtk_file_filter_set_name (filter, _("Subtitle Files"));
     gtk_file_filter_add_pattern (filter, "*.asc");
@@ -864,51 +868,51 @@ parole_player_select_custom_subtitle (GtkMenuItem *widget, gpointer data)
     gtk_file_filter_add_pattern (filter, "*.ass");
     gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
     
-    all = gtk_file_filter_new ();
-    gtk_file_filter_set_name (all, _("All Files"));
-    gtk_file_filter_add_pattern (all, "*");
-    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all);
+    /* All files filter */
+    all_files = gtk_file_filter_new ();
+    gtk_file_filter_set_name (all_files, _("All files"));
+    gtk_file_filter_add_pattern (all_files, "*");
+    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), all_files);
 
     gtk_window_set_default_size (GTK_WINDOW (chooser), 680, 480);
+
+    /* Run the dialog, get the selected filename. */    
     response = gtk_dialog_run (GTK_DIALOG (chooser));
-    
     if ( response == GTK_RESPONSE_OK )
-	    sub = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+    sub = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
     
     gtk_widget_destroy (chooser);
     
     if ( sub )
     {
-    uri = parole_gst_get_file_uri(PAROLE_GST (player->priv->gst));
-    
-    parole_player_reset(player);
-    
-    if ( g_str_has_prefix (uri, "file:/") )
-    {
-	    TRACE ("Trying to play media file %s", uri);
-	    TRACE ("Trying to use subtitle file %s", sub);
-	    player->priv->updated_subs = TRUE;
-	    
-	    player->priv->row = gtk_tree_row_reference_copy (row);
-    
-        model = gtk_tree_row_reference_get_model (row);
+        /* Get the current playing file uri. */
+        uri = parole_gst_get_file_uri(PAROLE_GST (player->priv->gst));
+        
+        /* Reset the player. */
+        parole_player_reset(player);
         
-        if ( gtk_tree_model_get_iter (model, &iter, gtk_tree_row_reference_get_path (row)) )
+        if ( g_str_has_prefix (uri, "file:/") )
         {
-	    gtk_tree_model_get (model, &iter, DATA_COL, &file, -1);
-	
-	    parole_file_set_custom_subtitles(file, sub);
-	    
-	    parole_gst_set_custom_subtitles(PAROLE_GST (player->priv->gst), sub);
-	    parole_gst_play_uri (PAROLE_GST (player->priv->gst), 
-				 uri,
-				 sub);
-	    }
+	        TRACE ("Trying to play media file %s", uri);
+	        TRACE ("Trying to use subtitle file %s", sub);
+	        player->priv->updated_subs = TRUE;
+	        
+	        file = parole_media_list_get_selected_file( player->priv->list );
+            
+            /* Set the subtitles in gst as well as in the media list, for later
+               retrieval. */
+            if ( file )
+            {
+	        parole_file_set_custom_subtitles(file, sub);
+	        parole_gst_set_custom_subtitles(PAROLE_GST (player->priv->gst), sub);
+	        parole_gst_play_uri (PAROLE_GST (player->priv->gst), uri, sub);
+	        }
+        }
+        
+	    g_free (sub);
+	    g_free (uri);
     }
-
-	g_free (sub);
-	g_free (uri);
-}}
+}
 
 static void
 parole_player_media_activated_cb (ParoleMediaList *list, GtkTreeRowReference *row, ParolePlayer *player)


More information about the Xfce4-commits mailing list