# HG changeset patch
# User leo_sobral
# Date 1174657651 0
# Node ID 84d70ba2ac65f594594942506fc1264ad4de2434
# Parent  7304e78d6307a90272630e70c6f03644269b2486
[svn r442] added backend_info to constructor

diff -r 7304e78d6307 -r 84d70ba2ac65 gmyth/src/gmyth_livetv.c
--- a/gmyth/src/gmyth_livetv.c	Fri Mar 23 13:43:28 2007 +0000
+++ b/gmyth/src/gmyth_livetv.c	Fri Mar 23 13:47:31 2007 +0000
@@ -69,6 +69,7 @@
 static void
 gmyth_livetv_init (GMythLiveTV *livetv)
 {
+    livetv->monitor = NULL;
 	livetv->backend_info = NULL;
 	livetv->local_hostname = NULL;
 	livetv->file_transfer = NULL;
@@ -80,8 +81,7 @@
 	livetv->proginfo = NULL;
 	livetv->uri = NULL;
 	
-	livetv->mutex = NULL;
-
+	livetv->mutex = g_mutex_new();
 }
 
 static void
@@ -89,13 +89,20 @@
 {	
 	GMythLiveTV *livetv = GMYTH_LIVETV (object);
 
+    if (livetv->disposed) {
+        /* If dispose did already run, return. */
+        return;
+    }
+    
+    /* Make sure dispose does not run twice. */
+    livetv->disposed = TRUE;
+
 	if ( livetv->monitor != NULL ) {
 		g_object_unref (livetv->monitor);
 		livetv->monitor = NULL;
 	}
 	
 	if ( livetv->recorder != NULL ) {
-		//gmyth_livetv_stop_playing( 
 		g_object_unref (livetv->recorder);
 		livetv->recorder = NULL;
 	}
@@ -115,7 +122,7 @@
 		livetv->proginfo = NULL;
 	}
 	
-	if ( livetv->file_transfer != NULL && G_IS_OBJECT(livetv->file_transfer) ) {
+	if ( livetv->file_transfer != NULL ) {
 		g_object_unref (livetv->file_transfer);
 		livetv->file_transfer = NULL;
 	}
@@ -125,18 +132,18 @@
 		livetv->backend_info = NULL;
 	}
 	
-	if ( livetv->uri != NULL )
-	{
+	if ( livetv->uri != NULL ) {
 		g_object_unref (livetv->uri);
 		livetv->uri = NULL;
 	}
 	
-	if ( livetv->mutex != NULL )
-	{
+	if ( livetv->mutex != NULL ) {
 		g_mutex_free (livetv->mutex);
 		livetv->mutex = NULL;
 	}
-	
+
+    g_string_free (livetv->local_hostname, TRUE);
+
 	G_OBJECT_CLASS (gmyth_livetv_parent_class)->dispose (object);
 }
 
@@ -154,12 +161,13 @@
  * @return a newly allocated GMythLiveTV instance
  */
 GMythLiveTV*
-gmyth_livetv_new ()
+gmyth_livetv_new (GMythBackendInfo *backend_info)
 {
 	GMythLiveTV *livetv = GMYTH_LIVETV ( g_object_new( GMYTH_LIVETV_TYPE, NULL ) );
-	
-	livetv->mutex = g_mutex_new();
-	
+    
+	livetv->backend_info = backend_info;
+    g_object_ref (livetv->backend_info);
+
 	return livetv;
 }
 
@@ -178,7 +186,6 @@
 							gchar* message, gpointer user_data )
 {
 	GMythLiveTV *live_tv = GMYTH_LIVETV ( user_data );
-	//g_object_ref( live_tv );
 	
 	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" );
@@ -242,7 +249,7 @@
 			{
 				gmyth_debug( "Going out the LiveTV... [ \"quit-livetv\" ]" );
 				
-				g_object_unref( live_tv );				
+				g_object_unref( live_tv );
 			} else
 				gmyth_debug( "LIVETV file_transfer is NULL!!! Cannot move to the next program chain event received.\n");				
 			
@@ -351,13 +358,12 @@
  * 				had been concluded succcesfully 
  */
 static gboolean
-gmyth_livetv_setup_recorder_channel_name ( GMythLiveTV *livetv, gchar* channel, 
-			GMythBackendInfo *backend_info )
+gmyth_livetv_setup_recorder_channel_name (GMythLiveTV *livetv, gchar* channel)
 {
 	gboolean res = TRUE;
-	
-	livetv->backend_info = backend_info;
-		
+    
+    g_return_val_if_fail (livetv != NULL, FALSE);
+    
 	if ( NULL == livetv->socket ) {
 		livetv->socket = gmyth_socket_new ();
 		
@@ -536,7 +542,7 @@
 		
 	}
 	
-	livetv->uri = (GMythURI*)gmyth_backend_info_get_uri( backend_info );
+	livetv->uri = (GMythURI*)gmyth_backend_info_get_uri( livetv->backend_info );
 	
 	g_mutex_unlock( livetv->mutex );
 
@@ -554,11 +560,9 @@
 error:
 	g_print( "[%s] ERROR running LiveTV setup.\n", __FUNCTION__ );
 
-	if ( livetv->local_hostname != NULL ) {
-		g_string_free( livetv->local_hostname, TRUE );
-		livetv->local_hostname = NULL;
-		res = FALSE;
-	}
+    res = FALSE;
+
+    g_string_free( livetv->local_hostname, TRUE );
 
 	if ( livetv->recorder != NULL ) {
 		g_object_unref (livetv->recorder);
@@ -597,10 +601,10 @@
  * 				had been concluded succcesfully 
  */
 static gboolean
-gmyth_livetv_setup_recorder ( GMythLiveTV *livetv, gint channel, GMythBackendInfo *backend_info )
+gmyth_livetv_setup_recorder ( GMythLiveTV *livetv, gint channel)
 {
 	return gmyth_livetv_setup_recorder_channel_name ( livetv, ( channel != -1 ) ? 
-				g_strdup_printf( "%d", channel ) : NULL, backend_info );
+				g_strdup_printf( "%d", channel ) : NULL );
 }
 
 /**
@@ -616,9 +620,9 @@
  * 				had been concluded succcesfully 
  */
 gboolean
-gmyth_livetv_channel_setup ( GMythLiveTV *livetv, gint channel, GMythBackendInfo *backend_info )
+gmyth_livetv_channel_setup ( GMythLiveTV *livetv, gint channel )
 {
-	return gmyth_livetv_setup_recorder ( livetv, channel, backend_info );
+	return gmyth_livetv_setup_recorder ( livetv, channel );
 }
 
 /**
@@ -634,9 +638,9 @@
  * 				had been concluded succcesfully 
  */
 gboolean
-gmyth_livetv_channel_name_setup ( GMythLiveTV *livetv, gchar* channel, GMythBackendInfo *backend_info )
+gmyth_livetv_channel_name_setup ( GMythLiveTV *livetv, gchar* channel )
 {
-	return gmyth_livetv_setup_recorder_channel_name ( livetv, channel, backend_info );
+	return gmyth_livetv_setup_recorder_channel_name ( livetv, channel );
 }
 
 /**
@@ -651,9 +655,9 @@
  * 				had been concluded succcesfully 
  */
 gboolean
-gmyth_livetv_setup ( GMythLiveTV *livetv, GMythBackendInfo *backend_info )
+gmyth_livetv_setup ( GMythLiveTV *livetv )
 {
-	return gmyth_livetv_setup_recorder ( livetv, -1, backend_info );
+	return gmyth_livetv_setup_recorder ( livetv, -1 );
 }
 
 /**
@@ -672,7 +676,6 @@
 	if ( !livetv->setup_done )
 	{
 		gmyth_debug ( "Call the setup function first!" );
-		res= FALSE;
 		goto error;		
 	}
 	
@@ -683,7 +686,7 @@
 	{
 		livetv->proginfo = prog_info;
 	} else {
-		gmyth_debug( "ProgramInfo is equals to NULL!!! Getting the next program info..." );
+		gmyth_debug( "ProgramInfo equals to NULL!!! Getting the next program info..." );
 		prog_info = gmyth_recorder_get_next_program_info( livetv->recorder, BROWSE_DIRECTION_RIGHT );
 		livetv->proginfo = prog_info;		
 	}
@@ -698,7 +701,6 @@
 		gmyth_debug ("GMythLiveTV: All requests to backend to start TV were OK, program info changed.");
 	} else {
 		g_warning ("[%s] LiveTV not successfully started on the next program chain.\n", __FUNCTION__ );
-		res = FALSE;
 		goto error;
 	}
 	
@@ -709,10 +711,9 @@
 error:
 	g_print( "[%s] ERROR running LiveTV setup.\n", __FUNCTION__ );
 
-	if ( livetv->local_hostname != NULL ) {
-		g_string_free( livetv->local_hostname, FALSE );
-		res = FALSE;
-	}
+    res = FALSE;
+    
+    g_string_free( livetv->local_hostname, TRUE );
 
 	if ( livetv->recorder != NULL ) {
 		g_object_unref (livetv->recorder);
@@ -730,7 +731,6 @@
 	}
 
 	return res;
-
 }
 
 /**
@@ -798,7 +798,7 @@
   	gmyth_debug( "Couldn't parse the URI to start LiveTV! [ uri = %s ]", livetv->proginfo->pathname->str );
   	goto done;  	
   }
-  
+ 
 	livetv->file_transfer = gmyth_file_transfer_new( livetv->backend_info );
 
   if ( NULL == livetv->file_transfer ) 
@@ -807,6 +807,8 @@
     goto done;
   }
   
+    g_object_ref( livetv->file_transfer );
+
   /* gmyth_file_transfer_settimeout( livetv->file_transfer, TRUE ); */
 	
   g_mutex_unlock( livetv->mutex );