42 static void set_import_filters(GtkFileChooser *chooser);
43 static void build_import_filter(GtkFileChooser *chooser,
44 const gchar *filter_name,
const gchar *filter_pattern,
45 const gchar *filter_pattern_upper,
46 GList **filters, GtkFileFilter *all_filter);
47 static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname);
48 static gpointer add_cddb_splitpoints(
ui_with_fname *ui_fname);
54 GtkWidget *file_chooser =
55 gtk_file_chooser_dialog_new(_(
"Choose file to import"),
57 GTK_FILE_CHOOSER_ACTION_OPEN,
64 wh_set_browser_directory_handler(ui, file_chooser);
65 set_import_filters(GTK_FILE_CHOOSER(file_chooser));
67 if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT)
69 gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
79 gtk_widget_destroy(file_chooser);
93 gchar *ext = strrchr(filename,
'.');
94 GString *ext_str = g_string_new(ext);
96 g_string_ascii_up(ext_str);
98 if ((strstr(ext_str->str,
".MP3") != NULL) ||
99 (strstr(ext_str->str,
".OGG") != NULL))
101 file_chooser_ok_event(filename, ui);
104 else if ((strstr(ext_str->str,
".CUE") != NULL))
108 ui_fname->fname = strdup(filename);
109 create_thread_with_fname((GThreadFunc)add_cue_splitpoints, ui_fname);
111 else if ((strstr(ext_str->str,
".CDDB") != NULL))
115 ui_fname->fname = strdup(filename);
116 create_thread_with_fname((GThreadFunc)add_cddb_splitpoints, ui_fname);
118 else if ((strstr(ext_str->str,
".TXT") != NULL))
122 ui_fname->fname = strdup(filename);
123 create_thread_with_fname((GThreadFunc)add_audacity_labels_splitpoints, ui_fname);
128 g_string_free(ext_str, FALSE);
132 void import_files_to_batch_and_free(GSList *files,
ui_state *ui)
134 GSList *current_file = files;
137 gchar *filename = current_file->data;
140 int num_of_files_found = 0;
142 char **splt_filenames =
143 mp3splt_find_filenames(ui->mp3splt_state, filename, &num_of_files_found, &err);
148 for (i = 0;i < num_of_files_found;i++)
150 if (!splt_filenames[i])
155 multiple_files_add_filename(splt_filenames[i], ui);
157 free(splt_filenames[i]);
158 splt_filenames[i] = NULL;
161 free(splt_filenames);
162 splt_filenames = NULL;
168 current_file = g_slist_next(current_file);
173 if (ui->infos->multiple_files_tree_number > 0)
175 gtk_widget_set_sensitive(ui->gui->multiple_files_remove_all_files_button, TRUE);
180 static void set_import_filters(GtkFileChooser *chooser)
182 GtkFileFilter *all_filter = gtk_file_filter_new();
183 gtk_file_filter_set_name(GTK_FILE_FILTER(all_filter),
184 _(
"CDDB (*.cddb), CUE (*.cue), Audacity labels (*.txt)"));
186 GList *filters = NULL;
188 build_import_filter(chooser, _(
"CDDB files (*.cddb)"),
"*.cddb",
"*.CDDB",
189 &filters, all_filter);
190 build_import_filter(chooser, _(
"CUE files (*.cue)"),
"*.cue",
"*.CUE",
191 &filters, all_filter);
192 build_import_filter(chooser, _(
"Audacity labels files (*.txt)"),
"*.txt",
"*.TXT",
193 &filters, all_filter);
194 build_import_filter(chooser, _(
"All files"),
"*", NULL, &filters, NULL);
196 gtk_file_chooser_add_filter(chooser, all_filter);
199 for (iter = filters; iter != NULL; iter = g_list_next(iter))
201 gtk_file_chooser_add_filter(chooser, iter->data);
205 static void build_import_filter(GtkFileChooser *chooser,
206 const gchar *filter_name,
const gchar *filter_pattern,
207 const gchar *filter_pattern_upper,
208 GList **filters, GtkFileFilter *all_filter)
210 GtkFileFilter *filter = gtk_file_filter_new();
211 gtk_file_filter_set_name(GTK_FILE_FILTER(filter), filter_name);
212 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern);
214 if (filter_pattern_upper)
216 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern_upper);
221 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern);
222 if (filter_pattern_upper)
224 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern_upper);
228 *filters = g_list_append(*filters, filter);
231 static gboolean add_audacity_labels_splitpoints_end(
ui_with_err *ui_err)
234 gint err = ui_err->err;
243 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
250 static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname)
254 set_process_in_progress_and_wait_safe(TRUE, ui);
256 gchar *filename = ui_fname->fname;
261 mp3splt_put_audacity_labels_splitpoints_from_file(ui->mp3splt_state, filename, &err);
268 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_audacity_labels_splitpoints_end,
274 static gboolean add_cddb_splitpoints_end(
ui_with_err *ui_err)
277 gint err = ui_err->err;
286 set_process_in_progress_and_wait_safe(FALSE, ui);
294 static gpointer add_cddb_splitpoints(
ui_with_fname *ui_fname)
298 set_process_in_progress_and_wait_safe(TRUE, ui);
300 gchar *filename = ui_fname->fname;
308 mp3splt_put_cddb_splitpoints_from_file(ui->mp3splt_state, filename, &err);
315 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cddb_splitpoints_end,
321 static gboolean add_cue_splitpoints_end(
ui_with_err *ui_err)
325 if (ui_err->err >= 0)
337 file_chooser_ok_event(filename_to_split, ui);
340 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
352 set_process_in_progress_and_wait_safe(TRUE, ui);
354 gchar *filename = ui_fname->fname;
364 mp3splt_put_cue_splitpoints_from_file(ui->mp3splt_state, filename, &err);
371 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cue_splitpoints_end,