43static void set_import_filters(GtkFileChooser *chooser);
44static void build_import_filter(GtkFileChooser *chooser,
45 const gchar *filter_name,
const gchar *filter_pattern,
46 const gchar *filter_pattern_upper,
47 GList **filters, GtkFileFilter *all_filter);
48static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname);
51static gpointer add_plugin_internal_cue_splitpoints(
ui_with_fname *ui_fname);
56 GtkWidget *file_chooser =
57 gtk_file_chooser_dialog_new(_(
"Choose file to import"),
59 GTK_FILE_CHOOSER_ACTION_OPEN,
66 wh_set_browser_directory_handler(ui, file_chooser);
67 set_import_filters(GTK_FILE_CHOOSER(file_chooser));
69 if (gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT)
71 gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
81 gtk_widget_destroy(file_chooser);
88 ui_fname->fname = strdup(filename);
90 ui_fname->show_errors = show_errors;
92 const gchar *output_format = gtk_entry_get_text(GTK_ENTRY(ui->gui->output_entry));
93 if (output_format != NULL)
95 ui_fname->output_format = g_strdup(output_format);
107 if (filename == NULL)
112 gchar *ext = strrchr(filename,
'.');
113 GString *ext_str = g_string_new(ext);
115 g_string_ascii_up(ext_str);
117 if (!force_import_cue &&
118 ((strstr(ext_str->str,
".MP3") != NULL) ||
119 (strstr(ext_str->str,
".OGG") != NULL) ||
120 (strstr(ext_str->str,
".FLAC") != NULL)))
122 file_chooser_ok_event(filename, ui);
125 else if ((strstr(ext_str->str,
".CUE") != NULL))
127 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename, show_errors);
128 create_thread_and_unref((GThreadFunc)add_cue_splitpoints,
129 (gpointer) ui_fname, ui,
"import_cue");
131 else if ((strstr(ext_str->str,
".CDDB") != NULL))
133 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename, show_errors);
134 create_thread_and_unref((GThreadFunc)add_cddb_splitpoints,
135 (gpointer) ui_fname, ui,
"import_cddb");
137 else if ((strstr(ext_str->str,
".TXT") != NULL))
139 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename, show_errors);
140 create_thread_and_unref((GThreadFunc)add_audacity_labels_splitpoints,
141 (gpointer) ui_fname, ui,
"import_audacity");
145 ui_with_fname *ui_fname = create_ui_with_fname(ui, filename, show_errors);
146 create_thread_and_unref((GThreadFunc)add_plugin_internal_cue_splitpoints,
147 (gpointer) ui_fname, ui,
"import_internal");
152 g_string_free(ext_str, FALSE);
156void import_cue_file_from_the_configuration_directory(
ui_state *ui)
158 gchar *configuration_directory = get_configuration_directory();
160 gsize filename_size = strlen(configuration_directory) + 20;
161 gchar *splitpoints_cue_filename = g_malloc(filename_size *
sizeof(gchar));
162 g_snprintf(splitpoints_cue_filename, filename_size,
"%s%s%s", configuration_directory,
163 G_DIR_SEPARATOR_S,
"splitpoints.cue");
167 ui->importing_cue_from_configuration_directory = TRUE;
169 mp3splt_set_int_option(ui->mp3splt_state,
170 SPLT_OPT_CUE_SET_SPLITPOINT_NAMES_FROM_REM_NAME, SPLT_TRUE);
171 import_file(splitpoints_cue_filename, ui, FALSE, FALSE);
174 g_free(configuration_directory);
175 g_free(splitpoints_cue_filename);
181 char **splt_filenames = ui_wf->filenames;
184 for (i = 0;i < ui_wf->num_of_filenames;i++)
186 if (!splt_filenames[i])
191 multiple_files_add_filename(splt_filenames[i], ui);
193 free(splt_filenames[i]);
194 splt_filenames[i] = NULL;
197 free(splt_filenames);
198 splt_filenames = NULL;
205static gboolean import_files_to_batch_end(
ui_state *ui)
207 if (ui->infos->multiple_files_tree_number > 0)
209 gtk_widget_set_sensitive(ui->gui->multiple_files_remove_all_files_button, TRUE);
212 set_process_in_progress_and_wait_safe(FALSE, ui);
217static gpointer import_files_to_batch_thread(
ui_with_list *ui_wl)
221 set_process_in_progress_and_wait_safe(TRUE, ui);
223 GSList *current_file = ui_wl->list;
226 gchar *filename = current_file->data;
229 int num_of_files_found = 0;
231 char **splt_filenames =
232 mp3splt_find_filenames(ui->mp3splt_state, filename, &num_of_files_found, &err);
238 ui_wf->filenames = splt_filenames;
239 ui_wf->num_of_filenames = num_of_files_found;
241 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)import_files_to_batch, ui_wf, NULL);
247 current_file = g_slist_next(current_file);
250 g_slist_free(ui_wl->list);
254 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)import_files_to_batch_end, ui, NULL);
259void import_files_to_batch_and_free(GSList *files,
ui_state *ui)
265 create_thread_and_unref((GThreadFunc)import_files_to_batch_thread,
266 (gpointer) ui_wl, ui,
"import_to_batch");
270static void set_import_filters(GtkFileChooser *chooser)
272 GtkFileFilter *all_filter = gtk_file_filter_new();
273 gtk_file_filter_set_name(GTK_FILE_FILTER(all_filter),
274 _(
"CDDB (*.cddb), CUE (*.cue), Audacity labels (*.txt), internal sheet (*.flac), chapters (*.mp3)"));
276 GList *filters = NULL;
278 build_import_filter(chooser, _(
"CDDB files (*.cddb)"),
"*.cddb",
"*.CDDB",
279 &filters, all_filter);
280 build_import_filter(chooser, _(
"CUE files (*.cue)"),
"*.cue",
"*.CUE",
281 &filters, all_filter);
282 build_import_filter(chooser, _(
"Audacity labels files (*.txt)"),
"*.txt",
"*.TXT",
283 &filters, all_filter);
284 build_import_filter(chooser, _(
"FLAC internal sheet (*.flac)"),
"*.flac",
"*.FLAC",
285 &filters, all_filter);
286 build_import_filter(chooser, _(
"ID3v2 chapters (*.mp3)"),
"*.mp3",
"*.MP3",
287 &filters, all_filter);
288 build_import_filter(chooser, _(
"All files"),
"*", NULL, &filters, NULL);
290 gtk_file_chooser_add_filter(chooser, all_filter);
293 for (iter = filters; iter != NULL; iter = g_list_next(iter))
295 gtk_file_chooser_add_filter(chooser, iter->data);
299static void build_import_filter(GtkFileChooser *chooser,
300 const gchar *filter_name,
const gchar *filter_pattern,
301 const gchar *filter_pattern_upper,
302 GList **filters, GtkFileFilter *all_filter)
304 GtkFileFilter *filter = gtk_file_filter_new();
305 gtk_file_filter_set_name(GTK_FILE_FILTER(filter), filter_name);
306 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern);
308 if (filter_pattern_upper)
310 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern_upper);
315 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern);
316 if (filter_pattern_upper)
318 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern_upper);
322 *filters = g_list_append(*filters, filter);
325static gboolean add_audacity_labels_splitpoints_end(
ui_with_err *ui_err)
328 gint err = ui_err->err;
337 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
344static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname)
348 set_process_in_progress_and_wait_safe(TRUE, ui);
350 gchar *filename = ui_fname->fname;
351 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
354 gint err = mp3splt_import(ui->mp3splt_state, AUDACITY_LABELS_IMPORT, filename);
361 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_audacity_labels_splitpoints_end,
367static gboolean add_plugin_internal_cue_splitpoints_end(
ui_with_err *ui_err)
370 gint err = ui_err->err;
379 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
386static gpointer add_plugin_internal_cue_splitpoints(
ui_with_fname *ui_fname)
390 set_process_in_progress_and_wait_safe(TRUE, ui);
394 gchar *filename = ui_fname->fname;
395 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
398 gint err = mp3splt_import(ui->mp3splt_state, PLUGIN_INTERNAL_IMPORT, filename);
405 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_plugin_internal_cue_splitpoints_end,
411static gboolean add_cddb_splitpoints_end(
ui_with_err *ui_err)
414 gint err = ui_err->err;
423 set_process_in_progress_and_wait_safe(FALSE, ui);
435 set_process_in_progress_and_wait_safe(TRUE, ui);
439 gchar *filename = ui_fname->fname;
440 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
443 gint err = mp3splt_import(ui->mp3splt_state, CDDB_IMPORT, filename);
450 add_idle(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cddb_splitpoints_end,
456static gboolean add_cue_splitpoints_end(
ui_with_err *ui_err)
460 if (!ui->importing_cue_from_configuration_directory)
464 splt_code err = SPLT_OK;
465 splt_points *points = mp3splt_get_splitpoints(ui->mp3splt_state, &err);
469 mp3splt_points_init_iterator(points);
470 const splt_point *point = NULL;
471 while ((point = mp3splt_points_next(points)))
473 long point_value = mp3splt_point_get_value(point);
474 if (point_value > max_point) { max_point = point_value; }
478 splt_point *splitpoint = mp3splt_point_new(max_point + (100 * 60 * 100), NULL);
479 mp3splt_point_set_name(splitpoint, _(
"--- last cue splitpoint ---"));
480 mp3splt_append_splitpoint(ui->mp3splt_state, splitpoint);
484 ui->importing_cue_from_configuration_directory = FALSE;
487 if (ui_err->err >= 0)
492 if (ui_err->show_errors) {
499 mp3splt_set_int_option(ui->mp3splt_state,
500 SPLT_OPT_CUE_SET_SPLITPOINT_NAMES_FROM_REM_NAME, SPLT_FALSE);
505 const gchar *filename_to_split = mp3splt_get_filename_to_split(ui->mp3splt_state);
509 file_chooser_ok_event(filename_to_split, ui);
512 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
524 set_process_in_progress_and_wait_safe(TRUE, ui);
528 gchar *filename = ui_fname->fname;
529 if (ui_fname->output_format) { g_free(ui_fname->output_format); }
532 mp3splt_set_filename_to_split(ui->mp3splt_state, NULL);
534 gint err = mp3splt_import(ui->mp3splt_state, CUE_IMPORT, filename);
540 ui_err->show_errors = ui_fname->show_errors;
542 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, gboolean show_errors)
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 put_status_message(const gchar *text, ui_state *ui)
Output a info message to the status message bar.
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