Changeset 5230
- Timestamp:
- Mar 9, 2008, 3:27:08 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/configure.ac
r5133 r5230 11 11 AC_PROG_LIBTOOL 12 12 13 GIO_MINIMUM=2.15.5 13 14 GLIB_MINIMUM=2.6.0 14 15 GTK_MINIMUM=2.6.0 15 16 WX_MINIMUM=2.6.0 16 17 LIBNOTIFY_MINIMUM=0.4.4 18 AC_SUBST(GIO_MINIMUM) 17 19 AC_SUBST(GLIB_MINIMUM) 18 20 AC_SUBST(GTK_MINIMUM) … … 95 97 AC_SUBST(GTK_CFLAGS) 96 98 99 PKG_CHECK_MODULES([GIO], 100 [gio-2.0 >= $GIO_MINIMUM], 101 [use_gio=yes], 102 [use_gio=no]) 103 AC_SUBST(GIO_LIBS) 104 AC_SUBST(GIO_CFLAGS) 105 if test "x$use_gio" = "xyes"; then 106 AC_DEFINE([HAVE_GIO], 1) 107 fi 108 97 109 PKG_CHECK_MODULES([LIBNOTIFY], 98 110 [libnotify >= $LIBNOTIFY_MINIMUM], … … 278 290 Build GTK+ client: ${build_gtk} 279 291 ... libnotify support: ${use_libnotify} 292 ... gio support: ${use_gio} 280 293 Build OS X client: ${build_darwin} 281 294 Build wxWidgets client: ${build_wx} -
trunk/gtk/Makefile.am
r5122 r5230 11 11 $(OPENSSL_CFLAGS) \ 12 12 $(PTHREAD_CFLAGS) \ 13 $(GIO_CFLAGS) \ 13 14 $(LIBNOTIFY_CFLAGS) 14 15 … … 72 73 $(top_builddir)/third-party/libnatpmp/libnatpmp.a \ 73 74 $(GTK_LIBS) \ 75 $(GIO_LIBS) \ 74 76 $(LIBNOTIFY_LIBS) \ 75 77 $(OPENSSL_LIBS) \ -
trunk/gtk/dialogs.c
r5226 r5230 154 154 155 155 flag = 0; 156 w = gtk_check_button_new_with_mnemonic( _( "_ Delete original torrent file" ) );156 w = gtk_check_button_new_with_mnemonic( _( "_Trash original torrent files" ) ); 157 157 g_signal_connect( w, "toggled", G_CALLBACK( deleteToggled ), ctor ); 158 if( tr_ctorGetDeleteSource( ctor, &flag ) ) 159 g_assert_not_reached( ); 158 160 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), flag ); 159 161 gtk_box_pack_start( GTK_BOX( v ), w, FALSE, FALSE, 0 ); -
trunk/gtk/ipc.c
r5226 r5230 34 34 #include <gtk/gtk.h> 35 35 #include <glib/gi18n.h> 36 #include <glib/gstdio.h> /* g_unlink */ 36 37 37 38 #include <libevent/evutil.h> … … 360 361 static void 361 362 rmsock(void) { 362 if( NULL !=gl_sockpath) {363 unlink(gl_sockpath);363 if( gl_sockpath) { 364 g_unlink(gl_sockpath); 364 365 g_free(gl_sockpath); 365 366 } … … 464 465 465 466 /* unlink any existing socket file before trying to create ours */ 466 unlink(gl_sockpath);467 g_unlink(gl_sockpath); 467 468 if(0 > bind(con->fd, (struct sockaddr *)&sa, SUN_LEN(&sa))) { 468 469 /* bind may fail if there was already a socket, so try twice */ 469 unlink(gl_sockpath);470 g_unlink(gl_sockpath); 470 471 if(0 > bind(con->fd, (struct sockaddr *)&sa, SUN_LEN(&sa))) 471 472 goto fail; -
trunk/gtk/open-dialog.c
r5226 r5230 12 12 13 13 #include <glib/gi18n.h> 14 #include <glib/gstdio.h>15 14 #include <gtk/gtk.h> 16 15 #include "file-list.h" … … 23 22 GtkWidget * list; 24 23 GtkToggleButton * run_check; 25 GtkToggleButton * delete_check;24 GtkToggleButton * trash_check; 26 25 char * filename; 27 26 char * destination; … … 56 55 tr_torrentStart( tr_torrent_handle( data->gtor ) ); 57 56 tr_core_add_torrent( data->core, data->gtor ); 58 if( gtk_toggle_button_get_active( data-> delete_check ) )59 g_unlink( data->filename );57 if( gtk_toggle_button_get_active( data->trash_check ) ) 58 tr_file_trash_or_unlink( data->filename ); 60 59 } 61 60 } … … 222 221 ++row; 223 222 col = 0; 224 w = gtk_check_button_new_with_mnemonic( _( "_Delete original torrent file" ) ); 225 data->delete_check = GTK_TOGGLE_BUTTON( w ); 223 w = gtk_check_button_new_with_mnemonic( _( "_Trash original torrent file" ) ); 224 data->trash_check = GTK_TOGGLE_BUTTON( w ); 225 if( tr_ctorGetDeleteSource( ctor, &flag ) ) 226 g_assert_not_reached( ); 226 227 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), flag ); 227 228 gtk_table_attach( GTK_TABLE( t ), w, col, col+2, row, row+1, GTK_FILL, 0, 0, 0 ); -
trunk/gtk/tr-core.c
r5217 r5230 27 27 #include <gtk/gtk.h> 28 28 #include <glib/gi18n.h> 29 #ifdef HAVE_GIO 30 #include <gio/gio.h> 31 #endif 29 32 30 33 #include <libtransmission/transmission.h> … … 39 42 struct TrCorePrivate 40 43 { 44 #ifdef HAVE_GIO 45 GFileMonitor * monitor; 46 #endif 41 47 GtkTreeModel * model; 42 48 tr_handle * handle; … … 278 284 } 279 285 286 #ifdef HAVE_GIO 287 static void 288 watchFolderChanged( GFileMonitor * monitor UNUSED, 289 GFile * file, 290 GFile * other_type UNUSED, 291 GFileMonitorEvent event_type, 292 gpointer gcore ) 293 { 294 if( event_type == G_FILE_MONITOR_EVENT_CREATED ) 295 { 296 TrCore * core = TR_CORE( gcore ); 297 char * filename = g_file_get_path( file ); 298 const gboolean isTorrent = g_str_has_suffix( filename, ".torrent" ); 299 if( isTorrent ) 300 { 301 tr_ctor * ctor = tr_ctorNew( core->priv->handle ); 302 tr_core_add_list( core, g_list_append( NULL, g_strdup( filename ) ), ctor ); 303 } 304 g_free( filename ); 305 } 306 } 307 308 static void 309 scanWatchDir( TrCore * core ) 310 { 311 const gboolean isEnabled = pref_flag_get( PREF_KEY_DIR_WATCH_ENABLED ); 312 if( isEnabled ) 313 { 314 GList * torrents = NULL; 315 char * dirname = pref_string_get( PREF_KEY_DIR_WATCH ); 316 GDir * dir = g_dir_open( dirname, 0, NULL ); 317 const char * basename; 318 while(( basename = g_dir_read_name( dir ))) 319 if( g_str_has_suffix( basename, ".torrent" ) ) 320 torrents = g_list_append( torrents, g_build_filename( dirname, basename, NULL ) ); 321 if( torrents ) 322 tr_core_add_list( core, torrents, tr_ctorNew( core->priv->handle ) ); 323 g_free( dirname ); 324 } 325 } 326 327 static void 328 updateWatchDir( TrCore * core ) 329 { 330 char * filename = pref_string_get( PREF_KEY_DIR_WATCH ); 331 const gboolean isEnabled = pref_flag_get( PREF_KEY_DIR_WATCH_ENABLED ); 332 333 if( core->priv->monitor && !isEnabled ) 334 { 335 GFileMonitor * m = core->priv->monitor; 336 core->priv->monitor = NULL; 337 g_signal_handlers_disconnect_by_func( m, watchFolderChanged, core ); 338 g_file_monitor_cancel( m ); 339 g_object_unref( G_OBJECT( m ) ); 340 } 341 else if( isEnabled && !core->priv->monitor ) 342 { 343 GFile * file = g_file_new_for_path( filename ); 344 GFileMonitor * m = g_file_monitor_directory( file, 0, NULL, NULL ); 345 scanWatchDir( core ); 346 g_signal_connect( m, "changed", G_CALLBACK (watchFolderChanged), core ); 347 core->priv->monitor = m; 348 } 349 350 g_free( filename ); 351 } 352 #endif 353 280 354 static void 281 355 prefsChanged( TrCore * core, const char * key, gpointer data UNUSED ) … … 294 368 tr_setGlobalPeerLimit( tr_core_handle( core ), val ); 295 369 } 370 #ifdef HAVE_GIO 371 else if( !strcmp( key, PREF_KEY_DIR_WATCH ) || 372 !strcmp( key, PREF_KEY_DIR_WATCH_ENABLED ) ) 373 { 374 updateWatchDir( core ); 375 } 376 #endif 296 377 } 297 378 … … 383 464 prefsChanged( core, PREF_KEY_SORT_MODE, NULL ); 384 465 prefsChanged( core, PREF_KEY_SORT_REVERSED, NULL ); 466 prefsChanged( core, PREF_KEY_DIR_WATCH_ENABLED, NULL ); 385 467 prefsChanged( core, PREF_KEY_MAX_PEERS_GLOBAL, NULL ); 386 468 g_signal_connect( core, "prefs-changed", G_CALLBACK(prefsChanged), NULL ); … … 500 582 tr_ctorSetPaused( ctor, TR_FORCE, !pref_flag_get( PREF_KEY_START ) ); 501 583 584 if( tr_ctorGetDeleteSource( ctor, NULL ) ) 585 tr_ctorSetDeleteSource( ctor, pref_flag_get( PREF_KEY_TRASH_ORIGINAL ) ); 586 502 587 if( tr_ctorGetMaxConnectedPeers( ctor, TR_FORCE, NULL ) ) 503 588 tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE, -
trunk/gtk/tr-prefs.c
r5229 r5230 32 32 cf_check_older_configs( ); 33 33 34 #if HAVE_GIO 35 str = NULL; 36 if( !str ) str = g_get_user_special_dir( G_USER_DIRECTORY_DESKTOP ); 37 if( !str ) str = g_get_home_dir( ); 38 pref_string_set_default ( PREF_KEY_DIR_WATCH, str ); 39 pref_flag_set_default ( PREF_KEY_DIR_WATCH_ENABLED, FALSE ); 40 #endif 41 34 42 pref_int_set_default ( PREF_KEY_MAX_PEERS_GLOBAL, 200 ); 35 43 pref_int_set_default ( PREF_KEY_MAX_PEERS_PER_TORRENT, 50 ); … … 48 56 str = NULL; 49 57 #if GLIB_CHECK_VERSION(2,14,0) 50 if( !str ) 51 str = g_get_user_special_dir( G_USER_DIRECTORY_DOWNLOAD ); 58 if( !str ) str = g_get_user_special_dir( G_USER_DIRECTORY_DOWNLOAD ); 52 59 #endif 53 if( !str ) 54 str = g_get_home_dir( ); 60 if( !str ) str = g_get_home_dir( ); 55 61 pref_string_set_default ( PREF_KEY_DIR_DEFAULT, str ); 56 62 … … 71 77 72 78 pref_flag_set_default ( PREF_KEY_START, TRUE ); 79 pref_flag_set_default ( PREF_KEY_TRASH_ORIGINAL, FALSE ); 73 80 74 81 pref_save( NULL ); … … 212 219 GtkWidget * t; 213 220 GtkWidget * w; 221 GtkWidget * l; 214 222 215 223 t = hig_workarea_create( ); 216 224 hig_workarea_add_section_title( t, &row, _( "Adding" ) ); 217 225 226 #ifdef HAVE_GIO 227 s = _( "Automatically add torrents from:" ); 228 l = new_check_button( s, PREF_KEY_DIR_WATCH_ENABLED, core ); 229 w = new_path_chooser_button( PREF_KEY_DIR_WATCH, core ); 230 gtk_widget_set_sensitive( GTK_WIDGET(w), pref_flag_get( PREF_KEY_DIR_WATCH_ENABLED ) ); 231 g_signal_connect( l, "toggled", G_CALLBACK(target_cb), w ); 232 hig_workarea_add_row_w( t, &row, l, w, NULL ); 233 #endif 234 235 s = _( "Show _options dialog" ); 236 w = new_check_button( s, PREF_KEY_OPTIONS_PROMPT, core ); 237 hig_workarea_add_wide_control( t, &row, w ); 238 239 s = _( "_Start torrents when added" ); 240 w = new_check_button( s, PREF_KEY_START, core ); 241 hig_workarea_add_wide_control( t, &row, w ); 242 243 s = _( "_Trash original torrent files" ); 244 w = new_check_button( s, PREF_KEY_TRASH_ORIGINAL, core ); 245 hig_workarea_add_wide_control( t, &row, w ); 246 218 247 w = new_path_chooser_button( PREF_KEY_DIR_DEFAULT, core ); 219 248 hig_workarea_add_row( t, &row, _( "Default destination _folder:" ), w, NULL ); 220 221 s = _( "Show _options dialog" );222 w = new_check_button( s, PREF_KEY_OPTIONS_PROMPT, core );223 hig_workarea_add_wide_control( t, &row, w );224 225 s = _( "_Start when added" );226 w = new_check_button( s, PREF_KEY_START, core );227 hig_workarea_add_wide_control( t, &row, w );228 249 229 250 #ifdef HAVE_LIBNOTIFY … … 231 252 hig_workarea_add_section_title( t, &row, _( "Notification" ) ); 232 253 233 s = _( "_ Popup message when a torrent finishes" );254 s = _( "_Display a message when torrents finish" ); 234 255 w = new_check_button( s, PREF_KEY_NOTIFY, core ); 235 256 hig_workarea_add_wide_control( t, &row, w ); -
trunk/gtk/tr-prefs.h
r5229 r5230 27 27 #define PREF_KEY_OPTIONS_PROMPT "show-options-window" 28 28 #define PREF_KEY_DIR_DEFAULT "default-download-directory" 29 #define PREF_KEY_DIR_WATCH "watch-folder" 30 #define PREF_KEY_DIR_WATCH_ENABLED "watch-folder-enabled" 29 31 #define PREF_KEY_START "start-added-torrents" 32 #define PREF_KEY_TRASH_ORIGINAL "trash-original-torrent-files" 30 33 #define PREF_KEY_PORT "listening-port" 31 34 #define PREF_KEY_NAT "nat-traversal-enabled" -
trunk/gtk/tr-torrent.c
r5226 r5230 28 28 #include <gtk/gtk.h> 29 29 #include <glib/gi18n.h> 30 #include <glib/gstdio.h>31 30 32 31 #include <libtransmission/transmission.h> … … 205 204 *err = NULL; 206 205 206 tr_ctorSetDeleteSource( ctor, FALSE ); 207 207 tor = tr_torrentNew( handle, ctor, &errcode ); 208 209 if( tor ) 210 { 211 uint8_t doTrash = FALSE; 212 tr_ctorGetDeleteSource( ctor, &doTrash ); 213 if( doTrash ) 214 tr_file_trash_or_unlink( tr_ctorGetSourceFile( ctor ) ); 215 } 208 216 209 217 if( !tor ) … … 335 343 { 336 344 char * swap = g_path_get_dirname( file ); 337 g_unlink( file );345 tr_file_trash_or_unlink( file ); 338 346 g_free( file ); 339 347 file = swap; -
trunk/gtk/util.c
r5227 r5230 29 29 #include <gtk/gtk.h> 30 30 #include <glib/gi18n.h> 31 #include <glib/gstdio.h> /* g_unlink() */ 32 #ifdef HAVE_GIO 33 #include <gio/gio.h> /* g_file_trash() */ 34 #endif 31 35 32 36 #include <libevent/evhttp.h> … … 417 421 return object; 418 422 } 423 424 void 425 tr_file_trash_or_unlink( const char * filename ) 426 { 427 if( filename && *filename ) 428 { 429 gboolean trashed = FALSE; 430 #ifdef HAVE_GIO 431 GError * err = NULL; 432 GFile * file = g_file_new_for_path( filename ); 433 trashed = g_file_trash( file, NULL, &err ); 434 g_object_unref( G_OBJECT( file ) ); 435 #endif 436 if( !trashed ) 437 g_unlink( filename ); 438 } 439 } -
trunk/gtk/util.h
r5169 r5230 111 111 gpointer tr_object_ref_sink (gpointer object); 112 112 113 void tr_file_trash_or_unlink( const char * filename ); 114 113 115 #endif /* GTK_MAJOR_VERSION */ 114 116
Note: See TracChangeset
for help on using the changeset viewer.