46 #include <glib/gi18n.h>
47 #include <glib/gstdio.h>
52 #include "player_tab.h"
53 #include "preferences_tab.h"
54 #include "special_split.h"
55 #include "combo_helper.h"
56 #include "radio_helper.h"
57 #include "ui_manager.h"
60 extern GtkWidget *player_refresh_rate_spinner;
61 extern gint selected_player;
65 extern GtkWidget *file_mode_radio_button;
69 extern GtkWidget *names_from_filename;
71 extern GtkWidget *spinner_adjust_offset;
72 extern GtkWidget *spinner_adjust_threshold;
73 extern GtkWidget *create_dirs_from_output_files;
74 extern GtkWidget *spinner_time;
75 extern GtkWidget *spinner_equal_tracks;
78 extern GtkWidget *output_label;
81 extern GtkWidget *tags_version_radio;
86 extern GtkComboBox *artist_text_properties_combo;
87 extern GtkComboBox *album_text_properties_combo;
88 extern GtkComboBox *title_text_properties_combo;
89 extern GtkComboBox *comment_text_properties_combo;
90 extern GtkComboBox *genre_combo;
91 extern GtkWidget *comment_tag_entry;
92 extern GtkWidget *regex_entry;
93 extern GtkWidget *test_regex_fname_entry;
107 gchar mp3splt_dir[14] =
".mp3splt-gtk";
114 gchar *home_dir = g_strdup(g_get_home_dir());
119 if (home_dir[strlen(home_dir)-1] ==
'\\')
121 home_dir[strlen(home_dir)-1] =
'\0';
125 gchar *mp3splt_dir_with_path = NULL;
126 gint malloc_number = strlen(home_dir) + strlen(mp3splt_dir)+2;
127 mp3splt_dir_with_path = malloc(malloc_number *
sizeof(gchar *));
128 g_snprintf(mp3splt_dir_with_path, malloc_number,
129 "%s%s%s", home_dir,G_DIR_SEPARATOR_S,
138 gint fname_malloc_number = strlen(mp3splt_dir_with_path)+30;
139 gchar *filename = malloc(fname_malloc_number*
sizeof(gchar *));
141 status = g_stat(mp3splt_dir_with_path, &buffer);
143 if ((status != 0) || (S_ISDIR(buffer.st_mode) == 0))
146 if ((status == 0) && (S_ISREG(buffer.st_mode) != 0))
149 malloc_number = strlen(mp3splt_dir_with_path)+5;
150 backup_file = malloc(malloc_number*
sizeof(gchar *));
151 snprintf(backup_file,malloc_number,
152 "%s%s", mp3splt_dir_with_path,
".bak");
154 g_rename(mp3splt_dir_with_path,
161 g_mkdir(mp3splt_dir_with_path, 0775);
163 g_mkdir(mp3splt_dir_with_path,
164 S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
169 g_snprintf(filename,fname_malloc_number,
170 "%s%smp3splt-gtk_prefs",
171 mp3splt_dir_with_path, G_DIR_SEPARATOR_S);
173 if (mp3splt_dir_with_path)
175 g_free(mp3splt_dir_with_path);
176 mp3splt_dir_with_path = NULL;
186 GKeyFile *key_file = g_key_file_new();
191 g_key_file_load_from_file(key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
201 gchar *file_string = g_key_file_get_string(key_file,
"general",
"language", NULL);
202 GString *lang = g_string_new(file_string);
205 gint list_number = 2;
206 if (g_string_equal(lang,g_string_new(
"de")) ||
207 g_string_equal(lang,g_string_new(
"de_DE")))
211 else if (g_string_equal(lang, g_string_new(
"fr")) ||
212 g_string_equal(lang, g_string_new(
"fr_FR")))
217 GSList *radio_button_list =
218 gtk_radio_button_get_group(GTK_RADIO_BUTTON(
radio_button));
219 GtkWidget *our_button = (GtkWidget *)
220 g_slist_nth_data(radio_button_list, list_number);
221 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(our_button), TRUE);
224 g_string_free(lang, TRUE);
234 gchar *save_path = g_key_file_get_string(key_file,
"split",
"save_path", NULL);
236 if (save_path != NULL)
246 gint item = g_key_file_get_integer(key_file,
"player",
"default_player",NULL);
249 item = g_key_file_get_integer(key_file,
"player",
"refresh_rate", NULL);
250 gtk_spin_button_set_value(GTK_SPIN_BUTTON(player_refresh_rate_spinner), item);
251 update_timeout_value(NULL, NULL);
254 item = g_key_file_get_boolean(key_file,
"split",
"frame_mode", NULL);
257 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
frame_mode),TRUE);
261 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
frame_mode),FALSE);
265 item = g_key_file_get_boolean(key_file,
"split",
"adjust_mode", NULL);
268 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
adjust_mode),TRUE);
272 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
adjust_mode),FALSE);
275 item = g_key_file_get_boolean(key_file,
"output",
"splitpoint_names_from_filename", NULL);
278 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(names_from_filename),TRUE);
282 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(names_from_filename),FALSE);
287 item = g_key_file_get_integer(key_file,
"split",
"adjust_threshold", NULL);
288 item2 = item/100 + (item%100)/100.;
289 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_adjust_threshold), item2);
291 item = g_key_file_get_integer(key_file,
"split",
"adjust_offset", NULL);
292 item2 = item/100 + (item%100)/100.;
293 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_adjust_offset),
296 item = g_key_file_get_integer(key_file,
"split",
"adjust_gap", NULL);
300 gint tag_pref_file = g_key_file_get_integer(key_file,
"split",
"tags", NULL);
301 GtkWidget *radio = rh_get_radio_from_value(
tags_radio, tag_pref_file);
302 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), TRUE);
305 item = g_key_file_get_boolean(key_file,
"split",
"replace_underscore_by_space", NULL);
308 gtk_toggle_button_set_active(
313 gtk_toggle_button_set_active(
318 item = g_key_file_get_integer(key_file,
"split",
"artist_text_properties",NULL);
321 ch_set_active_value(artist_text_properties_combo, item);
325 ch_set_active_value(artist_text_properties_combo, SPLT_NO_CONVERSION);
328 item = g_key_file_get_integer(key_file,
"split",
"album_text_properties",NULL);
331 ch_set_active_value(album_text_properties_combo, item);
335 ch_set_active_value(album_text_properties_combo, SPLT_NO_CONVERSION);
338 item = g_key_file_get_integer(key_file,
"split",
"title_text_properties",NULL);
341 ch_set_active_value(title_text_properties_combo, item);
345 ch_set_active_value(title_text_properties_combo, SPLT_NO_CONVERSION);
348 item = g_key_file_get_integer(key_file,
"split",
"comment_text_properties",NULL);
351 ch_set_active_value(comment_text_properties_combo, item);
355 ch_set_active_value(comment_text_properties_combo, SPLT_NO_CONVERSION);
359 gchar *default_genre = g_key_file_get_string(key_file,
"split",
"genre", NULL);
362 ch_set_active_str_value(genre_combo, default_genre);
363 g_free(default_genre);
364 default_genre = NULL;
368 ch_set_active_str_value(genre_combo, SPLT_UNDEFINED_GENRE);
372 gchar *default_comment_tag = g_key_file_get_string(key_file,
"split",
"default_comment_tag", NULL);
373 if (default_comment_tag)
375 gtk_entry_set_text(GTK_ENTRY(comment_tag_entry), default_comment_tag);
376 g_free(default_comment_tag);
377 default_comment_tag = NULL;
381 gchar *tags_from_fname_regex =
382 g_key_file_get_string(key_file,
"split",
"tags_from_filename_regex", NULL);
383 if (tags_from_fname_regex)
385 gtk_entry_set_text(GTK_ENTRY(regex_entry), tags_from_fname_regex);
386 g_free(tags_from_fname_regex);
387 tags_from_fname_regex = NULL;
390 gchar *test_regex_fname =
391 g_key_file_get_string(key_file,
"split",
"test_regex_fname", NULL);
392 if (test_regex_fname)
394 gtk_entry_set_text(GTK_ENTRY(test_regex_fname_entry), test_regex_fname);
395 g_free(test_regex_fname);
396 test_regex_fname = NULL;
400 tag_pref_file = g_key_file_get_integer(key_file,
"split",
"tags_version", NULL);
402 GSList *tags_version_radio_button_list =
403 gtk_radio_button_get_group(GTK_RADIO_BUTTON(tags_version_radio));
404 GtkWidget *the_selection =
405 (GtkWidget *)g_slist_nth_data(tags_version_radio_button_list, tag_pref_file);
406 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(the_selection), TRUE);
409 gint default_output_format = g_key_file_get_boolean(key_file,
"output",
410 "default_output_format", NULL);
411 GSList *output_radio_button_list =
412 gtk_radio_button_get_group(GTK_RADIO_BUTTON(
radio_output));
413 GtkWidget *our_selection =
414 (GtkWidget *)g_slist_nth_data(output_radio_button_list, default_output_format);
415 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(our_selection), TRUE);
416 if (default_output_format)
418 gtk_widget_set_sensitive(GTK_WIDGET(
output_entry), FALSE);
419 gtk_widget_set_sensitive(GTK_WIDGET(output_label), FALSE);
423 gchar *output_format = g_key_file_get_string(key_file,
"output",
"output_format", NULL);
426 gtk_entry_set_text(GTK_ENTRY(
output_entry), output_format);
427 g_free(output_format);
428 output_format = NULL;
432 item = g_key_file_get_boolean(key_file,
"output",
"create_dirs_if_needed", NULL);
435 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(create_dirs_from_output_files), TRUE);
439 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(create_dirs_from_output_files), FALSE);
443 gint split_mode = g_key_file_get_integer(key_file,
"split",
"split_mode", NULL);
447 gint time_value = g_key_file_get_integer(key_file,
"split",
448 "split_mode_time_value", NULL);
449 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_time), time_value);
452 gint file_mode = g_key_file_get_integer(key_file,
"split",
454 GSList *file_mode_radio_button_list =
455 gtk_radio_button_get_group(GTK_RADIO_BUTTON(file_mode_radio_button));
457 (GtkWidget *)g_slist_nth_data(file_mode_radio_button_list, file_mode);
458 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(our_selection), TRUE);
461 gint equal_tracks = g_key_file_get_integer(key_file,
"split",
462 "split_mode_equal_time_tracks", NULL);
463 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinner_equal_tracks), equal_tracks);
465 gint root_x = g_key_file_get_integer(key_file,
"gui",
"root_x_position", NULL);
466 gint root_y = g_key_file_get_integer(key_file,
"gui",
"root_y_position", NULL);
467 if (root_x && root_y)
469 ui_set_main_win_position(ui, root_x, root_y);
472 gint width = g_key_file_get_integer(key_file,
"gui",
"width", NULL);
473 gint height = g_key_file_get_integer(key_file,
"gui",
"height", NULL);
476 ui_set_main_win_size(ui, width, height);
479 gchar *browser_directory =
480 g_key_file_get_string(key_file,
"gui",
"browser_directory", NULL);
481 if (browser_directory)
483 ui_set_browser_directory(ui, browser_directory);
484 g_free(browser_directory);
487 g_key_file_free(key_file);
495 void write_default_preferences_file()
499 GKeyFile *my_key_file = g_key_file_new();
500 g_key_file_load_from_file(my_key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
503 gchar *file_string = NULL;
506 if (!g_key_file_has_key(my_key_file,
"general",
"language",NULL))
508 g_key_file_set_string(my_key_file,
"general",
"language",
"en");
509 g_key_file_set_comment(my_key_file,
"general",
"language",
510 "\n language of the gui: en = english, fr = french, de = german",
516 file_string = g_key_file_get_string(my_key_file,
"general",
"language", NULL);
517 GString * lang_char = g_string_new(file_string);
519 if((!g_string_equal(lang_char,g_string_new(
"en")))
520 &&(!g_string_equal(lang_char, g_string_new(
"fr")))
521 &&(!g_string_equal(lang_char, g_string_new(
"fr_FR")))
522 &&(!g_string_equal(lang_char, g_string_new(
"de")))
523 &&(!g_string_equal(lang_char, g_string_new(
"de_DE")))
526 g_key_file_set_string(my_key_file,
"general",
"language",
"en");
527 g_key_file_set_comment(my_key_file,
"general",
"language",
528 "\n language of the gui: en = english, fr_FR = french, de_DE = german",
533 g_string_free(lang_char, TRUE);
540 if (!g_key_file_has_key(my_key_file,
"split",
"frame_mode",NULL))
542 g_key_file_set_boolean(my_key_file,
"split",
"frame_mode", FALSE);
546 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_mode",NULL))
548 g_key_file_set_boolean(my_key_file,
"split",
"adjust_mode", FALSE);
554 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_threshold",NULL))
556 g_key_file_set_integer(my_key_file,
"split",
"adjust_threshold",
562 item = g_key_file_get_integer(my_key_file,
"split",
"adjust_threshold", NULL);
564 item2 = item/100 + (item%100)/100.;
566 if ((item2 < -96) || (item2 > 0))
568 g_key_file_set_integer(my_key_file,
"split",
"adjust_threshold",
574 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_offset",NULL))
576 g_key_file_set_integer(my_key_file,
"split",
"adjust_offset",
582 item = g_key_file_get_integer(my_key_file,
"split",
"adjust_offset", NULL);
584 item2 = item/100 + (item%100)/100.;
587 if ((item2 < -2) || (item2 > 2))
589 g_key_file_set_integer(my_key_file,
"split",
"adjust_offset",
595 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_gap",NULL))
602 item = g_key_file_get_integer(my_key_file,
"split",
"adjust_gap", NULL);
605 if ((item < 0) || (item > 2000))
607 g_key_file_set_integer(my_key_file,
"split",
"adjust_gap",
613 if (!g_key_file_has_key(my_key_file,
"split",
"tags",NULL))
615 g_key_file_set_integer(my_key_file,
"split",
"tags", 1);
616 g_key_file_set_comment(my_key_file,
"split",
"tags",
617 "\n 0 - No tags, 1 - Default tags, 2 - Original tags, 3 - Tags from filename", NULL);
621 if (!g_key_file_has_key(my_key_file,
"split",
"tags_version",NULL))
623 g_key_file_set_integer(my_key_file,
"split",
"tags_version", 0);
624 g_key_file_set_comment(my_key_file,
"split",
"tags_version",
625 "\n 0 - same tags version as the input file, 1 - ID3v1 tags,"
626 " 2 - ID3v2 tags, 3 - ID3v1 & ID3v2 tags",
631 if (!g_key_file_has_key(my_key_file,
"player",
"default_player",NULL))
633 g_key_file_set_integer(my_key_file,
"player",
"default_player",
635 g_key_file_set_comment (my_key_file,
"player",
"default_player",
636 "\n 1 = PLAYER_AUDACIOUS, 2 = PLAYER_SNACKAMP, 3 = PLAYER_GSTREAMER",
642 gint the_player = g_key_file_get_integer(my_key_file,
"player",
643 "default_player", NULL);
644 if (the_player == PLAYER_AUDACIOUS)
647 g_key_file_set_integer(my_key_file,
"player",
"default_player",
652 else if ((the_player > PLAYER_GSTREAMER) || (the_player < 0))
654 g_key_file_set_integer(my_key_file,
"player",
"default_player",
659 if (!g_key_file_has_key(my_key_file,
"player",
"refresh_rate", NULL))
661 g_key_file_set_integer(my_key_file,
"player",
"refresh_rate", DEFAULT_TIMEOUT_VALUE);
665 if (!g_key_file_has_key(my_key_file,
"output",
"output_format",NULL))
667 g_key_file_set_string(my_key_file,
"output",
"output_format",
668 SPLT_DEFAULT_OUTPUT);
669 g_key_file_set_comment (my_key_file,
"output",
"output_format",
670 "\n the output format, contains @a,"
671 "@b, @g, @p, @t and @n, see the program for"
677 if (!g_key_file_has_key(my_key_file,
"output",
"default_output_format",NULL))
679 g_key_file_set_boolean(my_key_file,
"output",
"default_output_format", TRUE);
680 g_key_file_set_comment(my_key_file,
"output",
"default_output_format",
681 "\n can be true or false"
682 " - if we use the default output or"
683 " not for cddb, cue and freedb search",
688 if (!g_key_file_has_key(my_key_file,
"output",
"create_dirs_if_needed", NULL))
690 g_key_file_set_boolean(my_key_file,
"output",
"create_dirs_if_needed", TRUE);
694 if (!g_key_file_has_key(my_key_file,
"split",
"save_path",NULL))
697 const gchar *home_dir = g_get_home_dir();
698 gint dir_malloc_number = strlen(home_dir)+ 10;
699 gchar *default_dir = malloc(dir_malloc_number*
sizeof(gchar *));
700 g_snprintf(default_dir, dir_malloc_number,
"%s\\Desktop",home_dir);
704 gint status = g_stat(default_dir, &buffer);
705 if ((status == 0) && (S_ISDIR(buffer.st_mode) == 0))
707 g_snprintf(default_dir,dir_malloc_number,
"%s",home_dir);
710 const gchar *default_dir = g_get_home_dir();
713 g_key_file_set_string(my_key_file,
"split",
"save_path", default_dir);
714 g_key_file_set_comment(my_key_file,
"split",
"save_path",
715 "\n this is the path where you will find your split files ",
724 if (!g_key_file_has_key(my_key_file,
"split",
"split_mode",NULL))
726 g_key_file_set_integer(my_key_file,
"split",
"split_mode", 3);
727 g_key_file_set_comment(my_key_file,
"split",
"split_mode",
728 "\n 0 - error mode, 1 - wrap mode, 2 - time mode, 3 - normal mode, 4 - equal time tracks",
733 if (!g_key_file_has_key(my_key_file,
"split",
"split_mode_time_value",NULL))
735 g_key_file_set_integer(my_key_file,
"split",
"split_mode_time_value", 60);
736 g_key_file_set_comment(my_key_file,
"split",
"split_mode_time_value",
737 "\n value in seconds to split every X seconds (for the time split)",
742 if (!g_key_file_has_key(my_key_file,
"split",
"file_mode",NULL))
744 g_key_file_set_integer(my_key_file,
"split",
"file_mode", 1);
745 g_key_file_set_comment(my_key_file,
"split",
"file_mode",
746 "\n 0 - multiple files, 1 - single file",
751 if (!g_key_file_has_key(my_key_file,
"split",
"split_mode_equal_time_tracks",NULL))
753 g_key_file_set_integer(my_key_file,
"split",
"split_mode_equal_time_tracks", 10);
754 g_key_file_set_comment(my_key_file,
"split",
"split_mode_equal_time_tracks",
755 "\n number of tracks when to split in X tracks (for the equal time tracks split)",
759 gchar *key_data = g_key_file_to_data(my_key_file, NULL, NULL);
762 FILE *preferences_file = (FILE *)fopen(filename,
"w");
763 g_fprintf(preferences_file,
"%s", key_data);
764 fclose(preferences_file);
765 preferences_file = NULL;
775 g_key_file_free(my_key_file);
790 status = stat(pref_file, &buffer);
792 (S_ISREG(buffer.st_mode) == 0) &&
793 (S_ISDIR(buffer.st_mode) != 0))
796 gint malloc_number = strlen(pref_file)+5;
797 gchar *backup_dir = malloc(malloc_number *
sizeof(gchar *));
798 snprintf(backup_dir,malloc_number,
799 "%s%s",pref_file,
".bak");
801 g_rename(pref_file, backup_dir);
812 write_default_preferences_file();
818 GKeyFile *key_file = g_key_file_new();
823 g_key_file_load_from_file(key_file, filename,
824 G_KEY_FILE_KEEP_COMMENTS,
833 gchar *lang = g_key_file_get_string(key_file,
"general",
"language", NULL);
837 gchar lang_env[32] = {
'\0' };
838 g_snprintf(lang_env, 32,
"LANG=%s", lang);
841 setenv(
"LANGUAGE", lang,1);
846 g_key_file_free(key_file);