Changeset 9545
Legend:
- Unmodified
- Added
- Removed
-
trunk/gtk/actions.c
r9094 r9545 103 103 { "edit-menu", NULL, N_( "_Edit" ), NULL, NULL, NULL }, 104 104 { "help-menu", NULL, N_( "_Help" ), NULL, NULL, NULL }, 105 { "add-torrent-from-url", GTK_STOCK_ADD, N_("Add _URL..." ), NULL, N_( "Add URL" ), G_CALLBACK( action_cb ) }, 105 106 { "add-torrent-toolbar", GTK_STOCK_ADD, NULL, NULL, N_( "Add a torrent" ), G_CALLBACK( action_cb ) }, 106 107 { "add-torrent-menu", GTK_STOCK_ADD, N_( "_Add..." ), "<control>D", N_( "Add a torrent" ), G_CALLBACK( action_cb ) }, -
trunk/gtk/add-dialog.c
r9338 r9545 13 13 #include <glib/gi18n.h> 14 14 #include <gtk/gtk.h> 15 15 16 #include "add-dialog.h" 16 17 #include "conf.h" … … 28 29 get_recent_destinations( void ) 29 30 { 30 int 31 int i; 31 32 GSList * list = NULL; 32 33 33 for( i = 0; i <N_RECENT; ++i )34 { 35 char 34 for( i=0; i<N_RECENT; ++i ) 35 { 36 char key[64]; 36 37 const char * val; 37 g_snprintf( key, sizeof( key ), "recent-download-dir-%d", i +1 );38 if( ( val = pref_string_get( key ) ))38 g_snprintf( key, sizeof( key ), "recent-download-dir-%d", i+1 ); 39 if(( val = pref_string_get( key ))) 39 40 list = g_slist_append( list, (void*)val ); 40 41 } … … 45 46 save_recent_destination( TrCore * core, const char * dir ) 46 47 { 47 int i; 48 int i; 49 GSList * l; 48 50 GSList * list = get_recent_destinations( ); 49 GSList * l; 50 51 if( !dir ) 51 52 if( dir == NULL ) 52 53 return; 53 54 54 55 /* if it was already in the list, remove it */ 55 if( ( l = g_slist_find_custom( list, dir, (GCompareFunc)strcmp ) ))56 if(( l = g_slist_find_custom( list, dir, (GCompareFunc)strcmp ))) 56 57 list = g_slist_delete_link( list, l ); 57 58 … … 61 62 /* make local copies of the strings that aren't 62 63 * invalidated by pref_string_set() */ 63 for( l = list; l; l =l->next )64 for( l=list; l; l=l->next ) 64 65 l->data = g_strdup( l->data ); 65 66 66 67 /* save the first N_RECENT directories */ 67 for( l = list, i = 0; l && ( i < N_RECENT ); ++i, l = l->next ) 68 { 68 for( l=list, i=0; l && ( i<N_RECENT ); ++i, l=l->next ) { 69 69 char key[64]; 70 70 g_snprintf( key, sizeof( key ), "recent-download-dir-%d", i + 1 ); … … 468 468 } 469 469 470 /*** 471 **** 472 ***/ 473 474 static void 475 onAddURLResponse( GtkDialog * dialog, int response, gpointer user_data ) 476 { 477 gboolean destroy = TRUE; 478 479 if( response == GTK_RESPONSE_ACCEPT ) 480 { 481 GtkWidget * e = GTK_WIDGET( g_object_get_data( G_OBJECT( dialog ), "url-entry" ) ); 482 char * url = g_strdup( gtk_entry_get_text( GTK_ENTRY( e ) ) ); 483 g_strstrip( url ); 484 485 if( url && *url ) 486 { 487 TrCore * core = user_data; 488 489 if( gtr_is_supported_url( url ) ) 490 { 491 tr_core_add_from_url( core, url ); 492 } 493 else 494 { 495 GtkWidget * w = gtk_message_dialog_new( GTK_WINDOW( dialog ), 496 GTK_DIALOG_MODAL, 497 GTK_MESSAGE_ERROR, 498 GTK_BUTTONS_CLOSE, 499 "%s", _( "Unrecognized URL" ) ); 500 gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( w ), 501 _( "Transmission doesn't know how to use \"%s\"" ), url ); 502 gtk_dialog_run( GTK_DIALOG( w ) ); 503 gtk_widget_destroy( w ); 504 destroy = FALSE; 505 } 506 } 507 } 508 509 if( destroy ) 510 gtk_widget_destroy( GTK_WIDGET( dialog ) ); 511 } 512 513 GtkWidget* 514 addURLDialog( GtkWindow * parent, TrCore * core ) 515 { 516 int row; 517 GtkWidget * e; 518 GtkWidget * t; 519 GtkWidget * w; 520 521 w = gtk_dialog_new_with_buttons( _( "Add a URL" ), parent, 522 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, 523 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 524 GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT, 525 NULL ); 526 gtk_dialog_set_alternative_button_order( GTK_DIALOG( w ), 527 GTK_RESPONSE_ACCEPT, 528 GTK_RESPONSE_CANCEL, 529 -1 ); 530 g_signal_connect( w, "response", G_CALLBACK( onAddURLResponse ), core ); 531 532 row = 0; 533 t = hig_workarea_create( ); 534 hig_workarea_add_section_title( t, &row, _( "Add torrent from URL" ) ); 535 e = gtk_entry_new( ); 536 g_object_set_data( G_OBJECT( w ), "url-entry", e ); 537 hig_workarea_add_row( t, &row, _( "_URL" ), e, NULL ); 538 539 gtk_box_pack_start( GTK_BOX( GTK_DIALOG( w )->vbox ), t, TRUE, TRUE, 0 ); 540 gtk_widget_show_all( t ); 541 gtk_widget_show( w ); 542 return w; 543 } -
trunk/gtk/add-dialog.h
r7658 r9545 25 25 TrCore * core ); 26 26 27 GtkWidget* addURLDialog( GtkWindow * parent, 28 TrCore * core ); 29 27 30 #endif /* TR_GTK_ADD_DIALOG */ -
trunk/gtk/main.c
r9528 r9545 365 365 366 366 gerr = NULL; 367 if( !gtk_init_with_args( &argc, &argv, (char*)_( "[torrent files ]" ), entries,367 if( !gtk_init_with_args( &argc, &argv, (char*)_( "[torrent files or urls]" ), entries, 368 368 (char*)domain, &gerr ) ) 369 369 { … … 1357 1357 gboolean changed = FALSE; 1358 1358 1359 if( !strcmp( action_name, "add-torrent-menu" ) 1359 if( !strcmp( action_name, "add-torrent-from-url" ) ) 1360 { 1361 addURLDialog( data->wind, data->core ); 1362 } 1363 else if( !strcmp( action_name, "add-torrent-menu" ) 1360 1364 || !strcmp( action_name, "add-torrent-toolbar" ) ) 1361 1365 { -
trunk/gtk/tr-core.c
r9486 r9545 39 39 #include <libtransmission/json.h> 40 40 #include <libtransmission/utils.h> /* tr_free */ 41 #include <libtransmission/web.h> 41 42 42 43 #include "conf.h" … … 976 977 } 977 978 979 /*** 980 **** 981 ***/ 982 983 struct url_dialog_data 984 { 985 TrCore * core; 986 tr_ctor * ctor; 987 GtkDialog * dialog; 988 }; 989 990 static gboolean 991 onURLDoneIdle( gpointer vdata ) 992 { 993 struct url_dialog_data * data = vdata; 994 tr_core_add_ctor( data->core, data->ctor ); 995 g_free( data ); 996 return FALSE; 997 } 998 999 static void 1000 onURLDone( tr_session * session, 1001 long response_code UNUSED, 1002 const void * response, 1003 size_t response_byte_count, 1004 void * vdata ) 1005 { 1006 struct url_dialog_data * data = vdata; 1007 tr_ctor * ctor = tr_ctorNew( session ); 1008 1009 /* FIME: error dialog */ 1010 1011 if( tr_ctorSetMetainfo( ctor, response, response_byte_count ) ) 1012 { 1013 tr_ctorFree( ctor ); 1014 g_free( data ); 1015 } 1016 else /* move the work back to the gtk thread */ 1017 { 1018 data->ctor = ctor; 1019 gtr_idle_add( onURLDoneIdle, data ); 1020 } 1021 } 1022 1023 void 1024 tr_core_add_from_url( TrCore * core, const char * url ) 1025 { 1026 if( gtr_is_magnet_link( url ) ) 1027 { 1028 g_message( "FIXME: magnet link \"%s\" not handled", url ); 1029 } 1030 else 1031 { 1032 struct url_dialog_data * data = g_new( struct url_dialog_data, 1 ); 1033 data->core = core; 1034 tr_webRun( tr_core_session( core ), url, NULL, onURLDone, data ); 1035 } 1036 } 1037 1038 /*** 1039 **** 1040 ***/ 1041 978 1042 static void 979 1043 add_filename( TrCore * core, … … 984 1048 { 985 1049 tr_session * session = tr_core_session( core ); 986 if( filename && session ) 1050 1051 if( session == NULL ) 1052 return; 1053 1054 if( gtr_is_supported_url( filename ) ) 1055 { 1056 tr_core_add_from_url( core, filename ); 1057 } 1058 else /* try it as a local file */ 987 1059 { 988 1060 int err; 1061 989 1062 tr_ctor * ctor = tr_ctorNew( session ); 1063 tr_ctorSetMetainfoFromFile( ctor, filename ); 990 1064 tr_core_apply_defaults( ctor ); 991 1065 tr_ctorSetPaused( ctor, TR_FORCE, !doStart ); 992 tr_ctorSetMetainfoFromFile( ctor, filename );993 1066 994 1067 err = add_ctor( core, ctor, doPrompt, doNotify ); -
trunk/gtk/tr-core.h
r9130 r9545 136 136 GError ** err ); 137 137 138 /** @brief Add a torrent from a URL */ 139 void tr_core_add_from_url( TrCore * core, const char * url ); 140 138 141 /** @brief Add a torrent. 139 142 @param ctor this function assumes ownership of the ctor */ -
trunk/gtk/ui.h
r9483 r9545 4 4 " <menu action='torrent-menu'>\n" 5 5 " <menuitem action='add-torrent-menu'/>\n" 6 " <menuitem action='add-torrent-from-url'/>\n" 6 7 " <menuitem action='new-torrent'/>\n" 7 8 " <separator/>\n" -
trunk/gtk/util.c
r9172 r9545 323 323 } 324 324 325 326 gboolean 327 gtr_is_supported_url( const char * str ) 328 { 329 return gtr_is_magnet_link( str ) 330 || !strncmp( str, "ftp://", 6 ) 331 || !strncmp( str, "http://", 7 ) 332 || !strncmp( str, "https://", 8 ); 333 } 334 335 gboolean 336 gtr_is_magnet_link( const char * str ) 337 { 338 return !strncmp( str, "magnet:?", 8 ); 339 } 340 325 341 GSList * 326 checkfilenames( int argc, 327 char **argv ) 328 { 329 int i; 342 checkfilenames( int argc, char **argv ) 343 { 344 int i; 330 345 GSList * ret = NULL; 331 char * pwd = g_get_current_dir( ); 332 333 for( i = 0; i < argc; ++i ) 334 { 335 char * filename = g_path_is_absolute( argv[i] ) 336 ? g_strdup ( argv[i] ) 337 : g_build_filename( pwd, argv[i], NULL ); 338 339 if( g_file_test( filename, G_FILE_TEST_EXISTS ) ) 340 ret = g_slist_prepend( ret, filename ); 341 else 342 g_free( filename ); 346 char * pwd = g_get_current_dir( ); 347 348 for( i=0; i<argc; ++i ) 349 { 350 if( gtr_is_supported_url( argv[i] ) ) 351 { 352 ret = g_slist_prepend( ret, g_strdup( argv[i] ) ); 353 } 354 else /* local file */ 355 { 356 char * filename = g_path_is_absolute( argv[i] ) 357 ? g_strdup ( argv[i] ) 358 : g_build_filename( pwd, argv[i], NULL ); 359 360 if( g_file_test( filename, G_FILE_TEST_EXISTS ) ) 361 ret = g_slist_prepend( ret, filename ); 362 else 363 g_free( filename ); 364 } 343 365 } 344 366 -
trunk/gtk/util.h
r8929 r9545 43 43 **** 44 44 ***/ 45 46 gboolean gtr_is_supported_url( const char * str ); 47 48 gboolean gtr_is_magnet_link( const char * str ); 45 49 46 50 /* create a copy of a GSList of strings, this dups the actual strings too */
Note: See TracChangeset
for help on using the changeset viewer.