(trunk gtk) support adding torrents by their raw 40 character hex hashcode

This commit is contained in:
Charles Kerr 2009-11-29 07:42:39 +00:00
parent 52699591dc
commit c841adaf56
4 changed files with 33 additions and 3 deletions

View File

@ -486,7 +486,8 @@ onAddURLResponse( GtkDialog * dialog, int response, gpointer user_data )
{
TrCore * core = user_data;
if( gtr_is_supported_url( url ) || gtr_is_magnet_link( url ) )
if( gtr_is_supported_url( url ) || gtr_is_magnet_link( url )
|| gtr_is_hex_hashcode( url ) )
{
tr_core_add_from_url( core, url );
}

View File

@ -1038,10 +1038,17 @@ tr_core_add_from_url( TrCore * core, const char * url )
{
tr_session * session = tr_core_session( core );
if( gtr_is_magnet_link( url ) )
if( gtr_is_magnet_link( url ) || gtr_is_hex_hashcode( url ) )
{
int err;
char * tmp = NULL;
tr_ctor * ctor = tr_ctorNew( session );
int err = tr_ctorSetMagnet( ctor, url );
if( gtr_is_hex_hashcode( url ) )
url = tmp = g_strdup_printf( "magnet:?xt=urn:btih:%s", url );
err = tr_ctorSetMagnet( ctor, url );
if( !err )
{
tr_session * session = tr_core_session( core );
@ -1064,6 +1071,8 @@ tr_core_add_from_url( TrCore * core, const char * url )
gtk_widget_show( w );
tr_ctorFree( ctor );
}
g_free( tmp );
}
else
{

View File

@ -337,6 +337,21 @@ gtr_is_magnet_link( const char * str )
return !strncmp( str, "magnet:?", 8 );
}
gboolean
gtr_is_hex_hashcode( const char * str )
{
int i;
if( !str || ( strlen( str ) != 40 ) )
return FALSE;
for( i=0; i<40; ++i )
if( !isxdigit( str[i] ) )
return FALSE;
return TRUE;
}
GSList *
checkfilenames( int argc, char **argv )
{
@ -358,6 +373,8 @@ checkfilenames( int argc, char **argv )
if( g_file_test( filename, G_FILE_TEST_EXISTS ) )
ret = g_slist_prepend( ret, filename );
else if( gtr_is_hex_hashcode( filename ) )
ret = g_slist_prepend( ret, filename );
else
g_free( filename );
}

View File

@ -47,6 +47,9 @@ gboolean gtr_is_supported_url( const char * str );
gboolean gtr_is_magnet_link( const char * str );
gboolean gtr_is_hex_hashcode( const char * str );
/* create a copy of a GSList of strings, this dups the actual strings too */
GSList * dupstrlist( GSList * list );