42static void set_import_filters(GtkFileChooser *chooser);
43static 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);
47static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname);
50static gpointer add_plugin_internal_cue_splitpoints(
ui_with_fname *ui_fname);
55 GtkWidget *file_chooser =
56 gtk_file_chooser_dialog_new(_(
"Choose file to import"),
58 GTK_FILE_CHOOSER_ACTION_OPEN,
65 wh_set_browser_directory_handler(ui, file_chooser);
66 set_import_filters(GTK_FILE_CHOOSER(file_chooser));
68 if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT)
70 gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
80 gtk_widget_destroy(file_chooser);
87 ui_fname->fname = strdup(filename);
89 const gchar *output_format = gtk_entry_get_text(GTK_ENTRY(ui->gui->output_entry));
90 if (output_format != NULL)
92 ui_fname->output_format = g_strdup(output_format);
104 if (filename == NULL)
109 gchar *ext = strrchr(filename,
'.');
110 GString *ext_str = g_string_new(ext);
112 g_string_ascii_up(ext_str);
114 if (!force_import_cue &&
115 ((strstr(ext_str->str,
".MP3") != NULL) ||
116 (strstr(ext_str->str,
".OGG") != NULL) ||
117 (strstr(ext_str->str,
".FLAC") != NULL)))
119 file_chooser_ok_event(filename, ui);
122 else if ((strstr(ext_str->str,
".CUE") != NULL))
124 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename);
125 create_thread_and_unref((GThreadFunc)add_cue_splitpoints,
126 (gpointer) ui_fname, ui,
"import_cue");
128 else if ((strstr(ext_str->str,
".CDDB") != NULL))
130 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename);
131 create_thread_and_unref((GThreadFunc)add_cddb_splitpoints,
132 (gpointer) ui_fname, ui,
"import_cddb");
134 else if ((strstr(ext_str->str,
".TXT") != NULL))
136 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename);
137 create_thread_and_unref((GThreadFunc)add_audacity_labels_splitpoints,
138 (gpointer) ui_fname, ui,
"import_audacity");
142 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename);
143 create_thread_and_unref((GThreadFunc)add_plugin_internal_cue_splitpoints,
144 (gpointer) ui_fname, ui,
"import_internal");
149 g_string_free(ext_str, FALSE);
153void import_cue_file_from_the_configuration_directory(
ui_state *ui)
155 gchar *configuration_directory = get_configuration_directory();
157 gsize filename_size = strlen(configuration_directory) + 20;
158 gchar *splitpoints_cue_filename = g_malloc(filename_size *
sizeof(gchar));
159 g_snprintf(splitpoints_cue_filename, filename_size,
"%s%s%s", configuration_directory,
160 G_DIR_SEPARATOR_S,
"splitpoints.cue");
164 ui->importing_cue_from_configuration_directory = TRUE;
166 mp3splt_set_int_option(ui->mp3splt_state,
167 SPLT_OPT_CUE_SET_SPLITPOINT_NAMES_FROM_REM_NAME, SPLT_TRUE);
171 g_free(configuration_directory);
172 g_free(splitpoints_cue_filename);
178 char **splt_filenames = ui_wf->filenames;
181 for (i = 0;i < ui_wf->num_of_filenames;i++)
183 if (!splt_filenames[i])
188 multiple_files_add_filename(splt_filenames[i], ui);
190 free(splt_filenames[i]);
191 splt_filenames[i] = NULL;
194 free(splt_filenames);
195 splt_filenames = NULL;
202static gboolean import_files_to_batch_end(
ui_state *ui)
204 if (ui->infos->multiple_files_tree_number > 0)
206 gtk_widget_set_sensitive(ui->gui->multiple_files_remove_all_files_button, TRUE);
209 set_process_in_progress_and_wait_safe(FALSE, ui);
214static gpointer import_files_to_batch_thread(
ui_with_list *ui_wl)
218 set_process_in_progress_and_wait_safe(TRUE, ui);
220 GSList *current_file = ui_wl->list;
223 gchar *filename = current_file->data;
226 int num_of_files_found = 0;
228 char **splt_filenames =
229 mp3splt_find_filenames(ui->mp3splt_state, filename, &num_of_files_found, &err);
235 ui_wf->filenames = splt_filenames;
236 ui_wf->num_of_filenames = num_of_files_found;
238 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)import_files_to_batch, ui_wf, NULL);
244 current_file = g_slist_next(current_file);
247 g_slist_free(ui_wl->list);
251 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)import_files_to_batch_end, ui, NULL);
256void import_files_to_batch_and_free(GSList *files,
ui_state *ui)
262 create_thread_and_unref((GThreadFunc)import_files_to_batch_thread,
263 (gpointer) ui_wl, ui,
"import_to_batch");
267static void set_import_filters(GtkFileChooser *chooser)
269 GtkFileFilter *all_filter = gtk_file_filter_new();
270 gtk_file_filter_set_name(GTK_FILE_FILTER(all_filter),
271 _(
"CDDB (*.cddb), CUE (*.cue), Audacity labels (*.txt), internal sheet (*.flac), chapters (*.mp3)"));
273 GList *filters = NULL;
275 build_import_filter(chooser, _(
"CDDB files (*.cddb)"),
"*.cddb",
"*.CDDB",
276 &filters, all_filter);
277 build_import_filter(chooser, _(
"CUE files (*.cue)"),
"*.cue",
"*.CUE",
278 &filters, all_filter);
279 build_import_filter(chooser, _(
"Audacity labels files (*.txt)"),
"*.txt",
"*.TXT",
280 &filters, all_filter);
281 build_import_filter(chooser, _(
"FLAC internal sheet (*.flac)"),
"*.flac",
"*.FLAC",
282 &filters, all_filter);
283 build_import_filter(chooser, _(
"ID3v2 chapters (*.mp3)"),
"*.mp3",
"*.MP3",
284 &filters, all_filter);
285 build_import_filter(chooser, _(
"All files"),
"*", NULL, &filters, NULL);
287 gtk_file_chooser_add_filter(chooser, all_filter);
290 for (iter = filters; iter != NULL; iter = g_list_next(iter))
292 gtk_file_chooser_add_filter(chooser, iter->data);
296static void build_import_filter(GtkFileChooser *chooser,
297 const gchar *filter_name,
const gchar *filter_pattern,
298 const gchar *filter_pattern_upper,
299 GList **filters, GtkFileFilter *all_filter)
301 GtkFileFilter *filter = gtk_file_filter_new();
302 gtk_file_filter_set_name(GTK_FILE_FILTER(filter), filter_name);
303 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern);
305 if (filter_pattern_upper)
307 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern_upper);
312 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern);
313 if (filter_pattern_upper)
315 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern_upper);
319 *filters = g_list_append(*filters, filter);
322static gboolean add_audacity_labels_splitpoints_end(
ui_with_err *ui_err)
325 gint err = ui_err->err;
334 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
341static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname)
345 set_process_in_progress_and_wait_safe(TRUE, ui);
347 gchar *filename = ui_fname->fname;
348 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
351 gint err = mp3splt_import(ui->mp3splt_state, AUDACITY_LABELS_IMPORT, filename);
358 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_audacity_labels_splitpoints_end,
364static gboolean add_plugin_internal_cue_splitpoints_end(
ui_with_err *ui_err)
367 gint err = ui_err->err;
376 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
383static gpointer add_plugin_internal_cue_splitpoints(
ui_with_fname *ui_fname)
387 set_process_in_progress_and_wait_safe(TRUE, ui);
391 gchar *filename = ui_fname->fname;
392 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
395 gint err = mp3splt_import(ui->mp3splt_state, PLUGIN_INTERNAL_IMPORT, filename);
402 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_plugin_internal_cue_splitpoints_end,
408static gboolean add_cddb_splitpoints_end(
ui_with_err *ui_err)
411 gint err = ui_err->err;
420 set_process_in_progress_and_wait_safe(FALSE, ui);
432 set_process_in_progress_and_wait_safe(TRUE, ui);
436 gchar *filename = ui_fname->fname;
437 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
440 gint err = mp3splt_import(ui->mp3splt_state, CDDB_IMPORT, filename);
447 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cddb_splitpoints_end,
453static gboolean add_cue_splitpoints_end(
ui_with_err *ui_err)
457 if (!ui->importing_cue_from_configuration_directory)
461 splt_code err = SPLT_OK;
462 splt_points *points = mp3splt_get_splitpoints(ui->mp3splt_state, &err);
466 mp3splt_points_init_iterator(points);
467 const splt_point *point = NULL;
468 while ((point = mp3splt_points_next(points)))
470 long point_value = mp3splt_point_get_value(point);
471 if (point_value > max_point) { max_point = point_value; }
475 splt_point *splitpoint = mp3splt_point_new(max_point + (100 * 60 * 100), NULL);
476 mp3splt_point_set_name(splitpoint, _(
"--- last cue splitpoint ---"));
477 mp3splt_append_splitpoint(ui->mp3splt_state, splitpoint);
481 ui->importing_cue_from_configuration_directory = FALSE;
484 if (ui_err->err >= 0)
490 mp3splt_set_int_option(ui->mp3splt_state,
491 SPLT_OPT_CUE_SET_SPLITPOINT_NAMES_FROM_REM_NAME, SPLT_FALSE);
496 const gchar *filename_to_split = mp3splt_get_filename_to_split(ui->mp3splt_state);
500 file_chooser_ok_event(filename_to_split, ui);
503 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
515 set_process_in_progress_and_wait_safe(TRUE, ui);
519 gchar *filename = ui_fname->fname;
520 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
523 mp3splt_set_filename_to_split(ui->mp3splt_state, NULL);
525 gint err = mp3splt_import(ui->mp3splt_state, CUE_IMPORT, filename);
532 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cue_splitpoints_end,
void update_splitpoints_from_mp3splt_state(ui_state *ui)
updates the current splitpoints in ui->mp3splt_state
void import_file(gchar *filename, ui_state *ui, gboolean force_import_cue)
Handles the import of an input file (audio or splitpoint)
void import_event(GtkWidget *widget, ui_state *ui)
What happens if the "Import" button is pressed.
void print_status_bar_confirmation(gint error, ui_state *ui)
Output an error message from libmp3splt to the status bar.
void remove_status_message(gui_state *gui)
Removes status bar message.
void update_output_options(ui_state *ui, gboolean is_checked_output_radio_box, gchar *output_format)
Update the output options.
gboolean get_checked_output_radio_box(ui_state *ui)
returns the checked output radio box
gint file_exists(const gchar *fname)
check if specified file exists