[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