[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