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);
158 gint split_file_mode = get_split_file_mode_safe(ui);
160 lock_mutex(&ui->variables_mutex);
162 unlock_mutex(&ui->variables_mutex);
173 split_file_mode == FILE_MODE_MULTIPLE))
175 mp3splt_erase_all_tags(ui->mp3splt_state, &err);
179 print_status_bar_confirmation_in_idle(err, ui);
182 gchar *format = strdup(gtk_entry_get_text(GTK_ENTRY(ui->gui->output_entry)));
185 mp3splt_set_oformat(ui->mp3splt_state, format, &err);
194 split_file_mode == FILE_MODE_SINGLE)
211 GPtrArray *files_to_split = ui->files_to_split;
212 gint length = files_to_split->len;
214 for (i = 0;i < length;i++)
216 gchar *filename = g_ptr_array_index(files_to_split, i);
224 gint err = mp3splt_split(ui->mp3splt_state);
225 print_status_bar_confirmation_in_idle(err, ui);
228 mp3splt_erase_all_tags(ui->mp3splt_state, &err);
229 print_status_bar_confirmation_in_idle(err, ui);
233 print_status_bar_confirmation_in_idle(err, ui);
235 if (get_stop_split_safe(ui))
237 set_stop_split_safe(FALSE, ui);
248 gdk_threads_add_idle_full(G_PRIORITY_HIGH_IDLE, (GSourceFunc)split_collected_files_end, ui_err, NULL);
253 GThread *create_thread(GThreadFunc func,
ui_state *ui)
255 mp3splt_set_int_option(ui->mp3splt_state,
SPLT_OPT_DEBUG_MODE, ui->infos->debug_is_active);
256 return g_thread_create(func, ui, TRUE, NULL);
259 GThread *create_thread_with_fname(GThreadFunc func,
ui_with_fname *ui_fname)
261 mp3splt_set_int_option(ui_fname->ui->mp3splt_state,
SPLT_OPT_DEBUG_MODE, ui_fname->ui->infos->debug_is_active);
262 return g_thread_create(func, ui_fname, TRUE, NULL);
275 gboolean exit_application(GtkWidget *widget, GdkEvent *event, gpointer data)
279 ui_save_preferences(NULL, ui);
281 if (get_is_splitting_safe(ui))
283 lmanager_stop_split(ui);
295 void exit_application_bis(GtkWidget *widget, gpointer data)
297 exit_application(widget, NULL, data);
301 static gboolean sigint_called = FALSE;
302 static void sigint_handler(gint sig)
306 sigint_called = TRUE;
307 exit_application(NULL, NULL, ui);
312 static void sigpipe_handler(gint sig)
315 ui->infos->selected_player == PLAYER_SNACKAMP)
322 static void register_application_signals()
324 signal(SIGINT, sigint_handler);
326 signal(SIGPIPE, sigpipe_handler);
330 static void init_i18n_and_plugin_paths(gchar *argv[],
ui_state *ui)
332 setlocale(LC_ALL,
"");
333 textdomain(
"mp3splt-gtk");
336 char mp3splt_uninstall_file[2048] = {
'\0' };
337 DWORD dwType, dwSize =
sizeof(mp3splt_uninstall_file) - 1;
338 SHGetValue(HKEY_LOCAL_MACHINE,
339 TEXT(
"SOFTWARE\\mp3splt-gtk"),
340 TEXT(
"UninstallString"),
342 mp3splt_uninstall_file,
345 gchar *end = strrchr(mp3splt_uninstall_file, SPLT_DIRCHAR);
346 if (end) { *end =
'\0'; }
348 gchar *executable_dir = NULL;
349 gchar *executable = strdup(argv[0]);
351 end = strrchr(executable, SPLT_DIRCHAR);
355 executable_dir = executable;
359 if (mp3splt_uninstall_file[0] !=
'\0')
361 executable_dir = mp3splt_uninstall_file;
365 bindtextdomain(MP3SPLT_LIB_GETTEXT_DOMAIN,
"translations");
366 bindtextdomain(
"mp3splt-gtk",
"translations");
368 bindtextdomain(
"mp3splt-gtk", LOCALEDIR);
370 bind_textdomain_codeset(
"mp3splt-gtk",
"UTF-8");
373 if (executable != NULL)
375 if (executable[0] !=
'\0')
377 g_setenv(
"GST_PLUGIN_PATH",
".\\", TRUE);
378 mp3splt_append_plugins_scan_dir(ui->mp3splt_state, executable);
385 static void parse_command_line_options(gint argc, gchar * argv[],
ui_state *ui)
389 while ((option = getopt(argc, argv,
"d:")) != -1)
394 fprintf(stdout, _(
"Setting the output directory to %s.\n"), optarg);
403 ui_fail(ui,
"Error: The specified output directory is inaccessible!\n");
408 ui_fail(ui, _(
"Option -%c requires an argument.\n"), optopt);
409 else if (isprint(optopt))
410 ui_fail(ui, _(
"Unknown option `-%c'.\n"), optopt, NULL);
412 ui_fail(ui, _(
"Unknown option character `\\x%x'.\n"), optopt);
426 ui_fail(ui, _(
"Cannot open input file %s\n"), argv[optind]);
430 char *input_filename = realpath(argv[optind], NULL);
432 free(input_filename);
440 static void set_language_env_variable_from_preferences()
442 GKeyFile *key_file = g_key_file_new();
445 g_key_file_load_from_file(key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
453 gchar *lang = g_key_file_get_string(key_file,
"general",
"language", NULL);
455 gchar lang_env[32] = {
'\0' };
456 g_snprintf(lang_env, 32,
"LANG=%s", lang);
460 g_key_file_free(key_file);
487 gint
main(gint argc, gchar *argv[], gchar **envp)
494 register_application_signals();
495 init_i18n_and_plugin_paths(argv, ui);
497 gtk_init(&argc, &argv);
499 lmanager_init_and_find_plugins(ui);
502 set_language_env_variable_from_preferences();
505 create_application(ui);
507 parse_command_line_options(argc, argv, ui);
513 gint return_code = ui->return_code;