# 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 );