[Goodies-commits] r7746 - in parole/trunk: . parole
Ali Abdallah
aliov at xfce.org
Sun Jul 19 21:57:08 CEST 2009
Author: aliov
Date: 2009-07-19 19:57:08 +0000 (Sun, 19 Jul 2009)
New Revision: 7746
Modified:
parole/trunk/ChangeLog
parole/trunk/parole/main.c
parole/trunk/parole/org.parole.media.list.xml
parole/trunk/parole/parole-mediachooser.c
parole/trunk/parole/parole-mediachooser.h
parole/trunk/parole/parole-medialist.c
parole/trunk/parole/parole-medialist.h
parole/trunk/parole/parole-player.c
parole/trunk/parole/parole-player.h
parole/trunk/parole/parole-utils.c
parole/trunk/parole/parole-utils.h
Log:
* Handled disc uri's like dvd:/ from the command line.
Modified: parole/trunk/ChangeLog
===================================================================
--- parole/trunk/ChangeLog 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/ChangeLog 2009-07-19 19:57:08 UTC (rev 7746)
@@ -1,3 +1,6 @@
+2009-07-19: 10:00 Ali aliov at xfce.org
+ * Handled disc uri's like dvd:/ from the command line.
+
2009-07-19: 01:00 Ali aliov at xfce.org
* Parole now can play DVD/VCD.
* parole/parole-stream.c no need to hold a reference to
Modified: parole/trunk/parole/main.c
===================================================================
--- parole/trunk/parole/main.c 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/main.c 2009-07-19 19:57:08 UTC (rev 7746)
@@ -47,45 +47,77 @@
#include "parole-builder.h"
static void
-parole_send_files (gchar **filenames)
+parole_send_play_disc (DBusGProxy *proxy, const gchar *uri)
{
+ GError *error = NULL;
+
+ dbus_g_proxy_call (proxy, "PlayDisc", &error,
+ G_TYPE_STRING, uri,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID);
+
+ if ( error )
+ {
+ g_critical ("Unable to send uri to Parole: %s", error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+parole_send_files (DBusGProxy *proxy, gchar **filenames)
+{
GFile *file;
- DBusGConnection *bus;
- DBusGProxy *proxy;
gchar **out_paths;
GError *error = NULL;
guint i;
-
- bus = parole_g_session_bus_get ();
-
- out_paths = g_new (gchar *, g_strv_length (filenames));
-
+
+ out_paths = g_new0 (gchar *, g_strv_length (filenames));
+
for ( i = 0; filenames && filenames[i]; i++)
{
file = g_file_new_for_commandline_arg (filenames[i]);
out_paths[i] = g_file_get_path (file);
g_object_unref (file);
}
-
- proxy = dbus_g_proxy_new_for_name (bus,
- PAROLE_DBUS_NAME,
- PAROLE_DBUS_PATH,
- PAROLE_DBUS_INTERFACE);
-
+
dbus_g_proxy_call (proxy, "AddFiles", &error,
G_TYPE_STRV, out_paths,
G_TYPE_INVALID,
G_TYPE_INVALID);
+
if ( error )
{
g_critical ("Unable to send media files to Parole: %s", error->message);
g_error_free (error);
}
+
+ g_strfreev (out_paths);
+}
+
+static void
+parole_send (gchar **filenames)
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+ bus = parole_g_session_bus_get ();
+
+ proxy = dbus_g_proxy_new_for_name (bus,
+ PAROLE_DBUS_NAME,
+ PAROLE_DBUS_PATH,
+ PAROLE_DBUS_INTERFACE);
+
+ if ( !proxy )
+ g_error ("Unable to create proxy for %s", PAROLE_DBUS_NAME);
+
+ if ( g_strv_length (filenames) == 1 && parole_is_uri_disc (filenames[0]))
+ parole_send_play_disc (proxy, filenames[0]);
+ else
+ parole_send_files (proxy, filenames);
+
g_object_unref (proxy);
dbus_g_connection_unref (bus);
- g_strfreev (out_paths);
}
int main (int argc, char **argv)
@@ -133,7 +165,7 @@
{
TRACE ("Parole is already running");
if ( filenames && filenames[0] != NULL )
- parole_send_files (filenames);
+ parole_send (filenames);
}
else
{
@@ -143,9 +175,16 @@
if ( filenames && filenames[0] != NULL )
{
- ParoleMediaList *list;
- list = parole_player_get_media_list (player);
- parole_media_list_add_files (list, filenames);
+ if ( g_strv_length (filenames) == 1 && parole_is_uri_disc (filenames[0]))
+ {
+ parole_player_play_uri_disc (player, filenames[0]);
+ }
+ else
+ {
+ ParoleMediaList *list;
+ list = parole_player_get_media_list (player);
+ parole_media_list_add_files (list, filenames);
+ }
}
plugins = parole_plugins_manager_new ();
parole_plugins_manager_load_plugins (plugins);
Modified: parole/trunk/parole/org.parole.media.list.xml
===================================================================
--- parole/trunk/parole/org.parole.media.list.xml 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/org.parole.media.list.xml 2009-07-19 19:57:08 UTC (rev 7746)
@@ -11,5 +11,9 @@
<arg type="as" name="files" direction="in"/>
</method>
+ <method name="PlayDisc">
+ <arg type="s" name="uri" direction="in"/>
+ </method>
+
</interface>
</node>
Modified: parole/trunk/parole/parole-mediachooser.c
===================================================================
--- parole/trunk/parole/parole-mediachooser.c 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-mediachooser.c 2009-07-19 19:57:08 UTC (rev 7746)
@@ -161,7 +161,6 @@
void
parole_media_chooser_open_location_cb (GtkButton *bt, ParoleMediaChooser *chooser)
{
- ParoleMediaFile *file;
GtkWidget *entry;
const gchar *location;
@@ -173,9 +172,9 @@
TRACE ("Location %s", location);
- file = parole_media_file_new (location);
gtk_widget_hide (GTK_WIDGET (chooser));
- g_signal_emit (G_OBJECT (chooser), signals [MEDIA_FILE_OPENED], 0, file);
+ g_signal_emit (G_OBJECT (chooser), signals [LOCATION_OPENED], 0, location);
+
out:
parole_media_chooser_close (NULL, chooser);
}
@@ -287,6 +286,15 @@
g_cclosure_marshal_VOID__OBJECT,
G_TYPE_NONE, 1, G_TYPE_OBJECT);
+ signals[LOCATION_OPENED] =
+ g_signal_new("location-opened",
+ PAROLE_TYPE_MEDIA_CHOOSER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParoleMediaChooserClass, location_opened),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
object_class->finalize = parole_media_chooser_finalize;
}
Modified: parole/trunk/parole/parole-mediachooser.h
===================================================================
--- parole/trunk/parole/parole-mediachooser.h 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-mediachooser.h 2009-07-19 19:57:08 UTC (rev 7746)
@@ -49,6 +49,9 @@
void (*media_file_opened) (ParoleMediaChooser *chooser,
ParoleMediaFile *file);
+
+ void (*location_opened) (ParoleMediaChooser *chooser,
+ const gchar *address);
} ParoleMediaChooserClass;
Modified: parole/trunk/parole/parole-medialist.c
===================================================================
--- parole/trunk/parole/parole-medialist.c 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-medialist.c 2009-07-19 19:57:08 UTC (rev 7746)
@@ -103,6 +103,7 @@
{
MEDIA_ACTIVATED,
MEDIA_CURSOR_CHANGED,
+ URI_OPENED,
LAST_SIGNAL
};
@@ -123,7 +124,7 @@
GtkTreePath *path;
GtkTreeRowReference *row;
GtkTreeIter iter;
-
+
list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (list->priv->view)));
gtk_list_store_append (list_store, &iter);
@@ -171,6 +172,22 @@
}
static void
+parole_media_list_location_opened_cb (ParoleMediaChooser *chooser, const gchar *location, ParoleMediaList *list)
+{
+ ParoleMediaFile *file;
+
+ if ( parole_is_uri_disc (location) )
+ {
+ g_signal_emit (G_OBJECT (list), signals [URI_OPENED], 0, location);
+ }
+ else
+ {
+ file = parole_media_file_new (location);
+ parole_media_list_add (list, file, TRUE);
+ }
+}
+
+static void
parole_media_list_open_internal (ParoleMediaList *list, gboolean multiple)
{
GtkWidget *chooser;
@@ -195,8 +212,8 @@
chooser = parole_media_chooser_open_location (gtk_widget_get_toplevel (GTK_WIDGET (list)));
- g_signal_connect (G_OBJECT (chooser), "media_file_opened",
- G_CALLBACK (parole_media_list_file_opened_cb), list);
+ g_signal_connect (G_OBJECT (chooser), "location-opened",
+ G_CALLBACK (parole_media_list_location_opened_cb), list);
gtk_widget_show_all (GTK_WIDGET (chooser));
}
@@ -470,6 +487,15 @@
g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+ signals[URI_OPENED] =
+ g_signal_new ("uri-opened",
+ PAROLE_TYPE_MEDIA_LIST,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ParoleMediaListClass, uri_opened),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
g_type_class_add_private (klass, sizeof (ParoleMediaListPrivate));
parole_media_list_dbus_class_init (klass);
@@ -663,6 +689,10 @@
gchar **in_files,
GError **error);
+static gboolean parole_media_list_dbus_play_disc (ParoleMediaList *list,
+ gchar *in_uri,
+ GError **error);
+
#include "org.parole.media.list.h"
/*
@@ -693,3 +723,15 @@
return TRUE;
}
+
+static gboolean parole_media_list_dbus_play_disc (ParoleMediaList *list,
+ gchar *in_uri,
+ GError **error)
+{
+ TRACE ("uri : %s", in_uri);
+
+ if ( parole_is_uri_disc (in_uri) )
+ g_signal_emit (G_OBJECT (list), signals [URI_OPENED], 0, in_uri);
+
+ return TRUE;
+}
Modified: parole/trunk/parole/parole-medialist.h
===================================================================
--- parole/trunk/parole/parole-medialist.h 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-medialist.h 2009-07-19 19:57:08 UTC (rev 7746)
@@ -57,6 +57,9 @@
void (*media_cursor_changed) (ParoleMediaList *list,
gboolean media_selected);
+
+ void (*uri_opened) (ParoleMediaList *list,
+ const gchar *uri);
} ParoleMediaListClass;
Modified: parole/trunk/parole/parole-player.c
===================================================================
--- parole/trunk/parole/parole-player.c 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-player.c 2009-07-19 19:57:08 UTC (rev 7746)
@@ -245,11 +245,17 @@
}
static void
+parole_player_uri_opened_cb (ParoleMediaList *list, const gchar *uri, ParolePlayer *player)
+{
+ parole_player_reset (player);
+ parole_gst_play_uri (PAROLE_GST (player->priv->gst), uri);
+}
+
+static void
parole_player_media_cursor_changed_cb (ParoleMediaList *list, gboolean media_selected, ParolePlayer *player)
{
if (!player->priv->state != PAROLE_MEDIA_STATE_PLAYING)
gtk_widget_set_sensitive (player->priv->play_pause, media_selected);
-
}
static void
@@ -971,6 +977,9 @@
g_signal_connect (player->priv->list, "media_cursor_changed",
G_CALLBACK (parole_player_media_cursor_changed_cb), player);
+
+ g_signal_connect (player->priv->list, "uri-opened",
+ G_CALLBACK (parole_player_uri_opened_cb), player);
gtk_builder_connect_signals (builder, player);
g_object_unref (builder);
@@ -988,3 +997,8 @@
{
return player->priv->list;
}
+
+void parole_player_play_uri_disc (ParolePlayer *player, const gchar *uri)
+{
+ parole_player_disc_selected_cb (NULL, uri, player);
+}
Modified: parole/trunk/parole/parole-player.h
===================================================================
--- parole/trunk/parole/parole-player.h 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-player.h 2009-07-19 19:57:08 UTC (rev 7746)
@@ -50,6 +50,9 @@
ParoleMediaList *parole_player_get_media_list (ParolePlayer *player);
+void parole_player_play_uri_disc (ParolePlayer *player,
+ const gchar *uri);
+
G_END_DECLS
#endif /* __PAROLE_PLAYER_H */
Modified: parole/trunk/parole/parole-utils.c
===================================================================
--- parole/trunk/parole/parole-utils.c 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-utils.c 2009-07-19 19:57:08 UTC (rev 7746)
@@ -346,3 +346,13 @@
return ret;
}
+
+gboolean
+parole_is_uri_disc (const gchar *uri)
+{
+ if ( !g_strcmp0 (uri, "dvd:/") || !g_strcmp0 (uri, "vcd:/")
+ || !g_strcmp0 (uri, "svcd:/") || !g_strcmp0 (uri, "cdda:/"))
+ return TRUE;
+ else
+ return FALSE;
+}
Modified: parole/trunk/parole/parole-utils.h
===================================================================
--- parole/trunk/parole/parole-utils.h 2009-07-19 09:56:48 UTC (rev 7745)
+++ parole/trunk/parole/parole-utils.h 2009-07-19 19:57:08 UTC (rev 7746)
@@ -38,4 +38,6 @@
gchar *parole_get_subtitle_path (const gchar *uri) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
+gboolean parole_is_uri_disc (const gchar *uri);
+
#endif /* __PAROLE_UTILS_ */
More information about the Goodies-commits
mailing list