diff --git a/gtk/ipc.c b/gtk/ipc.c index 5af74af6f..1a574e014 100644 --- a/gtk/ipc.c +++ b/gtk/ipc.c @@ -972,7 +972,7 @@ smsg_pref( enum ipc_msg id, benc_val_t * val SHUTUP, int64_t tag, void * arg ) case IPC_MSG_GETDIR: pref = tr_prefs_get( PREF_ID_ASKDIR ); /* XXX sending back "" when we're prompting is kind of bogus */ - pref = ( NULL != pref && strbool( pref ) ? "" : getdownloaddir() ); + pref = strbool( pref ) ? "" : getdownloaddir(); buf = ipc_mkstr( &con->ipc, &size, IPC_MSG_DIR, tag, pref ); break; case IPC_MSG_GETDOWNLIMIT: diff --git a/gtk/msgwin.c b/gtk/msgwin.c index d4b66664d..9894f2f90 100644 --- a/gtk/msgwin.c +++ b/gtk/msgwin.c @@ -225,6 +225,7 @@ msgwin_create( TrCore * core ) int ii, curlevel; win = gtk_window_new( GTK_WINDOW_TOPLEVEL ); + gtk_window_set_default_size( GTK_WINDOW( win ), 600, 400 ); gtk_window_set_role( GTK_WINDOW( win ), "debug-window" ); vbox = gtk_vbox_new( FALSE, 0 ); diff --git a/gtk/tr_core.c b/gtk/tr_core.c index ad7a58d48..99d312429 100644 --- a/gtk/tr_core.c +++ b/gtk/tr_core.c @@ -341,16 +341,10 @@ tr_core_quiescent( TrCore * self ) return TR_NAT_TRAVERSAL_DISABLED == hstat->natTraversalStatus; } -int -tr_core_check_torrents( TrCore * self ) -{ - return gtk_tree_model_iter_n_children( self->model, NULL ); -} - void tr_core_save( TrCore * self ) { - benc_val_t state, * item; + benc_val_t state; int count; GtkTreeIter iter; TrTorrent * tor; @@ -359,16 +353,7 @@ tr_core_save( TrCore * self ) TR_IS_CORE( self ); - count = 0; - - if( gtk_tree_model_get_iter_first( self->model, &iter) ) - { - do - { - count++; - } - while( gtk_tree_model_iter_next( self->model, &iter ) ); - } + count = gtk_tree_model_iter_n_children( self->model, NULL ); tr_bencInit( &state, TYPE_LIST ); if( tr_bencListReserve( &state, count ) ) @@ -378,25 +363,22 @@ tr_core_save( TrCore * self ) } saved = NULL; - if( gtk_tree_model_get_iter_first( self->model, &iter) ) + if( gtk_tree_model_get_iter_first( self->model, &iter) ) do { - do + benc_val_t * item = tr_bencListAdd( &state ); + gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 ); + if( tr_torrent_get_state( tor, item ) ) { - item = tr_bencListAdd( &state ); - gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 ); - if( tr_torrent_get_state( tor, item ) ) - { - saved = g_list_append( saved, tor ); - } - else - { - tr_bencFree( item ); - tr_bencInitStr( item, NULL, 0, 1 ); - } - g_object_unref( tor ); + saved = g_list_append( saved, tor ); } - while( gtk_tree_model_iter_next( self->model, &iter ) ); + else + { + tr_bencFree( item ); + tr_bencInitStr( item, NULL, 0, 1 ); + } + g_object_unref( tor ); } + while( gtk_tree_model_iter_next( self->model, &iter ) ); errstr = NULL; cf_savestate( &state, &errstr ); @@ -413,42 +395,37 @@ tr_core_save( TrCore * self ) tr_torrent_state_saved( ii->data ); } } - if( NULL != saved ) - { - g_list_free( saved ); - } + + g_list_free( saved ); } int -tr_core_load( TrCore * self, benc_val_t * state, gboolean forcepaused ) +tr_core_load( TrCore * self, const benc_val_t * state, gboolean forcepaused ) { - int ii, count; - char * errstr; - TrTorrent * tor; + int count = 0; TR_IS_CORE( self ); - if( TYPE_LIST != state->type ) + if( TYPE_LIST == state->type ) { - return 0; - } - - count = 0; - for( ii = 0; ii < state->val.l.count; ii++ ) - { - errstr = NULL; - tor = tr_torrent_new_with_state( self->handle, state->val.l.vals + ii, - forcepaused, &errstr ); - if( NULL == tor ) + int ii; + for( ii = 0; ii < state->val.l.count; ii++ ) { - tr_core_errsig( self, TR_CORE_ERR_ADD_TORRENT, errstr ); - g_free( errstr ); - } - else - { - g_assert( NULL == errstr ); - tr_core_insert( self, tor ); - count++; + char * errstr = NULL; + TrTorrent * tor = tr_torrent_new_with_state( self->handle, + state->val.l.vals + ii, + forcepaused, &errstr ); + if( NULL == tor ) + { + tr_core_errsig( self, TR_CORE_ERR_ADD_TORRENT, errstr ); + g_free( errstr ); + } + else + { + g_assert( NULL == errstr ); + tr_core_insert( self, tor ); + count++; + } } } @@ -499,31 +476,24 @@ int tr_core_add_list( TrCore * self, GList * paths, enum tr_torrent_action act, gboolean paused ) { + const char * pref = tr_prefs_get( PREF_ID_ASKDIR ); TrCoreClass * class; - const char * pref; int count; TR_IS_CORE( self ); - pref = tr_prefs_get( PREF_ID_ASKDIR ); - if( NULL != pref && strbool( pref ) ) + if( strbool( pref ) ) { class = g_type_class_peek( TR_CORE_TYPE ); g_signal_emit( self, class->promptsig, 0, paths, act, paused ); return 0; } - pref = getdownloaddir(); + pref = getdownloaddir(); count = 0; - paths = g_list_first( paths ); - while( NULL != paths ) - { + for( ; paths; paths=paths->next ) if( tr_core_add_dir( self, paths->data, pref, act, paused ) ) - { count++; - } - paths = paths->next; - } return count; } @@ -531,15 +501,13 @@ tr_core_add_list( TrCore * self, GList * paths, enum tr_torrent_action act, gboolean tr_core_add_data( TrCore * self, uint8_t * data, size_t size, gboolean paused ) { - TrCoreClass * class; - const char * pref; + const char * pref = tr_prefs_get( PREF_ID_ASKDIR ); TR_IS_CORE( self ); - pref = tr_prefs_get( PREF_ID_ASKDIR ); - if( NULL != pref && strbool( pref ) ) + if( strbool( pref ) ) { - class = g_type_class_peek( TR_CORE_TYPE ); + TrCoreClass * class = g_type_class_peek( TR_CORE_TYPE ); g_signal_emit( self, class->promptdatasig, 0, data, size, paused ); return FALSE; } @@ -552,11 +520,10 @@ tr_core_add_data_dir( TrCore * self, uint8_t * data, size_t size, const char * dir, gboolean paused ) { TrTorrent * tor; - char * errstr; + char * errstr = NULL; TR_IS_CORE( self ); - errstr = NULL; tor = tr_torrent_new_with_data( self->handle, data, size, dir, paused, &errstr ); if( NULL == tor ) @@ -626,39 +593,36 @@ tr_core_update( TrCore * self ) TR_IS_CORE( self ); - if( gtk_tree_model_get_iter_first( self->model, &iter ) ) + if( gtk_tree_model_get_iter_first( self->model, &iter ) ) do { - do - { - gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 ); - st = tr_torrent_stat( tor ); - g_object_unref( tor ); - tr_torrent_check_seeding_cap ( tor ); + gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 ); + st = tr_torrent_stat( tor ); + g_object_unref( tor ); + tr_torrent_check_seeding_cap ( tor ); - /* XXX find out if setting the same data emits changed signal */ - gtk_list_store_set( GTK_LIST_STORE( self->model ), &iter, - MC_STAT, st->status, - MC_ERR, st->error, - MC_TERR, st->errorString, - MC_PROG_C, st->percentComplete, - MC_PROG_D, st->percentDone, - MC_DRATE, st->rateDownload, - MC_URATE, st->rateUpload, - MC_ETA, st->eta, - MC_PEERS, st->peersTotal, - MC_UPEERS, st->peersUploading, - MC_DPEERS, st->peersDownloading, - MC_SEED, st->seeders, - MC_LEECH, st->leechers, - MC_DONE, st->completedFromTracker, - MC_TRACKER, st->tracker, - MC_DOWN, st->downloaded, - MC_UP, st->uploaded, - MC_LEFT, st->left, - -1 ); - } - while( gtk_tree_model_iter_next( self->model, &iter ) ); + /* XXX find out if setting the same data emits changed signal */ + gtk_list_store_set( GTK_LIST_STORE( self->model ), &iter, + MC_STAT, st->status, + MC_ERR, st->error, + MC_TERR, st->errorString, + MC_PROG_C, st->percentComplete, + MC_PROG_D, st->percentDone, + MC_DRATE, st->rateDownload, + MC_URATE, st->rateUpload, + MC_ETA, st->eta, + MC_PEERS, st->peersTotal, + MC_UPEERS, st->peersUploading, + MC_DPEERS, st->peersDownloading, + MC_SEED, st->seeders, + MC_LEECH, st->leechers, + MC_DONE, st->completedFromTracker, + MC_TRACKER, st->tracker, + MC_DOWN, st->downloaded, + MC_UP, st->uploaded, + MC_LEFT, st->left, + -1 ); } + while( gtk_tree_model_iter_next( self->model, &iter ) ); } void @@ -690,22 +654,12 @@ tr_core_set_pref( TrCore * self, int id, const char * val ) TR_IS_CORE( self ); + /* don't change anything if the new value is the same as the old one */ name = tr_prefs_name( id ); old = cf_getpref( name ); - if( NULL == old ) - { - if( old == val ) - { - return; - } - } - else - { - if( 0 == strcmp( old, val ) ) - { - return; - } - } + if( !tr_strcmp( old, val ) ) + return; + cf_setpref( name, val ); /* write prefs to disk */ diff --git a/gtk/tr_core.h b/gtk/tr_core.h index 72a6a279b..427a1db0a 100644 --- a/gtk/tr_core.h +++ b/gtk/tr_core.h @@ -123,7 +123,7 @@ tr_core_save( TrCore * self ); /* Load saved state, return number of torrents added. May trigger one or more "error" signals with TR_CORE_ERR_ADD_TORRENT */ int -tr_core_load( TrCore * self, benc_val_t * state, gboolean forcepaused ); +tr_core_load( TrCore * self, const benc_val_t * state, gboolean forcepaused ); /* Any the tr_core_add functions below may trigger an "error" signal with TR_CORE_ERR_ADD_TORRENT */ diff --git a/gtk/util.c b/gtk/util.c index 4d1b4d4b5..99c109f0d 100644 --- a/gtk/util.c +++ b/gtk/util.c @@ -42,8 +42,21 @@ static void errcb(GtkWidget *wind, int resp, gpointer data); +int +tr_strcmp( const char * a, const char * b ) +{ + if( a && b ) return strcmp( a, b ); + if( a ) return 1; + if( b ) return -1; + return 0; +} + gboolean -strbool(const char *str) { +strbool( const char * str ) +{ + if( !str ) + return FALSE; + switch(str[0]) { case 'y': case 'Y': diff --git a/gtk/util.h b/gtk/util.h index 491bc9e68..6c0f11b0f 100644 --- a/gtk/util.h +++ b/gtk/util.h @@ -37,6 +37,9 @@ #define UNUSED #endif +/* NULL-safe version of strcmp */ +int tr_strcmp( const char*, const char * ); + /* XXX this shouldn't be here */ enum tr_torrent_action { TR_TOR_LEAVE, TR_TOR_COPY, TR_TOR_MOVE };