(trunk gtk) #3348 "Add URL doesn't warn upon corrupt torrents" -- fixed.
This commit is contained in:
parent
7638e44724
commit
c927189fed
|
@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
20
gtk/util.c
20
gtk/util.c
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue