static void onOpenURLResponse( GtkDialog * dialog, int response, gpointer user_data ) { gboolean destroy = TRUE; if( response == GTK_RESPONSE_ACCEPT ) { GtkWidget * e = GTK_WIDGET( g_object_get_data( G_OBJECT( dialog ), "url-entry" ) ); char * url = g_strdup( gtk_entry_get_text( GTK_ENTRY( e ) ) ); g_strstrip( url ); if( url && *url ) { TrCore * core = user_data; if( gtr_is_supported_url( url ) || gtr_is_magnet_link( url ) || gtr_is_hex_hashcode( url ) ) { tr_core_add_from_url( core, url ); } else { gtr_unrecognized_url_dialog( GTK_WIDGET( dialog ), url ); destroy = FALSE; } } g_free( url ); } if( destroy ) gtk_widget_destroy( GTK_WIDGET( dialog ) ); }
void gtr_unrecognized_url_dialog (GtkWidget * parent, const char * url) { const char * xt = "xt=urn:btih"; GtkWindow * window = getWindow (parent); GString * gstr = g_string_new (NULL); GtkWidget * w = gtk_message_dialog_new (window, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", _("Unrecognized URL")); g_string_append_printf (gstr, _("Transmission doesn't know how to use \"%s\""), url); if (gtr_is_magnet_link (url) && (strstr (url, xt) == NULL)) { g_string_append_printf (gstr, "\n \n"); g_string_append_printf (gstr, _("This magnet link appears to be intended for something other than BitTorrent. BitTorrent magnet links have a section containing \"%s\"."), xt); } gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), "%s", gstr->str); g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w); gtk_widget_show (w); g_string_free (gstr, TRUE); }
gboolean gtr_dbus_add_torrent( const char * filename ) { /* FIXME: why is this static? */ static gboolean handled = FALSE; #ifdef HAVE_DBUS_GLIB char * payload; gsize file_length; char * file_contents = NULL; /* If it's a file, load its contents and send them over the wire... * it might be a temporary file that's going to disappear. */ if( g_file_get_contents( filename, &file_contents, &file_length, NULL ) ) payload = tr_base64_encode( file_contents, file_length, NULL ); else if( gtr_is_supported_url( filename ) || gtr_is_magnet_link( filename ) ) payload = tr_strdup( filename ); else payload = NULL; if( payload != NULL ) { GError * err = NULL; DBusGConnection * conn; DBusGProxy * proxy = NULL; if(( conn = dbus_g_bus_get( DBUS_BUS_SESSION, &err ))) proxy = dbus_g_proxy_new_for_name (conn, VALUE_SERVICE_NAME, VALUE_SERVICE_OBJECT_PATH, VALUE_SERVICE_INTERFACE ); else if( err ) g_message( "err: %s", err->message ); if( proxy ) dbus_g_proxy_call( proxy, "AddMetainfo", &err, G_TYPE_STRING, payload, G_TYPE_INVALID, G_TYPE_BOOLEAN, &handled, G_TYPE_INVALID ); if( err ) g_message( "err: %s", err->message ); if( proxy ) g_object_unref( proxy ); if( conn ) dbus_g_connection_unref( conn ); tr_free( payload ); } g_free( file_contents ); #endif return handled; }
void gtr_paste_clipboard_url_into_entry( GtkWidget * e ) { size_t i; char * text[] = { gtk_clipboard_wait_for_text( gtk_clipboard_get( GDK_SELECTION_PRIMARY ) ), gtk_clipboard_wait_for_text( gtk_clipboard_get( GDK_SELECTION_CLIPBOARD ) ) }; for( i=0; i<G_N_ELEMENTS(text); ++i ) { char * s = text[i]; if( s && ( gtr_is_supported_url( s ) || gtr_is_magnet_link( s ) || gtr_is_hex_hashcode( s ) ) ) { gtk_entry_set_text( GTK_ENTRY( e ), s ); break; } } for( i=0; i<G_N_ELEMENTS(text); ++i ) g_free( text[i] ); }