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 );
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 );
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, ... )
{
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