static void onOpenDialogResponse( GtkDialog * dialog, int response, gpointer core ) { char * folder; /* remember this folder the next time we use this dialog */ folder = gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER( dialog ) ); gtr_pref_string_set( PREF_KEY_OPEN_DIALOG_FOLDER, folder ); g_free( folder ); if( response == GTK_RESPONSE_ACCEPT ) { GtkFileChooser * chooser = GTK_FILE_CHOOSER( dialog ); GtkWidget * w = gtk_file_chooser_get_extra_widget( chooser ); GtkToggleButton * tb = GTK_TOGGLE_BUTTON( w ); const gboolean do_start = gtr_pref_flag_get( TR_PREFS_KEY_START ); const gboolean do_prompt = gtk_toggle_button_get_active( tb ); const gboolean do_notify = FALSE; GSList * files = gtk_file_chooser_get_files( chooser ); gtr_core_add_files( core, files, do_start, do_prompt, do_notify ); g_slist_foreach( files, (GFunc)g_object_unref, NULL ); g_slist_free( files ); } gtk_widget_destroy( GTK_WIDGET( dialog ) ); }
static gboolean core_watchdir_idle (gpointer gcore) { GSList * l; GSList * changing = NULL; GSList * unchanging = NULL; TrCore * core = TR_CORE (gcore); const time_t now = tr_time (); struct TrCorePrivate * p = core->priv; /* separate the files into two lists: changing and unchanging */ for (l=p->monitor_files; l!=NULL; l=l->next) { GFile * file = l->data; const time_t mtime = get_file_mtime (file); if (mtime + 2 >= now) changing = g_slist_prepend (changing, file); else unchanging = g_slist_prepend (unchanging, file); } /* add the files that have stopped changing */ if (unchanging != NULL) { const gboolean do_start = gtr_pref_flag_get (TR_KEY_start_added_torrents); const gboolean do_prompt = gtr_pref_flag_get (TR_KEY_show_options_window); core->priv->adding_from_watch_dir = TRUE; gtr_core_add_files (core, unchanging, do_start, do_prompt, TRUE); g_slist_foreach (unchanging, (GFunc)rename_torrent_and_unref_file, NULL); g_slist_free (unchanging); core->priv->adding_from_watch_dir = FALSE; } /* keep monitoring the ones that are still changing */ g_slist_free (p->monitor_files); p->monitor_files = changing; /* if monitor_files is nonempty, keep checking every second */ if (core->priv->monitor_files) return G_SOURCE_CONTINUE; core->priv->monitor_idle_tag = 0; return G_SOURCE_REMOVE; }