From ab5fe51e0078d4c3df416d086dac92de71708e6e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 8 Jul 2008 21:08:20 +0000 Subject: [PATCH] (gtk) partial fix for #562: No error message when opening broken torrent file --- gtk/add-dialog.c | 2 ++ gtk/tr-core.c | 9 ++++++--- gtk/util.c | 28 ++++++++++++++++++++++++++++ gtk/util.h | 4 ++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/gtk/add-dialog.c b/gtk/add-dialog.c index 69953c32f..3a765c111 100644 --- a/gtk/add-dialog.c +++ b/gtk/add-dialog.c @@ -160,6 +160,8 @@ sourceChanged( GtkFileChooserButton * b, gpointer gdata ) tr_ctorSetDeleteSource( data->ctor, FALSE ); if(( torrent = tr_torrentNew( handle, data->ctor, &err ))) data->gtor = tr_torrent_new_preexisting( torrent ); + else + addTorrentErrorDialog( GTK_WIDGET(b), err, data->filename ); } updateTorrent( data ); diff --git a/gtk/tr-core.c b/gtk/tr-core.c index a74833103..11aa0f95d 100644 --- a/gtk/tr-core.c +++ b/gtk/tr-core.c @@ -769,14 +769,17 @@ add_filename( TrCore * core, if( filename && handle ) { + int err; tr_ctor * ctor = tr_ctorNew( handle ); tr_core_apply_defaults( ctor ); tr_ctorSetPaused( ctor, TR_FORCE, !doStart ); - if( tr_ctorSetMetainfoFromFile( ctor, filename ) ) + if( tr_ctorSetMetainfoFromFile( ctor, filename ) ) { + addTorrentErrorDialog( NULL, TR_EINVALID, filename ); tr_ctorFree( ctor ); - else if( tr_torrentParse( handle, ctor, NULL ) ) + } else if(( err = tr_torrentParse( handle, ctor, NULL ))) { + addTorrentErrorDialog( NULL, err, filename ); tr_ctorFree( ctor ); - else if( doPrompt ) + } else if( doPrompt ) g_signal_emit( core, TR_CORE_GET_CLASS(core)->promptsig, 0, ctor ); else tr_core_add_ctor( core, ctor ); diff --git a/gtk/util.c b/gtk/util.c index 589ac5bfe..0bafd86a3 100644 --- a/gtk/util.c +++ b/gtk/util.c @@ -301,6 +301,34 @@ verrmsg_full( GtkWindow * wind, callbackfunc_t func, void * data, return dialog; } +void +addTorrentErrorDialog( GtkWidget * child, int err, const char * filename ) +{ + GtkWidget * w; + GtkWidget * win; + const char * fmt; + char * secondary; + switch( err ) { + case TR_EINVALID: fmt = _( "The torrent file \"%s\" contains invalid data." ); break; + case TR_EDUPLICATE: fmt = _( "The torrent file \"%s\" is already in use." ); break; + default: fmt = _( "The torrent file \"%s\" encountered an unknown error." ); break; + } + secondary = g_strdup_printf( fmt, filename ); + win = ( !child || GTK_IS_WINDOW( child ) ) + ? child + : gtk_widget_get_ancestor( child ? GTK_WIDGET( child ) : NULL, GTK_TYPE_WINDOW ); + w = gtk_message_dialog_new( GTK_WINDOW( win ), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _( "Error opening torrent" ) ); + gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( w ), secondary ); + g_signal_connect_swapped( w, "response", + G_CALLBACK( gtk_widget_destroy ), w ); + gtk_widget_show_all( w ); + g_free( secondary ); +} + void errmsg( GtkWindow * wind, const char * format, ... ) { diff --git a/gtk/util.h b/gtk/util.h index afa270433..66bf909db 100644 --- a/gtk/util.h +++ b/gtk/util.h @@ -88,6 +88,10 @@ char* gtr_get_help_url( void ); GtkWidget * tr_button_new_from_stock( const char * stock, const char * mnemonic ); +void addTorrentErrorDialog( GtkWidget * window_or_child, + int err, + const char * filename ); + /* create an error dialog, if wind is NULL or mapped then show dialog now, otherwise show it when wind becomes mapped */ void -- 2.40.0