# HG changeset patch
# User rosfran
# Date 1166570912 0
# Node ID 00b55a87f1ba0a09bd5fdad3c631a86fa1a964d0
# Parent  94387b7ed9464084601da784443f28875ca823de
[svn r233] Improved GObject' signals emition, following some tips from Kapeta.

diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_file_transfer.c
--- a/gmyth/src/gmyth_file_transfer.c	Tue Dec 19 21:29:51 2006 +0000
+++ b/gmyth/src/gmyth_file_transfer.c	Tue Dec 19 23:28:32 2006 +0000
@@ -103,7 +103,7 @@
 static void gmyth_file_transfer_finalize (GObject *object);
 
 static void gmyth_file_transfer_program_info_changed( GMythFileTransfer *transfer, 
-										gint msg_code, gpointer livetv_transfer, gpointer user_data );
+										gint msg_code, gpointer livetv_transfer );
 
 static gboolean gmyth_connect_to_backend (GMythFileTransfer *transfer);
 
@@ -631,9 +631,9 @@
 
 static void 
 gmyth_file_transfer_program_info_changed( GMythFileTransfer *transfer, 
-										gint msg_code, gpointer livetv_transfer, gpointer user_data )
+										gint msg_code, gpointer livetv_transfer )
 {
-	GMythLiveTV *livetv = (GMythLiveTV*)user_data;
+	GMythLiveTV *livetv = (GMythLiveTV*)livetv_transfer;
 	
 	gmyth_debug( "Program info changed! ( file transfer orig. = %p, ptr. = [%s], user data = [%s] )", transfer, 
 		livetv_transfer != NULL ? "[NOT NULL]" : "[NULL]", livetv != NULL ? "[NOT NULL]" : "[NULL]" );
diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_file_transfer.h
--- a/gmyth/src/gmyth_file_transfer.h	Tue Dec 19 21:29:51 2006 +0000
+++ b/gmyth/src/gmyth_file_transfer.h	Tue Dec 19 23:28:32 2006 +0000
@@ -69,7 +69,7 @@
 
   /* signal default handlers */
   void (*program_info_changed_handler) ( GMythFileTransfer *transfer, 
-										gint msg_code, gpointer livetv_transfer, gpointer user_data );
+										gint msg_code, gpointer livetv_transfer );
 };
 
 struct _GMythFileTransfer
diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_livetv.c
--- a/gmyth/src/gmyth_livetv.c	Tue Dec 19 21:29:51 2006 +0000
+++ b/gmyth/src/gmyth_livetv.c	Tue Dec 19 23:28:32 2006 +0000
@@ -138,15 +138,19 @@
 
 static void
 gmyth_livetv_monitor_signal_handler( GMythMonitorHandler *monitor, gint msg_code, 
-							gchar* message, gpointer livetv, gpointer user_data )
+							gchar* message, gpointer user_data )
 {
 	GMythLiveTV *live_tv = (GMythLiveTV*) user_data;
+	g_object_ref( live_tv );
 	
-	gmyth_debug( "LIVETV Signal handler ( msg = %s, code = %d, livetv param = %s, user_data = %s )\n", message, msg_code, livetv != NULL ? "" : 
+	gmyth_debug( "LIVETV Signal handler ( msg = %s, code = %d, live_tv param = %s, user_data = %s )\n", message, msg_code, live_tv != NULL ? "" : 
 					"NULL", user_data != NULL ? "" : "NULL" );
 	
-	if ( NULL == live_tv && user_data == NULL )
-		return;		
+	if ( NULL == live_tv )
+	{
+		gmyth_debug( "LiveTV_obj is equals to NULL!!!" );
+		return;
+	}		
 	
 	switch ( msg_code ) 
 	{
@@ -159,10 +163,10 @@
 			/* advertises the FileTransfer about the program info changed */
 			if ( live_tv->file_transfer != NULL )
 			{
-				g_signal_emit ( live_tv->file_transfer,
-	             GMYTH_FILE_TRANSFER_GET_CLASS (live_tv->file_transfer)->program_info_changed_handler_signal_id,
+				g_signal_emit_by_name ( G_OBJECT(live_tv->file_transfer),
+	             "program-info-changed",
 	             0, /* details */
-	             msg_code, live_tv, live_tv );
+	             msg_code, live_tv );
 	             
 	      gmyth_livetv_monitor_handler_stop( live_tv );	      
 			} else
@@ -328,6 +332,7 @@
 	if ( !gmyth_livetv_monitor_handler_start( livetv ) )
 	{
 		res = FALSE;
+		gmyth_debug("LiveTV MONITOR handler error on setup!");
 		goto error;		
 	}
 	
diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_marshal.list
--- a/gmyth/src/gmyth_marshal.list	Tue Dec 19 21:29:51 2006 +0000
+++ b/gmyth/src/gmyth_marshal.list	Tue Dec 19 23:28:32 2006 +0000
@@ -1,2 +1,2 @@
-VOID:INT,STRING,POINTER
+VOID:INT,STRING
 VOID:INT,POINTER
diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_monitor_handler.c
--- a/gmyth/src/gmyth_monitor_handler.c	Tue Dec 19 21:29:51 2006 +0000
+++ b/gmyth/src/gmyth_monitor_handler.c	Tue Dec 19 23:28:32 2006 +0000
@@ -78,10 +78,11 @@
 //static gboolean gmyth_monitor_handler_listener( GIOChannel *io_channel, 
 //						GIOCondition condition, gpointer data );
 
-gboolean* gmyth_monitor_handler_listener( GMythMonitorHandler *monitor );
+//gboolean* gmyth_monitor_handler_listener( GMythMonitorHandler *monitor );
 
-static void gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message,
-			gpointer live_tv, gpointer user_data );
+void gmyth_monitor_handler_listener( GMythMonitorHandler *monitor, gpointer user_data );
+
+static void gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message );
 
 static GMutex*				mutex 					 = NULL;
 
@@ -118,12 +119,11 @@
 		                 0,
 										 NULL,
 										 NULL,
-										 gmyth_marshal_VOID__INT_STRING_POINTER,
+										 gmyth_marshal_VOID__INT_STRING,
 										 G_TYPE_NONE,
-										 3,
+										 2,
 										 G_TYPE_INT,
-										 G_TYPE_STRING,
-										 G_TYPE_POINTER);
+										 G_TYPE_STRING);
 										 
 	gmonitor_class->backend_events_handler = gmyth_monitor_handler_default_listener;
 
@@ -160,10 +160,12 @@
 	
 	if ( monitor->monitor_th != NULL )  
   {
-  	//g_thread_exit( monitor->monitor_th, TRUE, FALSE );
+  	g_thread_pool_free( monitor->monitor_th, TRUE, FALSE );
+  	/*
   	g_thread_exit( monitor->monitor_th );
   	if ( monitor->monitor_th != NULL )
   		g_object_unref( monitor->monitor_th );
+  	*/
   	monitor->monitor_th = NULL;
   }
 	
@@ -179,7 +181,7 @@
   	monitor->hostname = NULL;
   }
 
-  if ( monitor->backend_msgs != NULL )  
+  if ( monitor->backend_msgs != NULL )
   {
   	g_hash_table_destroy ( monitor->backend_msgs );
   	monitor->backend_msgs = NULL;
@@ -321,7 +323,8 @@
 	    	if ( g_strstr_len( *back_msg_action, strlen( *back_msg_action ), "LIVETV_CHAIN" ) ||
 	    			g_strstr_len( *back_msg_action, strlen( *back_msg_action ), "RECORDING_LIST_CHANGE" ) ||
 	    			g_strstr_len( *back_msg_action, strlen( *back_msg_action ), "LIVETV_WATCH" ) )
-	    	{		        	
+	    	{
+	    		gmyth_debug( "MONITOR: message type == GMYTH_BACKEND_PROGRAM_INFO_CHANGED, msg = %s", *back_msg_action );
 	    		msg_type = GMYTH_BACKEND_PROGRAM_INFO_CHANGED;
 	    	}  	
 	
@@ -344,12 +347,11 @@
 }
 
 static void
-gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message,
-			gpointer live_tv, gpointer user_data )
+gmyth_monitor_handler_default_listener( GMythMonitorHandler *monitor, gint msg_code, gchar* message )
 {
 	//assert( message!= NULL );  
-	gmyth_debug( "DEFAULT Signal handler ( msg = %s, code = %d, file_transfer ptr. = %p )\n", 
-				message, msg_code, live_tv );
+	gmyth_debug( "DEFAULT Signal handler ( msg = %s, code = %d )\n", 
+				message, msg_code );
 }
 
 static void
@@ -362,8 +364,9 @@
 //gmyth_monitor_handler_listener (GMythMonitorHandler *monitor, gpointer user_data)
 //static gboolean
 //gmyth_monitor_handler_listener( GIOChannel *io_channel, GIOCondition condition, gpointer data )
-gboolean*
-gmyth_monitor_handler_listener( GMythMonitorHandler *monitor )
+//gboolean* gmyth_monitor_handler_listener( GMythMonitorHandler *monitor )
+void
+gmyth_monitor_handler_listener (GMythMonitorHandler *monitor, gpointer user_data)
 {
 	//GMythMonitorHandler *monitor = (GMythMonitorHandler*)data; 
   GIOStatus io_status;
@@ -427,7 +430,7 @@
 	        g_signal_emit ( monitor,
 	               GMYTH_MONITOR_HANDLER_GET_CLASS (monitor)->backend_events_handler_signal_id,
 	               0, /* details */
-	               msg_type, back_msg_action, NULL );
+	               msg_type, back_msg_action );
 	               
 	        if (back_msg_action!= NULL)
 	        	g_free( back_msg_action );
@@ -463,7 +466,7 @@
   if (strlist!=NULL)
   	g_object_unref( strlist );
   	
- 	return ret;
+ 	return;
 
 }
 
@@ -542,11 +545,13 @@
 	*ret = TRUE;	
 	
 	/*if (!g_thread_supported () ) 	g_thread_init (NULL);*/
-	
-  monitor->monitor_th = g_thread_create( (GThreadFunc)gmyth_monitor_handler_listener, 
+	/*
+  monitor->monitor_th = g_thread_pool_new( (GThreadFunc)gmyth_monitor_handler_listener, 
   					monitor, TRUE, NULL );
-  					
-  //g_thread_pool_push( monitor_th, monitor, NULL ); 
+ */				
+  monitor->monitor_th = g_thread_pool_new( (GFunc)gmyth_monitor_handler_listener, 
+  					monitor, 3, TRUE, NULL );
+  g_thread_pool_push( monitor->monitor_th, monitor, NULL ); 
   					
   //if ( ( ret = g_thread_join( monitor_th ) ) == FALSE )
   if ( monitor->monitor_th != NULL )
diff -r 94387b7ed946 -r 00b55a87f1ba gmyth/src/gmyth_monitor_handler.h
--- a/gmyth/src/gmyth_monitor_handler.h	Tue Dec 19 21:29:51 2006 +0000
+++ b/gmyth/src/gmyth_monitor_handler.h	Tue Dec 19 23:28:32 2006 +0000
@@ -71,8 +71,7 @@
 	guint backend_events_handler_signal_id;
 
   /* signal default handlers */
-  void (*backend_events_handler) (GMythMonitorHandler *monitor, gint msg_code, gchar* message, 
-  					gpointer livetv, gpointer user_data );
+  void (*backend_events_handler) (GMythMonitorHandler *monitor, gint msg_code, gchar* message );
 };
 
 struct _GMythMonitorHandler
@@ -85,9 +84,10 @@
 	/* socket descriptors */
 	GMythSocket *event_sock;
 	
-	GThread *monitor_th;
+	GThreadPool *monitor_th;
 	
-	gboolean* (*gmyth_monitor_handler_listener)( GMythMonitorHandler *monitor );
+	// gboolean* (*gmyth_monitor_handler_listener)( GMythMonitorHandler *monitor );
+	void (*gmyth_monitor_handler_listener)( GMythMonitorHandler *monitor, gpointer user_data );
 	
 	gchar *hostname;
 	gint port;