/* invoked remotely via dbus. */
gboolean
tr_core_add_metainfo( TrCore * core,
- const char * base64_metainfo,
+ const char * payload,
gboolean * setme_success,
GError ** gerr UNUSED )
{
{
*setme_success = FALSE;
}
- else
+ else if( gtr_is_supported_url( payload ) || gtr_is_magnet_link( payload ) )
+ {
+ tr_core_add_from_url( core, payload );
+ *setme_success = TRUE;
+ }
+ else /* base64-encoded metainfo */
{
int err;
int file_length;
ctor = tr_ctorNew( session );
tr_core_apply_defaults( ctor );
- file_contents = tr_base64_decode( base64_metainfo, -1, &file_length );
+ file_contents = tr_base64_decode( payload, -1, &file_length );
err = tr_ctorSetMetainfo( ctor, (const uint8_t*)file_contents, file_length );
if( !err )
ret = g_slist_prepend( ret, filename );
else {
if( gtr_is_hex_hashcode( argv[i] ) )
- ret = g_slist_prepend( ret, g_strdup( argv[i] ) );
+ ret = g_slist_prepend( ret, g_strdup_printf( "magnet:?xt=urn:btih:%s", argv[i] ) );
g_free( filename );
}
}
{
/* FIXME: why is this static? */
static gboolean success = FALSE;
+
#ifdef HAVE_DBUS_GLIB
- DBusGProxy * proxy = NULL;
- GError * err = NULL;
- DBusGConnection * conn;
- char * file_contents;
+ 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 )
{
- char * b64 = tr_base64_encode( file_contents, file_length, 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, b64,
+ G_TYPE_STRING, payload,
G_TYPE_INVALID,
G_TYPE_BOOLEAN, &success,
G_TYPE_INVALID );
if( conn )
dbus_g_connection_unref( conn );
- tr_free( b64 );
- g_free( file_contents );
+ tr_free( payload );
}
- else g_message( "couldn't read %s", filename );
+
+ g_free( file_contents );
#endif
return success;