]> granicus.if.org Git - transmission/commitdiff
(gtk) partial fix for #562: No error message when opening broken torrent file
authorCharles Kerr <charles@transmissionbt.com>
Tue, 8 Jul 2008 21:08:20 +0000 (21:08 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Tue, 8 Jul 2008 21:08:20 +0000 (21:08 +0000)
gtk/add-dialog.c
gtk/tr-core.c
gtk/util.c
gtk/util.h

index 69953c32f5ec10dfb1e0f29cf32c09f06723b220..3a765c11106c11ad3add63bdbac5da515d4ac67c 100644 (file)
@@ -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 );
index a748331030c01671836653a0a1f640c215f46b69..11aa0f95d804dd089ba41d2e376b34bae7cdad70 100644 (file)
@@ -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 );
index 589ac5bfeaceb16e6fb962331b17d584480ae581..0bafd86a39af03090e32310685db7bf5c50bc4a6 100644 (file)
@@ -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, ... )
 {
index afa2704335c6541dfe8b7471f20b97b9add24937..66bf909db849d21b601d741029c3586235f16402 100644 (file)
@@ -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