41#include "all_includes.h"
43#include "preferences_manager.h"
45static void check_pref_file_and_write_default(
ui_state *ui);
46static void pm_free_spinner_int_preferences(GArray *spinner_int_preferences);
47static void pm_free_range_preferences(GArray *range_preferences);
48static void pm_load_spinner_int_preferences(GKeyFile *key_file,
preferences_state *pm);
49static void pm_save_spinner_int_preferences(GKeyFile *key_file,
preferences_state *pm);
50static void pm_write_default_spinner_int_preferences(GKeyFile *key_file,
preferences_state *pm);
53static void pm_write_default_range_preferences(GKeyFile *key_file,
preferences_state *pm);
55void pm_register_spinner_int_preference(gchar *main_key, gchar *second_key,
56 gint default_value, GtkWidget *spinner,
57 void (*update_spinner_value_cb)(GtkWidget *spinner, gpointer data),
62 preference.main_key = strdup(main_key);
63 preference.second_key = strdup(second_key);
64 preference.default_value = default_value;
65 preference.spinner = spinner;
66 preference.update_spinner_value_cb = update_spinner_value_cb;
67 preference.user_data_for_cb = user_data_for_cb;
69 g_array_append_val(pm->spinner_int_preferences, preference);
72void pm_register_range_preference(gchar *main_key, gchar *second_key,
73 gint default_value, GtkWidget *range,
74 void (*update_adjustment_value)(GtkAdjustment *adjustment, gpointer data),
79 preference.main_key = strdup(main_key);
80 preference.second_key = strdup(second_key);
81 preference.default_value = default_value;
82 preference.range = range;
83 preference.update_adjustment_value = update_adjustment_value;
84 preference.user_data_for_cb = user_data_for_cb;
86 g_array_append_val(pm->range_preferences, preference);
106 pm_free_spinner_int_preferences((*pm)->spinner_int_preferences);
107 pm_free_range_preferences((*pm)->range_preferences);
115 pm_load_spinner_int_preferences(key_file, pm);
116 pm_load_range_preferences(key_file, pm);
121 pm_save_spinner_int_preferences(key_file, pm);
122 pm_save_range_preferences(key_file, pm);
127 pm_write_default_spinner_int_preferences(key_file, pm);
128 pm_write_default_range_preferences(key_file, pm);
131gchar *get_configuration_directory()
133 gchar mp3splt_dir[14] =
".mp3splt-gtk";
135 gchar *home_dir = g_strdup(g_get_home_dir());
140 if (home_dir[strlen(home_dir)-1] ==
'\\')
142 home_dir[strlen(home_dir)-1] =
'\0';
146 gint malloc_number = strlen(home_dir) + strlen(mp3splt_dir) + 2;
147 gchar *mp3splt_dir_with_path = malloc(malloc_number *
sizeof(gchar));
148 g_snprintf(mp3splt_dir_with_path, malloc_number,
149 "%s%s%s", home_dir, G_DIR_SEPARATOR_S, mp3splt_dir);
158 gint status = g_stat(mp3splt_dir_with_path, &buffer);
159 if ((status != 0) || (S_ISDIR(buffer.st_mode) == 0))
161 if ((status == 0) && (S_ISREG(buffer.st_mode) != 0))
163 gint malloc_number = strlen(mp3splt_dir_with_path) + 5;
164 gchar *backup_file = malloc(malloc_number *
sizeof(gchar));
165 snprintf(backup_file, malloc_number,
"%s%s", mp3splt_dir_with_path,
".bak");
166 g_rename(mp3splt_dir_with_path, backup_file);
173 g_mkdir(mp3splt_dir_with_path, 0775);
175 g_mkdir(mp3splt_dir_with_path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
179 return mp3splt_dir_with_path;
192 gchar *mp3splt_dir_with_path = get_configuration_directory();
194 gint fname_malloc_number = strlen(mp3splt_dir_with_path) + 30;
195 gchar *filename = malloc(fname_malloc_number *
sizeof(gchar));
197 g_snprintf(filename, fname_malloc_number,
"%s%smp3splt-gtk_prefs",
198 mp3splt_dir_with_path, G_DIR_SEPARATOR_S);
200 if (mp3splt_dir_with_path)
202 g_free(mp3splt_dir_with_path);
203 mp3splt_dir_with_path = NULL;
213 check_pref_file_and_write_default(ui);
215 GKeyFile *key_file = g_key_file_new();
218 g_key_file_load_from_file(key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
226 gchar *file_string = g_key_file_get_string(key_file,
"general",
"language", NULL);
227 GString *lang = g_string_new(file_string);
230 gint list_number = 2;
231 if (g_string_equal(lang,g_string_new(
"de")) || g_string_equal(lang,g_string_new(
"de_DE")))
235 else if (g_string_equal(lang, g_string_new(
"fr")) || g_string_equal(lang, g_string_new(
"fr_FR")))
240 GSList *radio_button_list = gtk_radio_button_get_group(GTK_RADIO_BUTTON(ui->gui->radio_button));
241 GtkWidget *our_button = GTK_WIDGET(g_slist_nth_data(radio_button_list, list_number));
242 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(our_button), TRUE);
245 g_string_free(lang, TRUE);
255 gchar *save_path = g_key_file_get_string(key_file,
"split",
"save_path", NULL);
256 if (save_path != NULL)
258 set_output_directory_and_update_ui(save_path, ui);
265 gint item = g_key_file_get_integer(key_file,
"player",
"default_player",NULL);
266 ch_set_active_value(GTK_COMBO_BOX(ui->gui->player_combo_box), item);
268 item = g_key_file_get_boolean(key_file,
"player",
"amplitude_wave_ticked", NULL);
269 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->gui->silence_wave_check_button), item);
270 ui->status->show_silence_wave = item;
272 pm_load(key_file, ui->preferences);
275 item = g_key_file_get_boolean(key_file,
"split",
"frame_mode", NULL);
276 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->gui->frame_mode), item);
279 item = g_key_file_get_boolean(key_file,
"split",
"bit_reservoir_mode", NULL);
280 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->gui->bit_reservoir_mode), item);
283 item = g_key_file_get_boolean(key_file,
"split",
"adjust_mode", NULL);
284 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->gui->adjust_mode), item);
286 item = g_key_file_get_boolean(key_file,
"output",
"splitpoint_names_from_filename", NULL);
289 gtk_toggle_button_set_active(ui->gui->names_from_filename, TRUE);
293 gtk_toggle_button_set_active(ui->gui->names_from_filename, FALSE);
298 item = g_key_file_get_integer(key_file,
"split",
"adjust_threshold", NULL);
299 item2 = item/100 + (item%100)/100.;
300 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_threshold), item2);
302 item = g_key_file_get_integer(key_file,
"split",
"adjust_offset", NULL);
303 item2 = item/100 + (item%100)/100.;
304 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_offset), item2);
306 item = g_key_file_get_integer(key_file,
"split",
"adjust_gap", NULL);
307 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_gap), item);
309 item = g_key_file_get_integer(key_file,
"split",
"adjust_min", NULL);
310 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_min), item);
313 gint tag_pref_file = g_key_file_get_integer(key_file,
"split",
"tags", NULL);
314 rh_set_radio_value(ui->gui->tags_radio, tag_pref_file, TRUE);
317 item = g_key_file_get_boolean(key_file,
"split",
"replace_underscore_by_space", NULL);
318 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->gui->replace_underscore_by_space_check_box),
322 item = g_key_file_get_integer(key_file,
"split",
"artist_text_properties",NULL);
325 ch_set_active_value(ui->gui->artist_text_properties_combo, item);
329 ch_set_active_value(ui->gui->artist_text_properties_combo, SPLT_NO_CONVERSION);
332 item = g_key_file_get_integer(key_file,
"split",
"album_text_properties",NULL);
335 ch_set_active_value(ui->gui->album_text_properties_combo, item);
339 ch_set_active_value(ui->gui->album_text_properties_combo, SPLT_NO_CONVERSION);
342 item = g_key_file_get_integer(key_file,
"split",
"title_text_properties",NULL);
345 ch_set_active_value(ui->gui->title_text_properties_combo, item);
349 ch_set_active_value(ui->gui->title_text_properties_combo, SPLT_NO_CONVERSION);
352 item = g_key_file_get_integer(key_file,
"split",
"comment_text_properties",NULL);
355 ch_set_active_value(ui->gui->comment_text_properties_combo, item);
359 ch_set_active_value(ui->gui->comment_text_properties_combo, SPLT_NO_CONVERSION);
363 gchar *default_genre = g_key_file_get_string(key_file,
"split",
"genre", NULL);
366 ch_set_active_str_value(ui->gui->genre_combo, default_genre);
367 g_free(default_genre);
368 default_genre = NULL;
372 ch_set_active_str_value(ui->gui->genre_combo, SPLT_UNDEFINED_GENRE);
376 gchar *default_comment_tag = g_key_file_get_string(key_file,
"split",
"default_comment_tag", NULL);
377 if (default_comment_tag)
379 gtk_entry_set_text(GTK_ENTRY(ui->gui->comment_tag_entry), default_comment_tag);
380 g_free(default_comment_tag);
381 default_comment_tag = NULL;
385 gchar *tags_from_fname_regex =
386 g_key_file_get_string(key_file,
"split",
"tags_from_filename_regex", NULL);
387 if (tags_from_fname_regex)
389 gtk_entry_set_text(GTK_ENTRY(ui->gui->regex_entry), tags_from_fname_regex);
390 g_free(tags_from_fname_regex);
391 tags_from_fname_regex = NULL;
394 gchar *test_regex_fname =
395 g_key_file_get_string(key_file,
"split",
"test_regex_fname", NULL);
396 if (test_regex_fname)
398 gtk_entry_set_text(GTK_ENTRY(ui->gui->test_regex_fname_entry), test_regex_fname);
399 g_free(test_regex_fname);
400 test_regex_fname = NULL;
404 tag_pref_file = g_key_file_get_integer(key_file,
"split",
"tags_version", NULL);
406 GSList *tags_version_radio_button_list =
407 gtk_radio_button_get_group(GTK_RADIO_BUTTON(ui->gui->tags_version_radio));
408 GtkWidget *the_selection =
409 GTK_WIDGET(g_slist_nth_data(tags_version_radio_button_list, tag_pref_file));
410 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(the_selection), TRUE);
413 gint default_output_format =
414 g_key_file_get_boolean(key_file,
"output",
"default_output_format", NULL);
415 GSList *output_radio_button_list =
416 gtk_radio_button_get_group(GTK_RADIO_BUTTON(ui->gui->radio_output));
417 GtkWidget *our_selection =
418 GTK_WIDGET(g_slist_nth_data(output_radio_button_list, default_output_format));
419 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(our_selection), TRUE);
420 if (default_output_format)
422 gtk_widget_set_sensitive(ui->gui->output_entry, FALSE);
423 gtk_widget_set_sensitive(ui->gui->output_label, FALSE);
427 gtk_widget_set_sensitive(ui->gui->output_default_label, FALSE);
431 gchar *output_format = g_key_file_get_string(key_file,
"output",
"output_format", NULL);
434 gtk_entry_set_text(GTK_ENTRY(ui->gui->output_entry), output_format);
435 g_free(output_format);
436 output_format = NULL;
440 item = g_key_file_get_boolean(key_file,
"output",
"create_dirs_if_needed", NULL);
441 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ui->gui->create_dirs_from_output_files), item);
444 gint split_mode = g_key_file_get_integer(key_file,
"split",
"split_mode", NULL);
448 gint time_value = g_key_file_get_integer(key_file,
"split",
"split_mode_time_value", NULL);
449 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->gui->spinner_time), time_value);
452 gint equal_tracks = g_key_file_get_integer(key_file,
"split",
453 "split_mode_equal_time_tracks", NULL);
454 gtk_spin_button_set_value(GTK_SPIN_BUTTON(ui->gui->spinner_equal_tracks), equal_tracks);
456 gint root_x = g_key_file_get_integer(key_file,
"gui",
"root_x_position", NULL);
457 gint root_y = g_key_file_get_integer(key_file,
"gui",
"root_y_position", NULL);
458 if (root_x && root_y)
460 ui_set_main_win_position(ui, root_x, root_y);
463 gint width = g_key_file_get_integer(key_file,
"gui",
"width", NULL);
464 gint height = g_key_file_get_integer(key_file,
"gui",
"height", NULL);
467 ui_set_main_win_size(ui, width, height);
470 gchar *browser_directory = g_key_file_get_string(key_file,
"gui",
"browser_directory", NULL);
471 if (browser_directory)
473 ui_set_browser_directory(ui, browser_directory);
474 g_free(browser_directory);
477 g_key_file_free(key_file);
485 GKeyFile *my_key_file = g_key_file_new();
486 g_key_file_load_from_file(my_key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
492 g_key_file_set_integer(my_key_file,
"player",
"default_player", ui->infos->selected_player);
494 g_key_file_set_boolean(my_key_file,
"player",
"amplitude_wave_ticked",
495 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui->gui->silence_wave_check_button)));
497 pm_save(my_key_file, ui->preferences);
501 g_key_file_set_string(my_key_file,
"general",
"language", selected_lang->str);
502 g_string_free(selected_lang, TRUE);
503 selected_lang = NULL;
507 g_key_file_set_boolean(my_key_file,
"split",
"frame_mode",
508 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui->gui->frame_mode)));
510 g_key_file_set_boolean(my_key_file,
"split",
"bit_reservoir_mode",
511 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui->gui->bit_reservoir_mode)));
514 g_key_file_set_boolean(my_key_file,
"split",
"adjust_mode",
515 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui->gui->adjust_mode)));
518 g_key_file_set_integer(my_key_file,
"split",
"adjust_threshold",
519 gtk_spin_button_get_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_threshold)) * 100);
521 g_key_file_set_integer(my_key_file,
"split",
"adjust_offset",
522 gtk_spin_button_get_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_offset)) * 100);
524 g_key_file_set_integer(my_key_file,
"split",
"adjust_gap",
525 gtk_spin_button_get_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_gap)));
527 g_key_file_set_integer(my_key_file,
"split",
"adjust_min",
528 gtk_spin_button_get_value(GTK_SPIN_BUTTON(ui->gui->spinner_adjust_min)));
530 g_key_file_set_boolean(my_key_file,
"output",
"splitpoint_names_from_filename",
531 gtk_toggle_button_get_active(ui->gui->names_from_filename));
534 g_key_file_set_string(my_key_file,
"output",
"output_format",
535 gtk_entry_get_text(GTK_ENTRY(ui->gui->output_entry)));
537 g_key_file_set_boolean(my_key_file,
"output",
"default_output_format",
539 g_key_file_set_boolean(my_key_file,
"output",
"create_dirs_if_needed",
540 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui->gui->create_dirs_from_output_files)));
543 g_key_file_set_integer(my_key_file,
"split",
"tags", rh_get_active_value(ui->gui->tags_radio));
546 g_key_file_set_boolean(my_key_file,
"split",
"replace_underscore_by_space",
547 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ui->gui->replace_underscore_by_space_check_box)));
550 g_key_file_set_integer(my_key_file,
"split",
"artist_text_properties",
551 ch_get_active_value(ui->gui->artist_text_properties_combo));
553 g_key_file_set_integer(my_key_file,
"split",
"album_text_properties",
554 ch_get_active_value(ui->gui->album_text_properties_combo));
556 g_key_file_set_integer(my_key_file,
"split",
"title_text_properties",
557 ch_get_active_value(ui->gui->title_text_properties_combo));
559 g_key_file_set_integer(my_key_file,
"split",
"comment_text_properties",
560 ch_get_active_value(ui->gui->comment_text_properties_combo));
563 gchar *genre_value = ch_get_active_str_value(ui->gui->genre_combo);
564 if (genre_value != NULL)
566 g_key_file_set_string(my_key_file,
"split",
"genre", genre_value);
570 const gchar *comment = gtk_entry_get_text(GTK_ENTRY(ui->gui->comment_tag_entry));
573 g_key_file_set_string(my_key_file,
"split",
"default_comment_tag", comment);
576 const gchar *regex_text = gtk_entry_get_text(GTK_ENTRY(ui->gui->regex_entry));
577 if (regex_text != NULL)
579 g_key_file_set_string(my_key_file,
"split",
"tags_from_filename_regex", regex_text);
582 const gchar *test_regex_fname = gtk_entry_get_text(GTK_ENTRY(ui->gui->test_regex_fname_entry));
583 if (test_regex_fname != NULL)
585 g_key_file_set_string(my_key_file,
"split",
"test_regex_fname", test_regex_fname);
589 g_key_file_set_integer(my_key_file,
"split",
"tags_version",
593 g_key_file_set_integer(my_key_file,
"split",
"split_mode", get_selected_split_mode(ui));
595 g_key_file_set_integer(my_key_file,
"split",
"split_mode_time_value",
596 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ui->gui->spinner_time)));
598 g_key_file_set_integer(my_key_file,
"split",
"split_mode_equal_time_tracks",
599 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ui->gui->spinner_equal_tracks)));
602 g_key_file_set_integer(my_key_file,
"gui",
"root_x_position", main_win->root_x_pos);
603 g_key_file_set_integer(my_key_file,
"gui",
"root_y_position", main_win->root_y_pos);
604 g_key_file_set_integer(my_key_file,
"gui",
"width", main_win->width);
605 g_key_file_set_integer(my_key_file,
"gui",
"height", main_win->height);
607 const char *browser_directory = ui_get_browser_directory(ui);
608 if (browser_directory != NULL)
610 g_key_file_set_string(my_key_file,
"gui",
"browser_directory", browser_directory);
613 gchar *key_data = g_key_file_to_data(my_key_file, NULL, NULL);
616 FILE *preferences_file;
617 preferences_file = (FILE *)g_fopen(filename,
"w");
618 g_fprintf(preferences_file,
"%s", key_data);
619 fclose(preferences_file);
620 preferences_file = NULL;
624 g_key_file_free(my_key_file);
637static void write_default_preferences_file(
ui_state *ui)
641 GKeyFile *my_key_file = g_key_file_new();
642 g_key_file_load_from_file(my_key_file, filename, G_KEY_FILE_KEEP_COMMENTS, NULL);
646 if (!g_key_file_has_key(my_key_file,
"general",
"language",NULL))
648 g_key_file_set_string(my_key_file,
"general",
"language",
"en");
649 g_key_file_set_comment(my_key_file,
"general",
"language",
650 "\n language of the gui: en = english, fr = french, de = german", NULL);
655 gchar *file_string = g_key_file_get_string(my_key_file,
"general",
"language", NULL);
656 GString * lang_char = g_string_new(file_string);
658 if((!g_string_equal(lang_char,g_string_new(
"en")))
659 &&(!g_string_equal(lang_char, g_string_new(
"fr")))
660 &&(!g_string_equal(lang_char, g_string_new(
"fr_FR")))
661 &&(!g_string_equal(lang_char, g_string_new(
"de")))
662 &&(!g_string_equal(lang_char, g_string_new(
"de_DE")))
665 g_key_file_set_string(my_key_file,
"general",
"language",
"en");
666 g_key_file_set_comment(my_key_file,
"general",
"language",
667 "\n language of the gui: en = english, fr_FR = french, de_DE = german", NULL);
671 g_string_free(lang_char, TRUE);
678 if (!g_key_file_has_key(my_key_file,
"split",
"frame_mode",NULL))
680 g_key_file_set_boolean(my_key_file,
"split",
"frame_mode", FALSE);
683 if (!g_key_file_has_key(my_key_file,
"split",
"bit_reservoir_mode",NULL))
685 g_key_file_set_boolean(my_key_file,
"split",
"bit_reservoir_mode", FALSE);
689 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_mode",NULL))
691 g_key_file_set_boolean(my_key_file,
"split",
"adjust_mode", FALSE);
697 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_threshold",NULL))
699 g_key_file_set_integer(my_key_file,
"split",
"adjust_threshold",
700 (
int)(SPLT_DEFAULT_PARAM_THRESHOLD * 100));
705 item = g_key_file_get_integer(my_key_file,
"split",
"adjust_threshold", NULL);
707 item2 = item/100 + (item%100)/100.;
709 if ((item2 < -96) || (item2 > 0))
711 g_key_file_set_integer(my_key_file,
"split",
"adjust_threshold",
712 (
int)(SPLT_DEFAULT_PARAM_THRESHOLD * 100));
717 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_offset",NULL))
719 g_key_file_set_integer(my_key_file,
"split",
"adjust_offset",
720 (
int)(SPLT_DEFAULT_PARAM_OFFSET * 100));
725 item = g_key_file_get_integer(my_key_file,
"split",
"adjust_offset", NULL);
727 item2 = item/100 + (item%100)/100.;
730 if ((item2 < -2) || (item2 > 2))
732 g_key_file_set_integer(my_key_file,
"split",
"adjust_offset",
733 (
int)(SPLT_DEFAULT_PARAM_OFFSET * 100));
738 if (!g_key_file_has_key(my_key_file,
"split",
"adjust_gap",NULL))
740 g_key_file_set_integer(my_key_file,
"split",
"adjust_gap", SPLT_DEFAULT_PARAM_GAP);
745 item = g_key_file_get_integer(my_key_file,
"split",
"adjust_gap", NULL);
746 if ((item < 0) || (item > 2000))
748 g_key_file_set_integer(my_key_file,
"split",
"adjust_gap", SPLT_DEFAULT_PARAM_GAP);
753 if (!g_key_file_has_key(my_key_file,
"split",
"tags",NULL))
755 g_key_file_set_integer(my_key_file,
"split",
"tags", 1);
756 g_key_file_set_comment(my_key_file,
"split",
"tags",
757 "\n 0 - No tags, 1 - Default tags, 2 - Original tags, 3 - Tags from filename", NULL);
761 if (!g_key_file_has_key(my_key_file,
"split",
"tags_version",NULL))
763 g_key_file_set_integer(my_key_file,
"split",
"tags_version", 0);
764 g_key_file_set_comment(my_key_file,
"split",
"tags_version",
765 "\n 0 - same tags version as the input file, 1 - ID3v1 tags,"
766 " 2 - ID3v2 tags, 3 - ID3v1 & ID3v2 tags",
771 if (!g_key_file_has_key(my_key_file,
"player",
"default_player",NULL))
773 g_key_file_set_integer(my_key_file,
"player",
"default_player",
775 g_key_file_set_comment (my_key_file,
"player",
"default_player",
776 "\n 1 = PLAYER_AUDACIOUS, 2 = PLAYER_SNACKAMP, 3 = PLAYER_GSTREAMER",
783 g_key_file_get_integer(my_key_file,
"player",
"default_player", NULL);
784 if (the_player == PLAYER_AUDACIOUS)
787 g_key_file_set_integer(my_key_file,
"player",
"default_player", PLAYER_SNACKAMP);
791 else if ((the_player > PLAYER_GSTREAMER) || (the_player < 0))
793 g_key_file_set_integer(my_key_file,
"player",
"default_player",
798 pm_write_default(my_key_file, ui->preferences);
801 if (!g_key_file_has_key(my_key_file,
"output",
"output_format",NULL))
803 g_key_file_set_string(my_key_file,
"output",
"output_format", SPLT_DEFAULT_OUTPUT);
804 g_key_file_set_comment (my_key_file,
"output",
"output_format",
805 "\n the output format, contains @a,"
806 "@b, @g, @p, @t and @n, see the program for"
807 " more details", NULL);
811 if (!g_key_file_has_key(my_key_file,
"output",
"default_output_format",NULL))
813 g_key_file_set_boolean(my_key_file,
"output",
"default_output_format", TRUE);
814 g_key_file_set_comment(my_key_file,
"output",
"default_output_format",
815 "\n can be true or false"
816 " - if we use the default output or"
817 " not for cddb, cue and freedb search", NULL);
821 if (!g_key_file_has_key(my_key_file,
"output",
"create_dirs_if_needed", NULL))
823 g_key_file_set_boolean(my_key_file,
"output",
"create_dirs_if_needed", TRUE);
827 if (!g_key_file_has_key(my_key_file,
"split",
"save_path",NULL))
830 const gchar *home_dir = g_get_home_dir();
831 gint dir_malloc_number = strlen(home_dir)+ 10;
832 gchar *default_dir = malloc(dir_malloc_number*
sizeof(gchar *));
833 g_snprintf(default_dir, dir_malloc_number,
"%s\\Desktop",home_dir);
837 gint status = g_stat(default_dir, &buffer);
838 if ((status == 0) && (S_ISDIR(buffer.st_mode) == 0))
840 g_snprintf(default_dir, dir_malloc_number,
"%s",home_dir);
843 const gchar *default_dir = g_get_home_dir();
846 g_key_file_set_string(my_key_file,
"split",
"save_path", default_dir);
847 g_key_file_set_comment(my_key_file,
"split",
"save_path",
848 "\n this is the path where you will find your split files ",
857 if (!g_key_file_has_key(my_key_file,
"split",
"split_mode",NULL))
859 g_key_file_set_integer(my_key_file,
"split",
"split_mode", 3);
860 g_key_file_set_comment(my_key_file,
"split",
"split_mode",
861 "\n 0 - error mode, 1 - wrap mode, 2 - time mode, 3 - normal mode, 4 - equal time tracks",
866 if (!g_key_file_has_key(my_key_file,
"split",
"split_mode_time_value",NULL))
868 g_key_file_set_integer(my_key_file,
"split",
"split_mode_time_value", 60);
869 g_key_file_set_comment(my_key_file,
"split",
"split_mode_time_value",
870 "\n value in seconds to split every X seconds (for the time split)", NULL);
874 if (!g_key_file_has_key(my_key_file,
"split",
"split_mode_equal_time_tracks",NULL))
876 g_key_file_set_integer(my_key_file,
"split",
"split_mode_equal_time_tracks", 10);
877 g_key_file_set_comment(my_key_file,
"split",
"split_mode_equal_time_tracks",
878 "\n number of tracks when to split in X tracks (for the equal time tracks split)", NULL);
881 gchar *key_data = g_key_file_to_data(my_key_file, NULL, NULL);
883 FILE *preferences_file = (FILE *)fopen(filename,
"w");
884 g_fprintf(preferences_file,
"%s", key_data);
885 fclose(preferences_file);
893 g_key_file_free(my_key_file);
900static void check_pref_file_and_write_default(
ui_state *ui)
905 gint status = stat(pref_file, &buffer);
907 (S_ISREG(buffer.st_mode) == 0) &&
908 (S_ISDIR(buffer.st_mode) != 0))
910 gint malloc_number = strlen(pref_file)+5;
911 gchar *backup_dir = malloc(malloc_number *
sizeof(gchar *));
912 snprintf(backup_dir,malloc_number,
"%s%s", pref_file,
".bak");
913 g_rename(pref_file, backup_dir);
924 write_default_preferences_file(ui);
927static void pm_free_spinner_int_preferences(GArray *spinner_int_preferences)
930 for (i = 0; i < spinner_int_preferences->len; i++)
935 g_free(preference.main_key);
936 preference.main_key = NULL;
938 g_free(preference.second_key);
939 preference.second_key = NULL;
942 g_array_free(spinner_int_preferences, TRUE);
945static void pm_free_range_preferences(GArray *range_preferences)
948 for (i = 0; i < range_preferences->len; i++)
953 g_free(preference.main_key);
954 preference.main_key = NULL;
956 g_free(preference.second_key);
957 preference.second_key = NULL;
960 g_array_free(range_preferences, TRUE);
963static void pm_load_spinner_int_preferences(GKeyFile *key_file,
preferences_state *pm)
965 GArray *spinner_int_preferences = pm->spinner_int_preferences;
968 for (i = 0; i < spinner_int_preferences->len; i++)
974 g_key_file_get_integer(key_file, preference.main_key, preference.second_key, NULL);
975 gtk_spin_button_set_value(GTK_SPIN_BUTTON(preference.spinner), value);
976 preference.update_spinner_value_cb(preference.spinner, preference.user_data_for_cb);
980static void pm_save_spinner_int_preferences(GKeyFile *key_file,
preferences_state *pm)
982 GArray *spinner_int_preferences = pm->spinner_int_preferences;
985 for (i = 0; i < spinner_int_preferences->len; i++)
990 g_key_file_set_integer(key_file, preference.main_key, preference.second_key,
991 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(preference.spinner)));
995static void pm_write_default_spinner_int_preferences(GKeyFile *key_file,
preferences_state *pm)
997 GArray *spinner_int_preferences = pm->spinner_int_preferences;
1000 for (i = 0; i < spinner_int_preferences->len; i++)
1005 if (!g_key_file_has_key(key_file, preference.main_key, preference.second_key, NULL))
1007 g_key_file_set_integer(key_file, preference.main_key, preference.second_key,
1008 preference.default_value);
1015 GArray *range_preferences = pm->range_preferences;
1018 for (i = 0; i < range_preferences->len; i++)
1023 g_key_file_get_integer(key_file, preference.main_key, preference.second_key, NULL);
1025 gtk_range_set_value(GTK_RANGE(preference.range), value);
1026 GtkAdjustment *adj = gtk_range_get_adjustment(GTK_RANGE(preference.range));
1027 preference.update_adjustment_value(adj, preference.user_data_for_cb);
1033 GArray *range_preferences = pm->range_preferences;
1036 for (i = 0; i < range_preferences->len; i++)
1040 GtkAdjustment *adj = gtk_range_get_adjustment(GTK_RANGE(preference.range));
1041 g_key_file_set_integer(key_file, preference.main_key, preference.second_key,
1042 (gint)gtk_adjustment_get_value(adj));
1046static void pm_write_default_range_preferences(GKeyFile *key_file,
preferences_state *pm)
1048 GArray *range_preferences = pm->range_preferences;
1051 for (i = 0; i < range_preferences->len; i++)
1055 if (!g_key_file_has_key(key_file, preference.main_key, preference.second_key, NULL))
1057 g_key_file_set_integer(key_file, preference.main_key, preference.second_key,
1058 preference.default_value);
void load_preferences(ui_state *ui)
Read the preferences from the preferences file.
gchar * get_preferences_filename()
Get the name of the preferences file.
gchar * get_output_directory(ui_state *ui)
Get the name of the output directory.
GString * get_checked_language(ui_state *ui)
Returns the selected language.
gboolean get_checked_output_radio_box(ui_state *ui)
returns the checked output radio box
gint get_checked_tags_version_radio_box(gui_state *gui)
returns the checked tags radio box
void select_split_mode(int split_mode, ui_state *ui)
Set the split mode.