(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; TrCore * core;
tr_ctor * ctor; tr_ctor * ctor;
GtkDialog * dialog; char * url;
char * error;
int response_code;
}; };
static gboolean static gboolean
onURLDoneIdle( gpointer vdata ) onURLDoneIdle( gpointer vdata )
{ {
struct url_dialog_data * data = 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 ); g_free( data );
return FALSE; return FALSE;
} }
static void static void
onURLDone( tr_session * session, onURLDone( tr_session * session,
long response_code UNUSED, long response_code,
const void * response, const void * response,
size_t response_byte_count, size_t response_byte_count,
void * vdata ) void * vdata )
{ {
struct url_dialog_data * data = 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 ) ) gtr_idle_add( onURLDoneIdle, data );
{
tr_ctorFree( ctor );
g_free( data );
}
else /* move the work back to the gtk thread */
{
data->ctor = ctor;
gtr_idle_add( onURLDoneIdle, data );
}
} }
void 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 ); struct url_dialog_data * data = g_new( struct url_dialog_data, 1 );
data->core = core; data->core = core;
data->url = g_strdup( url );
tr_webRun( session, url, NULL, onURLDone, data ); tr_webRun( session, url, NULL, onURLDone, data );
} }
} }

View File

@ -156,9 +156,10 @@ notifyInMainThread( gpointer user_data )
static void static void
completenessChangedCallback( tr_torrent * tor, completenessChangedCallback( tr_torrent * tor,
tr_completeness completeness, tr_completeness completeness,
tr_bool wasRunning,
void * user_data ) 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 ); gtr_idle_add( notifyInMainThread, user_data );
} }

View File

@ -33,6 +33,7 @@
#include <libtransmission/transmission.h> /* TR_RATIO_NA, TR_RATIO_INF */ #include <libtransmission/transmission.h> /* TR_RATIO_NA, TR_RATIO_INF */
#include <libtransmission/utils.h> /* tr_inf */ #include <libtransmission/utils.h> /* tr_inf */
#include <libtransmission/web.h> /* tr_webResponseStr() */
#include <libtransmission/version.h> /* tr_inf */ #include <libtransmission/version.h> /* tr_inf */
#include "conf.h" #include "conf.h"
@ -803,6 +804,25 @@ gtr_timeout_add_seconds( guint seconds, GSourceFunc function, gpointer data )
#endif #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 void
gtr_unrecognized_url_dialog( GtkWidget * parent, const char * url ) 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_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, void addTorrentErrorDialog( GtkWidget * window_or_child,
int err, int err,