40 #include "mp3splt-gtk.h"
44 static gpointer split_collected_files(
ui_state *ui);
45 static gboolean collect_files_to_split(
ui_state *ui);
49 set_is_splitting_safe(TRUE, ui);
50 if (!collect_files_to_split(ui))
52 set_is_splitting_safe(FALSE, ui);
55 set_is_splitting_safe(FALSE, ui);
57 create_thread((GThreadFunc)split_collected_files, ui);
60 static gboolean collect_files_to_split(
ui_state *ui)
63 GPtrArray *files_to_split = ui->files_to_split;
64 if (files_to_split && files_to_split->len > 0)
66 gint length = files_to_split->len;
68 for (i = 0;i < length;i++)
70 g_free(g_ptr_array_index(files_to_split, i));
72 g_ptr_array_free(ui->files_to_split, TRUE);
74 ui->files_to_split = g_ptr_array_new();
77 if (get_split_file_mode_safe(ui) == FILE_MODE_SINGLE)
81 else if (ui->infos->multiple_files_tree_number > 0)
83 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(ui->gui->multiple_files_tree));
85 while (row_number < ui->infos->multiple_files_tree_number)
87 GtkTreePath *path = gtk_tree_path_new_from_indices(row_number ,-1);
90 gtk_tree_model_get_iter(model, &iter, path);
92 gchar *filename = NULL;
93 gtk_tree_model_get(model, &iter, MULTIPLE_COL_FILENAME, &filename, -1);
95 g_ptr_array_add(ui->files_to_split, filename);
109 static gboolean split_collected_files_end(
ui_with_err *ui_err)
111 gint err = ui_err->err;
114 gtk_widget_set_sensitive(ui->gui->cancel_button, FALSE);
118 gtk_progress_bar_set_fraction(ui->gui->percent_progress_bar, 1.0);
119 gtk_progress_bar_set_text(ui->gui->percent_progress_bar, _(
" finished"));
122 set_is_splitting_safe(FALSE, ui);
124 set_process_in_progress_and_wait_safe(FALSE, ui_err->ui);
131 static gint get_stop_split_safe(
ui_state *ui)
133 lock_mutex(&ui->variables_mutex);
134 gint stop_split = ui->status->stop_split;
135 unlock_mutex(&ui->variables_mutex);
140 static gpointer split_collected_files(
ui_state *ui)
142 set_process_in_progress_and_wait_safe(TRUE, ui);
146 gtk_widget_set_sensitive(ui->gui->cancel_button, TRUE);
150 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, SPLT_OUTPUT_DEFAULT);
153 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, SPLT_OUTPUT_FORMAT);
158 gint split_file_mode = get_split_file_mode_safe(ui);
160 lock_mutex(&ui->variables_mutex);
162 unlock_mutex(&ui->variables_mutex);
168 gint err = mp3splt_erase_all_splitpoints(ui->mp3splt_state);
169 err = mp3splt_erase_all_tags(ui->mp3splt_state);
171 gint split_mode = mp3splt_get_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, &err);
172 print_status_bar_confirmation_in_idle(err, ui);
175 gchar *format = strdup(gtk_entry_get_text(GTK_ENTRY(ui->gui->output_entry)));
178 err = mp3splt_set_oformat(ui->mp3splt_state, format);
186 if (mp3splt_get_int_option(ui->mp3splt_state, SPLT_OPT_SPLIT_MODE, &err) == SPLT_OPTION_NORMAL_MODE &&
187 split_file_mode == FILE_MODE_SINGLE)
189 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, SPLT_OUTPUT_CUSTOM);
192 if (split_mode == SPLT_OPTION_NORMAL_MODE)
197 err = mp3splt_remove_tags_of_skippoints(ui->mp3splt_state);
198 print_status_bar_confirmation_in_idle(err, ui);
203 gint output_filenames = mp3splt_get_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, &err);
207 GPtrArray *files_to_split = ui->files_to_split;
208 gint length = files_to_split->len;
210 for (i = 0;i < length;i++)
212 gchar *filename = g_ptr_array_index(files_to_split, i);
218 mp3splt_set_filename_to_split(ui->mp3splt_state, filename);
220 gint err = mp3splt_split(ui->mp3splt_state);
221 print_status_bar_confirmation_in_idle(err, ui);
223 err = mp3splt_erase_all_tags(ui->mp3splt_state);
224 print_status_bar_confirmation_in_idle(err, ui);
226 err = mp3splt_erase_all_splitpoints(ui->mp3splt_state);
227 print_status_bar_confirmation_in_idle(err, ui);
229 if (get_stop_split_safe(ui))
231 set_stop_split_safe(FALSE, ui);
236 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_OUTPUT_FILENAMES, output_filenames);
242 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)split_collected_files_end, ui_err, NULL);
247 GThread *create_thread(GThreadFunc func,
ui_state *ui)
249 mp3splt_set_int_option(ui->mp3splt_state, SPLT_OPT_DEBUG_MODE, ui->infos->debug_is_active);
250 return g_thread_create(func, ui, TRUE, NULL);
253 GThread *create_thread_with_fname(GThreadFunc func,
ui_with_fname *ui_fname)
255 mp3splt_set_int_option(ui_fname->ui->mp3splt_state, SPLT_OPT_DEBUG_MODE, ui_fname->ui->infos->debug_is_active);
256 return g_thread_create(func, ui_fname, TRUE, NULL);
269 gboolean exit_application(GtkWidget *widget, GdkEvent *event, gpointer data)
273 ui_save_preferences(NULL, ui);
275 if (get_is_splitting_safe(ui))
277 lmanager_stop_split(ui);
291 void exit_application_bis(GtkWidget *widget, gpointer data)
293 exit_application(widget, NULL, data);
296 static gboolean sigint_called = FALSE;
297 static void sigint_handler(gint sig)
301 sigint_called = TRUE;
302 exit_application(NULL, NULL, ui);
307 static void sigpipe_handler(gint sig)
310 ui->infos->selected_player == PLAYER_SNACKAMP)
317 static void register_application_signals()
319 signal(SIGINT, sigint_handler);
321 signal(SIGPIPE, sigpipe_handler);
325 static void init_i18n_and_plugin_paths(gchar *argv[],
ui_state *ui)
327 setlocale(LC_ALL,
"");
328 textdomain(
"mp3splt-gtk");
331 char mp3splt_uninstall_file[2048] = {
'\0' };
332 DWORD dwType, dwSize =
sizeof(mp3splt_uninstall_file) - 1;
333 SHGetValue(HKEY_LOCAL_MACHINE,
334 TEXT(
"SOFTWARE\\mp3splt-gtk"),
335 TEXT(
"UninstallString"),
337 mp3splt_uninstall_file,
340 gchar *end = strrchr(mp3splt_uninstall_file, SPLT_DIRCHAR);
341 if (end) { *end =
'\0'; }
343 gchar *executable_dir = NULL;
344 gchar *executable = strdup(argv[0]);
346 end = strrchr(executable, SPLT_DIRCHAR);
350 executable_dir = executable;
354 if (mp3splt_uninstall_file[0] !=
'\0')
356 executable_dir = mp3splt_uninstall_file;
360 bindtextdomain(LIBMP3SPLT_WITH_SONAME,
"translations");
361 bindtextdomain(
"mp3splt-gtk",
"translations");
363 bindtextdomain(
"mp3splt-gtk", LOCALEDIR);
365 bind_textdomain_codeset(
"mp3splt-gtk",
"UTF-8");
368 if (executable != NULL)
370 if (executable[0] !=
'\0')
372 g_setenv(
"GST_PLUGIN_PATH",
".\\", TRUE);
373 mp3splt_append_plugins_scan_dir(ui->mp3splt_state, executable);
380 static void parse_command_line_options(gint argc, gchar * argv[],
ui_state *ui)
384 while ((option = getopt(argc, argv,
"d:")) != -1)
389 fprintf(stdout, _(
"Setting the output directory to %s.\n"), optarg);
390 set_output_directory_and_update_ui((gchar *)optarg, ui);
398 ui_fail(ui,
"Error: The specified output directory is inaccessible!\n");
403 ui_fail(ui, _(
"Option -%c requires an argument.\n"), optopt);
404 else if (isprint(optopt))
405 ui_fail(ui, _(
"Unknown option `-%c'.\n"), optopt, NULL);
407 ui_fail(ui, _(
"Unknown option character `\\x%x'.\n"), optopt);
421 ui_fail(ui, _(
"Cannot open input file %s\n"), argv[optind]);
425 char *input_filename = realpath(argv[optind], NULL);
427 free(input_filename);
434 static void set_language_env_variable_from_preferences()
437 GKeyFile *key_file = g_key_file_new();
440 g_key_file_load_from_file(key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
448 gchar *lang = g_key_file_get_string(key_file,
"general",
"language", NULL);
450 gchar lang_env[32] = {
'\0' };
451 g_snprintf(lang_env, 32,
"LANG=%s", lang);
455 g_key_file_free(key_file);
482 gint
main(gint argc, gchar *argv[], gchar **envp)
489 register_application_signals();
490 init_i18n_and_plugin_paths(argv, ui);
492 gtk_init(&argc, &argv);
494 lmanager_init_and_find_plugins(ui);
497 set_language_env_variable_from_preferences();
500 create_application(ui);
502 import_cue_file_from_the_configuration_directory(ui);
504 parse_command_line_options(argc, argv, ui);
510 gint return_code = ui->return_code;
gchar * get_preferences_filename()
Get the name of the preferences file.
void put_splitpoints_and_tags_in_mp3splt_state(splt_state *state, ui_state *ui)
puts the splitpoints into the state
gchar * get_input_filename(gui_state *gui)
Get the name of the input file.
gint player_quit(ui_state *ui)
quits the player
gint player_is_running(ui_state *ui)
returns FALSE if the player is not running, else TRUE
gint file_exists(const gchar *fname)
check if specified file exists
void print_processing_file(gchar *filename, ui_state *ui)
Issues the message "Processing file <filename>" into the message bar.
gchar * get_output_directory(ui_state *ui)
Get the name of the output directory.
void put_status_message(const gchar *text, ui_state *ui)
Output a info message to the status message bar.
gint disconnect_snackamp(ui_state *ui)
disconnecting with the player possibly returns an error
void remove_all_split_rows(ui_state *ui)
removes all rows from the split files table
gboolean get_checked_output_radio_box(ui_state *ui)
returns the checked output radio box
void put_options_from_preferences(ui_state *ui)
Update the ui->mp3splt_state structure.
void import_file(gchar *filename, ui_state *ui)
Handles the import of an input file (audio or splitpoint)
gint main(gint argc, gchar *argv[], gchar **envp)
The traditional C main function.
gint directory_exists(const gchar *directory)
check if specified directory exists