(trunk gtk) #3348 "Add URL doesn't warn upon corrupt torrents" -- fixed.

This commit is contained in:
Charles Kerr 2010-06-25 17:40:55 +00:00
parent 7638e44724
commit c927189fed
4 changed files with 56 additions and 20 deletions

View File

@ -1018,40 +1018,53 @@ struct url_dialog_data
{
TrCore * core;
tr_ctor * ctor;
GtkDialog * dialog;
char * url;
char * error;
int response_code;
};
static gboolean
onURLDoneIdle( gpointer vdata )
{
struct url_dialog_data * data = vdata;
tr_core_add_ctor( data->core, data->ctor );
if( data->response_code != 200 )
{
gtr_http_failure_dialog( NULL, data->url, data->response_code );
}
else
{
const gboolean doPrompt = pref_flag_get( PREF_KEY_OPTIONS_PROMPT );
const gboolean doNotify = FALSE;
const int err = add_ctor( data->core, data->ctor, doPrompt, doNotify );
if( err == TR_PARSE_ERR )
tr_core_errsig( data->core, TR_PARSE_ERR, data->url );
tr_core_torrents_added( data->core );
}
/* cleanup */
g_free( data->url );
g_free( data );
return FALSE;
}
static void
onURLDone( tr_session * session,
long response_code UNUSED,
const void * response,
size_t response_byte_count,
void * vdata )
onURLDone( tr_session * session,
long response_code,
const void * response,
size_t response_byte_count,
void * vdata )
{
struct url_dialog_data * data = vdata;
tr_ctor * ctor = tr_ctorNew( session );
/* FIME: error dialog */
data->response_code = response_code;
data->ctor = tr_ctorNew( session );
tr_core_apply_defaults( data->ctor );
tr_ctorSetMetainfo( data->ctor, response, response_byte_count );
if( tr_ctorSetMetainfo( ctor, response, response_byte_count ) )
{
tr_ctorFree( ctor );
g_free( data );
}
else /* move the work back to the gtk thread */
{
data->ctor = ctor;
gtr_idle_add( onURLDoneIdle, data );
}
gtr_idle_add( onURLDoneIdle, data );
}
void
@ -1084,6 +1097,7 @@ tr_core_add_from_url( TrCore * core, const char * url )
{
struct url_dialog_data * data = g_new( struct url_dialog_data, 1 );
data->core = core;
data->url = g_strdup( url );
tr_webRun( session, url, NULL, onURLDone, data );
}
}

View File

@ -156,9 +156,10 @@ notifyInMainThread( gpointer user_data )
static void
completenessChangedCallback( tr_torrent * tor,
tr_completeness completeness,
tr_bool wasRunning,
void * user_data )
{
if( ( completeness != TR_LEECH ) && ( tr_torrentStat( tor )->sizeWhenDone != 0 ) )
if( wasRunning && ( completeness != TR_LEECH ) && ( tr_torrentStat( tor )->sizeWhenDone != 0 ) )
gtr_idle_add( notifyInMainThread, user_data );
}

View File

@ -33,6 +33,7 @@
#include <libtransmission/transmission.h> /* TR_RATIO_NA, TR_RATIO_INF */
#include <libtransmission/utils.h> /* tr_inf */
#include <libtransmission/web.h> /* tr_webResponseStr() */
#include <libtransmission/version.h> /* tr_inf */
#include "conf.h"
@ -803,6 +804,25 @@ gtr_timeout_add_seconds( guint seconds, GSourceFunc function, gpointer data )
#endif
}
void
gtr_http_failure_dialog( GtkWidget * parent, const char * url, long response_code )
{
GtkWindow * window = getWindow( parent );
GtkWidget * w = gtk_message_dialog_new( window, 0,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
_( "Error opening \"%s\"" ), url );
gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( w ),
_( "Server returned \"%1$ld %2$s\"" ),
response_code,
tr_webGetResponseStr( response_code ) );
g_signal_connect_swapped( w, "response", G_CALLBACK( gtk_widget_destroy ), w );
gtk_widget_show( w );
}
void
gtr_unrecognized_url_dialog( GtkWidget * parent, const char * url )
{

View File

@ -156,6 +156,7 @@ GtkWidget * gtr_priority_combo_new( void );
void gtr_unrecognized_url_dialog( GtkWidget * parent, const char * url );
void gtr_http_failure_dialog( GtkWidget * parent, const char * url, long response_code );
void addTorrentErrorDialog( GtkWidget * window_or_child,
int err,