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) ||
100 (strstr(ext_str->str,
".FLAC") != NULL))
102 file_chooser_ok_event(filename, ui);
105 else if ((strstr(ext_str->str,
".CUE") != NULL))
109 ui_fname->fname = strdup(filename);
110 create_thread_with_fname((GThreadFunc)add_cue_splitpoints, ui_fname);
112 else if ((strstr(ext_str->str,
".CDDB") != NULL))
116 ui_fname->fname = strdup(filename);
117 create_thread_with_fname((GThreadFunc)add_cddb_splitpoints, ui_fname);
119 else if ((strstr(ext_str->str,
".TXT") != NULL))
123 ui_fname->fname = strdup(filename);
124 create_thread_with_fname((GThreadFunc)add_audacity_labels_splitpoints, ui_fname);
129 g_string_free(ext_str, FALSE);
133 void import_cue_file_from_the_configuration_directory(
ui_state *ui)
135 gchar *configuration_directory = get_configuration_directory();
137 gsize filename_size = strlen(configuration_directory) + 20;
138 gchar *splitpoints_cue_filename = g_malloc(filename_size *
sizeof(gchar));
139 g_snprintf(splitpoints_cue_filename, filename_size,
"%s%s%s", configuration_directory,
140 G_DIR_SEPARATOR_S,
"splitpoints.cue");
144 ui->importing_cue_from_configuration_directory = TRUE;
146 mp3splt_set_int_option(ui->mp3splt_state,
147 SPLT_OPT_CUE_SET_SPLITPOINT_NAMES_FROM_REM_NAME, SPLT_TRUE);
151 g_free(configuration_directory);
152 g_free(splitpoints_cue_filename);
155 void import_files_to_batch_and_free(GSList *files,
ui_state *ui)
157 GSList *current_file = files;
160 gchar *filename = current_file->data;
163 int num_of_files_found = 0;
165 char **splt_filenames =
166 mp3splt_find_filenames(ui->mp3splt_state, filename, &num_of_files_found, &err);
171 for (i = 0;i < num_of_files_found;i++)
173 if (!splt_filenames[i])
178 multiple_files_add_filename(splt_filenames[i], ui);
180 free(splt_filenames[i]);
181 splt_filenames[i] = NULL;
184 free(splt_filenames);
185 splt_filenames = NULL;
191 current_file = g_slist_next(current_file);
196 if (ui->infos->multiple_files_tree_number > 0)
198 gtk_widget_set_sensitive(ui->gui->multiple_files_remove_all_files_button, TRUE);
203 static void set_import_filters(GtkFileChooser *chooser)
205 GtkFileFilter *all_filter = gtk_file_filter_new();
206 gtk_file_filter_set_name(GTK_FILE_FILTER(all_filter),
207 _(
"CDDB (*.cddb), CUE (*.cue), Audacity labels (*.txt)"));
209 GList *filters = NULL;
211 build_import_filter(chooser, _(
"CDDB files (*.cddb)"),
"*.cddb",
"*.CDDB",
212 &filters, all_filter);
213 build_import_filter(chooser, _(
"CUE files (*.cue)"),
"*.cue",
"*.CUE",
214 &filters, all_filter);
215 build_import_filter(chooser, _(
"Audacity labels files (*.txt)"),
"*.txt",
"*.TXT",
216 &filters, all_filter);
217 build_import_filter(chooser, _(
"All files"),
"*", NULL, &filters, NULL);
219 gtk_file_chooser_add_filter(chooser, all_filter);
222 for (iter = filters; iter != NULL; iter = g_list_next(iter))
224 gtk_file_chooser_add_filter(chooser, iter->data);
228 static void build_import_filter(GtkFileChooser *chooser,
229 const gchar *filter_name,
const gchar *filter_pattern,
230 const gchar *filter_pattern_upper,
231 GList **filters, GtkFileFilter *all_filter)
233 GtkFileFilter *filter = gtk_file_filter_new();
234 gtk_file_filter_set_name(GTK_FILE_FILTER(filter), filter_name);
235 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern);
237 if (filter_pattern_upper)
239 gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), filter_pattern_upper);
244 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern);
245 if (filter_pattern_upper)
247 gtk_file_filter_add_pattern(GTK_FILE_FILTER(all_filter), filter_pattern_upper);
251 *filters = g_list_append(*filters, filter);
254 static gboolean add_audacity_labels_splitpoints_end(
ui_with_err *ui_err)
257 gint err = ui_err->err;
266 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
273 static gpointer add_audacity_labels_splitpoints(
ui_with_fname *ui_fname)
277 set_process_in_progress_and_wait_safe(TRUE, ui);
279 gchar *filename = ui_fname->fname;
282 gint err = mp3splt_import(ui->mp3splt_state, AUDACITY_LABELS_IMPORT, filename);
289 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_audacity_labels_splitpoints_end,
295 static gboolean add_cddb_splitpoints_end(
ui_with_err *ui_err)
298 gint err = ui_err->err;
307 set_process_in_progress_and_wait_safe(FALSE, ui);
315 static gpointer add_cddb_splitpoints(
ui_with_fname *ui_fname)
319 set_process_in_progress_and_wait_safe(TRUE, ui);
321 gchar *filename = ui_fname->fname;
328 gint err = mp3splt_import(ui->mp3splt_state, CDDB_IMPORT, filename);
335 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cddb_splitpoints_end,
341 static gboolean add_cue_splitpoints_end(
ui_with_err *ui_err)
345 if (!ui->importing_cue_from_configuration_directory)
347 splt_point *splitpoint = mp3splt_point_new(600000 - 1, NULL);
348 mp3splt_point_set_name(splitpoint, _(
"--- last cue splitpoint ---"));
349 mp3splt_append_splitpoint(ui->mp3splt_state, splitpoint);
353 ui->importing_cue_from_configuration_directory = FALSE;
356 if (ui_err->err >= 0)
365 const gchar *filename_to_split = mp3splt_get_filename_to_split(ui->mp3splt_state);
368 file_chooser_ok_event(filename_to_split, ui);
371 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
373 mp3splt_set_int_option(ui->mp3splt_state,
374 SPLT_OPT_CUE_SET_SPLITPOINT_NAMES_FROM_REM_NAME, SPLT_FALSE);
386 set_process_in_progress_and_wait_safe(TRUE, ui);
388 gchar *filename = ui_fname->fname;
395 mp3splt_set_filename_to_split(ui->mp3splt_state, NULL);
397 gint err = mp3splt_import(ui->mp3splt_state, CUE_IMPORT, filename);
404 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)add_cue_splitpoints_end,
void update_output_options(ui_state *ui)
Update the output options.
void import_event(GtkWidget *widget, ui_state *ui)
What happens if the "Import" button is pressed.
void update_splitpoints_from_mp3splt_state(ui_state *ui)
updates the current splitpoints in ui->mp3splt_state
void print_status_bar_confirmation(gint error, ui_state *ui)
Output an error message from libmp3splt to the status bar.
gint file_exists(const gchar *fname)
check if specified file exists
void import_file(gchar *filename, ui_state *ui)
Handles the import of an input file (audio or splitpoint)
void remove_status_message(gui_state *gui)
Removes status bar message.