[Xfce4-commits] <parole:master> (Re)Add ability to play DVD ISO, select from Open dialog

Sean Davis noreply at xfce.org
Fri Oct 11 11:51:26 CEST 2013


Updating branch refs/heads/master
         to f97a2753d1f889f9be32284f7b85c63e33deda65 (commit)
       from 6bbe02976885a4578f5ac00735b19734ebddab63 (commit)

commit f97a2753d1f889f9be32284f7b85c63e33deda65
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Sep 1 08:06:08 2013 -0400

    (Re)Add ability to play DVD ISO, select from Open dialog

 src/parole-conf.c         |   16 -------
 src/parole-mediachooser.c |   30 +++++++++++++
 src/parole-medialist.c    |   23 ++++++++++
 src/parole-medialist.h    |    3 ++
 src/parole-player.c       |  103 +++++----------------------------------------
 5 files changed, 66 insertions(+), 109 deletions(-)

diff --git a/src/parole-conf.c b/src/parole-conf.c
index d6c9163..3d344a8 100644
--- a/src/parole-conf.c
+++ b/src/parole-conf.c
@@ -51,7 +51,6 @@ enum
     PROP_VIS_NAME,
     PROP_VOLUME,
     /* Folders */
-    PROP_ISO_IMAGE_FOLDER,
     PROP_MEDIA_CHOOSER_FOLDER,
     /* Parole General */
     PROP_MULTIMEDIA_KEYS,
@@ -404,21 +403,6 @@ parole_conf_class_init (ParoleConfClass *klass)
                                             G_PARAM_READWRITE));
 
     /**
-     * ParoleConf:iso-image-folder:
-     *
-     * Xfconf property: /folders/last-used-iso
-     *
-     * Path to directory containing last used iso image.
-     **/
-    g_object_class_install_property (object_class,
-                                     PROP_ISO_IMAGE_FOLDER,
-                                     g_param_spec_string  ("iso-image-folder",
-                                            "/folders/last-used-iso", 
-                                            NULL,
-                                            "none",
-                                            G_PARAM_READWRITE));
-
-    /**
      * ParoleConf:media-chooser-folder:
      *
      * Xfconf property: /folders/last-used-media
diff --git a/src/parole-mediachooser.c b/src/parole-mediachooser.c
index 649ebaf..6185f30 100644
--- a/src/parole-mediachooser.c
+++ b/src/parole-mediachooser.c
@@ -77,11 +77,15 @@ struct ParoleMediaChooserClass
     
     void                (*media_files_opened)   (ParoleMediaChooser *chooser,
                                                  GSList *list);
+                                                 
+    void                (*iso_opened)           (ParoleMediaChooser *chooser,
+                                                 gchar *filename);
 };
 
 enum
 {
     MEDIA_FILES_OPENED,
+    ISO_OPENED,
     LAST_SIGNAL
 };
 
@@ -131,6 +135,21 @@ parole_media_chooser_add (ParoleMediaChooser *chooser, GtkWidget *file_chooser)
     for ( i = 0; i < len; i++)
     {
         file = g_slist_nth_data (files, i);
+        if (g_str_has_suffix(file, ".iso"))
+        {
+            // FIXME: Is there some way to add the ISO to the playlist?
+            // For now we will play the ISO if it is the first file found, otherwise ignore.
+            if (g_slist_length(media_files) != 0)
+                continue;
+            g_signal_emit (G_OBJECT (chooser), signals [ISO_OPENED], 0, file);
+            
+            g_slist_free (media_files);
+    
+            g_slist_foreach (files, (GFunc) g_free, NULL);
+            g_slist_free (files);
+            
+            return;
+        }
         parole_get_media_files (filter, file, scan_recursive, &media_files);
     }
     
@@ -215,6 +234,7 @@ parole_media_chooser_open_internal (ParoleMediaChooser *media_chooser)
     gtk_file_filter_set_name( filter, _("Supported files") );
     gtk_file_filter_add_mime_type (GTK_FILE_FILTER (filter), "audio/*");
     gtk_file_filter_add_mime_type (GTK_FILE_FILTER (filter), "video/*");
+    gtk_file_filter_add_mime_type (GTK_FILE_FILTER (filter), "application/x-cd-image");
     gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(file_chooser), filter );
 
     all_files = gtk_file_filter_new();
@@ -278,6 +298,16 @@ parole_media_chooser_class_init (ParoleMediaChooserClass *klass)
                         g_cclosure_marshal_VOID__POINTER,
                         G_TYPE_NONE, 1, 
                         G_TYPE_POINTER);
+                        
+    signals[ISO_OPENED] = 
+        g_signal_new   ("iso-opened",
+                        PAROLE_TYPE_MEDIA_CHOOSER,
+                        G_SIGNAL_RUN_LAST,
+                        G_STRUCT_OFFSET (ParoleMediaChooserClass, iso_opened),
+                        NULL, NULL,
+                        g_cclosure_marshal_VOID__POINTER,
+                        G_TYPE_NONE, 1, 
+                        G_TYPE_POINTER);
 
     object_class->finalize = parole_media_chooser_finalize;
 }
diff --git a/src/parole-medialist.c b/src/parole-medialist.c
index 6a98288..667dc85 100644
--- a/src/parole-medialist.c
+++ b/src/parole-medialist.c
@@ -201,6 +201,7 @@ enum
     SHUFFLE_TOGGLED,
     REPEAT_TOGGLED,
     SHOW_PLAYLIST,
+    ISO_OPENED,
     LAST_SIGNAL
 };
 
@@ -410,6 +411,16 @@ parole_media_list_location_opened_cb (ParoleOpenLocation *obj, const gchar *loca
 }
 
 static void
+parole_media_list_iso_opened_cb (ParoleMediaChooser *chooser, 
+                   gchar *filename, 
+                   ParoleMediaList *list)
+{
+    gchar *uri;
+    uri = g_strdup_printf ("dvd://%s", filename);
+    g_signal_emit (G_OBJECT (list), signals [ISO_OPENED], 0, uri);
+}
+
+static void
 parole_media_list_open_internal (ParoleMediaList *list)
 {
     ParoleMediaChooser *chooser;
@@ -420,6 +431,9 @@ parole_media_list_open_internal (ParoleMediaList *list)
                            
     g_signal_connect (G_OBJECT (chooser), "media_files_opened",
                       G_CALLBACK (parole_media_list_files_opened_cb), list);
+                      
+    g_signal_connect (G_OBJECT (chooser), "iso_opened",
+                      G_CALLBACK (parole_media_list_iso_opened_cb), list);
 }
 
 static void
@@ -1500,6 +1514,15 @@ parole_media_list_class_init (ParoleMediaListClass *klass)
                       NULL, NULL,
                       g_cclosure_marshal_VOID__BOOLEAN,
                       G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+                      
+    signals[ISO_OPENED] = 
+        g_signal_new ("iso-opened",
+                      PAROLE_TYPE_MEDIA_LIST,
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (ParoleMediaListClass, iso_opened),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__STRING,
+                      G_TYPE_NONE, 1, G_TYPE_STRING);
 
     g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate));
     
diff --git a/src/parole-medialist.h b/src/parole-medialist.h
index c4831be..2b9ccf2 100644
--- a/src/parole-medialist.h
+++ b/src/parole-medialist.h
@@ -81,6 +81,9 @@ typedef struct
                                      
     void            (*gst_dvd_nav_message)          (ParoleMediaList *list,
                                                      gint gst_dvd_nav_message);
+                                                     
+    void            (*iso_opened)                   (ParoleMediaList *list,
+                                                     const gchar *filename);
     
 } ParoleMediaListClass;
 
diff --git a/src/parole-player.c b/src/parole-player.c
index 4927701..2a66135 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -190,12 +190,6 @@ void        parole_player_save_playlist_cb          (GtkWidget *widget,
 void        parole_player_menu_exit_cb              (GtkWidget *widget,
                                                      ParolePlayer *player);
 
-void        dvd_iso_mi_activated_cb                 (GtkWidget *widget,
-                                                     ParolePlayer *player);
-
-void        cd_iso_mi_activated_cb                  (GtkWidget *widget,
-                                                     ParolePlayer *player);
-
 void        parole_player_volume_up                 (GtkWidget *widget, 
                                                      ParolePlayer *player);
 
@@ -520,93 +514,6 @@ void parole_player_show_hide_playlist (GtkWidget *widget, ParolePlayer *player)
     parole_player_set_playlist_visible( player, !visible );
 }
 
-typedef enum
-{
-    PAROLE_ISO_IMAGE_DVD,
-    PAROLE_ISO_IMAGE_CD
-} ParoleIsoImage;
-
-
-
-static void
-iso_files_folder_changed_cb (GtkFileChooser *widget, ParolePlayer *player)
-{
-    gchar *folder;
-    folder = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (widget));
-    
-    if ( folder )
-    {
-        g_object_set (G_OBJECT (player->priv->conf),
-                      "iso-image-folder", folder,
-                      NULL);
-        g_free (folder);
-    }
-}
-
-static void
-parole_player_open_iso_image (ParolePlayer *player, ParoleIsoImage image)
-{
-    GtkWidget *chooser;
-    GtkFileFilter *filter;
-    gchar *file = NULL;
-    const gchar *folder;
-    gint response;
-    
-    chooser = gtk_file_chooser_dialog_new (_("Open ISO image"), GTK_WINDOW (player->priv->window),
-                                           GTK_FILE_CHOOSER_ACTION_OPEN,
-                                           _("Cancel"), GTK_RESPONSE_CANCEL,
-                                           _("Open"), GTK_RESPONSE_OK,
-                                           NULL);
-                
-    gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), FALSE);
-    
-    g_object_get (G_OBJECT (player->priv->conf),
-                  "iso-image-folder", &folder,
-                  NULL);
-    
-    if ( folder )
-        gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), folder);
-    
-    g_signal_connect (chooser, "current-folder-changed",
-              G_CALLBACK (iso_files_folder_changed_cb), player);
-    
-    filter = gtk_file_filter_new ();
-    gtk_file_filter_set_name (filter, image == PAROLE_ISO_IMAGE_CD ? _("CD image") : _("DVD image"));
-    gtk_file_filter_add_mime_type (filter, "application/x-cd-image");
-    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
-
-    gtk_window_set_default_size (GTK_WINDOW (chooser), 680, 480);
-    response = gtk_dialog_run (GTK_DIALOG (chooser));
-    
-    if ( response == GTK_RESPONSE_OK )
-    {
-        file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
-    }
-    
-    gtk_widget_destroy (chooser);
-    
-    if ( file )
-    {
-        gchar *uri;
-        //FIXME: vcd will work for svcd?
-        uri = g_strdup_printf ("%s%s", PAROLE_ISO_IMAGE_CD ? "dvd://" : ("vcd://"), file);
-        TRACE ("Playing ISO image %s", uri);
-        parole_player_disc_selected_cb (NULL, uri, NULL, player);
-        g_free (file);
-        g_free (uri);
-    }
-}
-
-void dvd_iso_mi_activated_cb (GtkWidget *widget, ParolePlayer *player)
-{
-    parole_player_open_iso_image (player, PAROLE_ISO_IMAGE_DVD);
-}
-
-void cd_iso_mi_activated_cb (GtkWidget *widget,  ParolePlayer *player)
-{
-    parole_player_open_iso_image (player, PAROLE_ISO_IMAGE_CD);
-}
-
 static void
 parole_player_change_range_value (ParolePlayer *player, gdouble value)
 {
@@ -1177,6 +1084,13 @@ parole_player_uri_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlay
 }
 
 static void
+parole_player_iso_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlayer *player)
+{
+    parole_player_reset (player);
+    parole_player_disc_selected_cb (NULL, uri, NULL, player);
+}
+
+static void
 parole_player_recent_menu_clear_activated_cb (GtkWidget *widget, ParolePlayer *player)
 {
     GtkWidget *dlg;
@@ -3314,6 +3228,9 @@ parole_player_init (ParolePlayer *player)
               
     g_signal_connect (player->priv->list, "show-playlist",
               G_CALLBACK (parole_player_media_list_show_playlist_cb), player);
+              
+    g_signal_connect (player->priv->list, "iso-opened",
+              G_CALLBACK (parole_player_iso_opened_cb), player);
     
     /*
      * Load auto saved media list.


More information about the Xfce4-commits mailing list