aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/setting.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/setting.c')
-rwxr-xr-xsrc/setting.c1616
1 files changed, 1616 insertions, 0 deletions
diff --git a/src/setting.c b/src/setting.c
new file mode 100755
index 0000000..8e68c6b
--- /dev/null
+++ b/src/setting.c
@@ -0,0 +1,1616 @@
+/* config.c - 2000/06/21 */
+/*
+ * EasyTAG - Tag editor for MP3 and Ogg Vorbis files
+ * Copyright (C) 2000-2003 Jerome Couderc <easytag@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n-lib.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+#include "setting.h"
+#include "prefs.h"
+#include "bar.h"
+#include "easytag.h"
+#include "charset.h"
+#include "scan.h"
+#include "log.h"
+#include "misc.h"
+#include "cddb.h"
+#include "browser.h"
+
+#ifdef WIN32
+# include "win32/win32dep.h"
+#endif
+
+
+/***************
+ * Declaration *
+ ***************/
+
+/*
+ * Nota :
+ * - no trailing slashes on directory name to avoid problem with
+ * NetBSD's mkdir(2).
+ */
+
+// Base directory created into home dir
+gchar *EASYTAG_DIR = ".easytag";
+// File for configuration
+gchar *CONFIG_FILE = ".easytag/easytagrc";
+// File of masks for tag scanner
+gchar *SCAN_TAG_MASKS_FILE = ".easytag/scan_tag.mask";
+// File of masks for rename file scanner
+gchar *RENAME_FILE_MASKS_FILE = ".easytag/rename_file.mask";
+// File for history of RenameDirectoryMaskCombo combobox
+gchar *RENAME_DIRECTORY_MASKS_FILE = ".easytag/rename_directory.mask";
+// File for history of PlayListNameCombo combobox
+gchar *PLAY_LIST_NAME_MASKS_FILE = ".easytag/play_list_name.mask";
+// File for history of PlayListContentMaskEntry combobox
+gchar *PLAYLIST_CONTENT_MASKS_FILE = ".easytag/playlist_content.mask";
+// File for history of DefaultPathToMp3 combobox
+gchar *DEFAULT_PATH_TO_MP3_HISTORY_FILE = ".easytag/default_path_to_mp3.history";
+// File for history of DefaultComment combobox
+gchar *DEFAULT_TAG_COMMENT_HISTORY_FILE = ".easytag/default_tag_comment.history";
+// File for history of BrowserEntry combobox
+gchar *PATH_ENTRY_HISTORY_FILE = ".easytag/browser_path.history";
+// File for history of run program combobox for directories
+gchar *RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE = ".easytag/run_program_with_directory.history";
+// File for history of run program combobox for files
+gchar *RUN_PROGRAM_WITH_FILE_HISTORY_FILE = ".easytag/run_program_with_file.history";
+// File for history of run player combobox
+gchar *AUDIO_FILE_PLAYER_HISTORY_FILE = ".easytag/audio_file_player.history";
+// File for history of search string combobox
+gchar *SEARCH_FILE_HISTORY_FILE = ".easytag/search_file.history";
+// File for history of FileToLoad combobox
+gchar *FILE_TO_LOAD_HISTORY_FILE = ".easytag/file_to_load.history";
+// File for history of CddbSearchStringEntry combobox
+gchar *CDDB_SEARCH_STRING_HISTORY_FILE = ".easytag/cddb_search_string.history";
+// File for history of CddbSearchStringInResultEntry combobox
+gchar *CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE = ".easytag/cddb_search_string_in_result.history";
+// File for history of CddbLocalPath combobox
+gchar *CDDB_LOCAL_PATH_HISTORY_FILE = ".easytag/cddb_local_path.history";
+
+
+
+
+/**************
+ * Prototypes *
+ **************/
+
+
+
+/********************
+ * Config Variables *
+ ********************/
+tConfigVariable Config_Variables[] =
+{
+ {"load_on_startup", CV_TYPE_BOOL, &LOAD_ON_STARTUP },
+ {"default_path_to_mp3", CV_TYPE_STRING, &DEFAULT_PATH_TO_MP3 },
+ {"browser_line_style", CV_TYPE_BOOL, &BROWSER_LINE_STYLE },
+ {"browser_expander_style", CV_TYPE_BOOL, &BROWSER_EXPANDER_STYLE },
+ {"browse_subdir", CV_TYPE_BOOL, &BROWSE_SUBDIR },
+ {"browse_hidden_dir", CV_TYPE_BOOL, &BROWSE_HIDDEN_DIR },
+ {"open_selected_browser_node", CV_TYPE_BOOL, &OPEN_SELECTED_BROWSER_NODE },
+
+ {"set_main_window_position", CV_TYPE_BOOL, &SET_MAIN_WINDOW_POSITION },
+ {"main_window_x", CV_TYPE_INT, &MAIN_WINDOW_X },
+ {"main_window_y", CV_TYPE_INT, &MAIN_WINDOW_Y },
+ {"main_window_height", CV_TYPE_INT, &MAIN_WINDOW_HEIGHT },
+ {"main_window_width", CV_TYPE_INT, &MAIN_WINDOW_WIDTH },
+ {"pane_handle_position1", CV_TYPE_INT, &PANE_HANDLE_POSITION1 },
+ {"pane_handle_position2", CV_TYPE_INT, &PANE_HANDLE_POSITION2 },
+ {"pane_handle_position3", CV_TYPE_INT, &PANE_HANDLE_POSITION3 },
+ {"pane_handle_position4", CV_TYPE_INT, &PANE_HANDLE_POSITION4 },
+ {"show_header_infos", CV_TYPE_BOOL, &SHOW_HEADER_INFO },
+ {"changed_files_displayed_to_red", CV_TYPE_BOOL, &CHANGED_FILES_DISPLAYED_TO_RED },
+ {"changed_files_displayed_to_bold", CV_TYPE_BOOL, &CHANGED_FILES_DISPLAYED_TO_BOLD },
+
+ {"date_auto_completion", CV_TYPE_BOOL, &DATE_AUTO_COMPLETION },
+ {"number_track_formated", CV_TYPE_BOOL, &NUMBER_TRACK_FORMATED },
+ {"number_track_formated_spin_button", CV_TYPE_INT, &NUMBER_TRACK_FORMATED_SPIN_BUTTON },
+ {"ogg_tag_write_xmms_comment", CV_TYPE_BOOL, &OGG_TAG_WRITE_XMMS_COMMENT },
+ {"set_focus_to_same_tag_field", CV_TYPE_BOOL, &SET_FOCUS_TO_SAME_TAG_FIELD },
+ {"set_focus_to_first_tag_field", CV_TYPE_BOOL, &SET_FOCUS_TO_FIRST_TAG_FIELD },
+ {"sorting_file_mode", CV_TYPE_INT, &SORTING_FILE_MODE },
+ {"sorting_file_case_sensitive", CV_TYPE_BOOL, &SORTING_FILE_CASE_SENSITIVE },
+
+ {"replace_illegal_character_in_filename",CV_TYPE_BOOL, &REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME },
+ {"filename_extension_lower_case", CV_TYPE_BOOL, &FILENAME_EXTENSION_LOWER_CASE },
+ {"filename_extension_upper_case", CV_TYPE_BOOL, &FILENAME_EXTENSION_UPPER_CASE },
+ {"filename_extension_no_change", CV_TYPE_BOOL, &FILENAME_EXTENSION_NO_CHANGE },
+ {"preserve_modification_time", CV_TYPE_BOOL, &PRESERVE_MODIFICATION_TIME },
+ {"filename_character_set_other", CV_TYPE_BOOL, &FILENAME_CHARACTER_SET_OTHER },
+ {"filename_character_set_approximate", CV_TYPE_BOOL, &FILENAME_CHARACTER_SET_APPROXIMATE },
+ {"filename_character_set_discard", CV_TYPE_BOOL, &FILENAME_CHARACTER_SET_DISCARD },
+
+ {"write_id3_tags_in_flac_file", CV_TYPE_BOOL, &WRITE_ID3_TAGS_IN_FLAC_FILE },
+ {"strip_tag_when_empty_fields", CV_TYPE_BOOL, &STRIP_TAG_WHEN_EMPTY_FIELDS },
+ {"convert_old_id3v2_tag_version", CV_TYPE_BOOL, &CONVERT_OLD_ID3V2_TAG_VERSION },
+ {"use_non_standard_id3_reading_character_set", CV_TYPE_BOOL, &USE_NON_STANDARD_ID3_READING_CHARACTER_SET},
+ {"file_reading_id3v1v2_character_set", CV_TYPE_STRING,&FILE_READING_ID3V1V2_CHARACTER_SET},
+ {"file_writing_id3v2_write_tag", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_WRITE_TAG },
+ {"file_writing_id3v2_version_4", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_VERSION_4 },
+ {"file_writing_id3v2_use_crc32", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_USE_CRC32 },
+ {"file_writing_id3v2_use_compression", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_USE_COMPRESSION },
+ {"file_writing_id3v2_use_unicode_character_set", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET},
+ {"file_writing_id3v2_unicode_character_set", CV_TYPE_STRING,&FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET},
+ {"file_writing_id3v2_no_unicode_character_set", CV_TYPE_STRING,&FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET},
+ {"file_writing_id3v2_iconv_options_no", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_ICONV_OPTIONS_NO},
+ {"file_writing_id3v2_iconv_options_translit", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT},
+ {"file_writing_id3v2_iconv_options_ignore", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE},
+ {"file_writing_id3v1_write_tag", CV_TYPE_BOOL, &FILE_WRITING_ID3V1_WRITE_TAG },
+ {"file_writing_id3v1_character_set", CV_TYPE_STRING,&FILE_WRITING_ID3V1_CHARACTER_SET},
+ {"file_writing_id3v1_iconv_options_no", CV_TYPE_BOOL, &FILE_WRITING_ID3V1_ICONV_OPTIONS_NO},
+ {"file_writing_id3v1_iconv_options_translit", CV_TYPE_BOOL, &FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT},
+ {"file_writing_id3v1_iconv_options_ignore", CV_TYPE_BOOL, &FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE},
+
+ {"message_box_position_none", CV_TYPE_BOOL, &MESSAGE_BOX_POSITION_NONE },
+ {"message_box_position_center", CV_TYPE_BOOL, &MESSAGE_BOX_POSITION_CENTER },
+ {"message_box_position_mouse", CV_TYPE_BOOL, &MESSAGE_BOX_POSITION_MOUSE },
+ {"message_box_position_center_on_parent", CV_TYPE_BOOL, &MESSAGE_BOX_POSITION_CENTER_ON_PARENT },
+
+ {"audio_file_player", CV_TYPE_STRING,&AUDIO_FILE_PLAYER },
+
+ {"scanner_type", CV_TYPE_INT, &SCANNER_TYPE },
+ {"scan_mask_editor_button", CV_TYPE_BOOL,&SCAN_MASK_EDITOR_BUTTON },
+ {"scan_legend_button", CV_TYPE_BOOL,&SCAN_LEGEND_BUTTON },
+ {"fts_convert_underscore_and_p20_into_space",CV_TYPE_BOOL,&FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE },
+ {"fts_convert_space_into_underscore", CV_TYPE_BOOL,&FTS_CONVERT_SPACE_INTO_UNDERSCORE },
+ {"rfs_convert_underscore_and_p20_into_space",CV_TYPE_BOOL,&RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE },
+ {"rfs_convert_space_into_underscore", CV_TYPE_BOOL,&RFS_CONVERT_SPACE_INTO_UNDERSCORE },
+ {"pfs_dont_upper_some_words", CV_TYPE_BOOL,&PFS_DONT_UPPER_SOME_WORDS },
+ {"overwrite_tag_field", CV_TYPE_BOOL, &OVERWRITE_TAG_FIELD },
+ {"set_default_comment", CV_TYPE_BOOL, &SET_DEFAULT_COMMENT },
+ {"default_comment", CV_TYPE_STRING, &DEFAULT_COMMENT },
+ {"crc32_comment", CV_TYPE_BOOL, &SET_CRC32_COMMENT },
+ {"open_scanner_window_on_startup", CV_TYPE_BOOL, &OPEN_SCANNER_WINDOW_ON_STARTUP },
+ {"scanner_window_on_top", CV_TYPE_BOOL, &SCANNER_WINDOW_ON_TOP },
+ {"set_scanner_window_position", CV_TYPE_BOOL, &SET_SCANNER_WINDOW_POSITION },
+ {"scanner_window_x", CV_TYPE_INT, &SCANNER_WINDOW_X },
+ {"scanner_window_y", CV_TYPE_INT, &SCANNER_WINDOW_Y },
+
+ {"confirm_before_exit", CV_TYPE_BOOL, &CONFIRM_BEFORE_EXIT },
+ {"confirm_write_tag", CV_TYPE_BOOL, &CONFIRM_WRITE_TAG },
+ {"confirm_rename_file", CV_TYPE_BOOL, &CONFIRM_RENAME_FILE },
+ {"confirm_write_playlist", CV_TYPE_BOOL, &CONFIRM_WRITE_PLAYLIST },
+ {"confirm_delete_file", CV_TYPE_BOOL, &CONFIRM_DELETE_FILE },
+ {"process_filename_field", CV_TYPE_BOOL, &PROCESS_FILENAME_FIELD },
+ {"process_title_field", CV_TYPE_BOOL, &PROCESS_TITLE_FIELD },
+ {"process_artist_field", CV_TYPE_BOOL, &PROCESS_ARTIST_FIELD },
+ {"process_album_field", CV_TYPE_BOOL, &PROCESS_ALBUM_FIELD },
+ {"process_genre_field", CV_TYPE_BOOL, &PROCESS_GENRE_FIELD },
+ {"process_comment_field", CV_TYPE_BOOL, &PROCESS_COMMENT_FIELD },
+ {"process_composer_field", CV_TYPE_BOOL, &PROCESS_COMPOSER_FIELD },
+ {"process_orig_artist_field", CV_TYPE_BOOL, &PROCESS_ORIG_ARTIST_FIELD },
+ {"process_copyright_field", CV_TYPE_BOOL, &PROCESS_COPYRIGHT_FIELD },
+ {"process_url_field", CV_TYPE_BOOL, &PROCESS_URL_FIELD },
+ {"process_encoded_by_field", CV_TYPE_BOOL, &PROCESS_ENCODED_BY_FIELD },
+
+ {"pf_convert_into_space", CV_TYPE_BOOL, &PF_CONVERT_INTO_SPACE },
+ {"pf_convert_space", CV_TYPE_BOOL, &PF_CONVERT_SPACE },
+ {"pf_convert", CV_TYPE_BOOL, &PF_CONVERT },
+ {"pf_convert_all_uppercase", CV_TYPE_BOOL, &PF_CONVERT_ALL_UPPERCASE },
+ {"pf_convert_all_downcase", CV_TYPE_BOOL, &PF_CONVERT_ALL_DOWNCASE },
+ {"pf_convert_first_letter_uppercase", CV_TYPE_BOOL, &PF_CONVERT_FIRST_LETTER_UPPERCASE },
+ {"pf_convert_first_letters_uppercase", CV_TYPE_BOOL, &PF_CONVERT_FIRST_LETTERS_UPPERCASE },
+ {"pf_remove_space", CV_TYPE_BOOL, &PF_REMOVE_SPACE },
+ {"pf_insert_space", CV_TYPE_BOOL, &PF_INSERT_SPACE },
+ {"pf_only_one_space", CV_TYPE_BOOL, &PF_ONLY_ONE_SPACE },
+
+ {"playlist_name", CV_TYPE_STRING, &PLAYLIST_NAME },
+ {"playlist_use_mask_name", CV_TYPE_BOOL, &PLAYLIST_USE_MASK_NAME },
+ {"playlist_use_dir_name", CV_TYPE_BOOL, &PLAYLIST_USE_DIR_NAME },
+ {"playlist_only_selected_files", CV_TYPE_BOOL, &PLAYLIST_ONLY_SELECTED_FILES },
+ {"playlist_full_path", CV_TYPE_BOOL, &PLAYLIST_FULL_PATH },
+ {"playlist_relative_path", CV_TYPE_BOOL, &PLAYLIST_RELATIVE_PATH },
+ {"playlist_create_in_parent_dir", CV_TYPE_BOOL, &PLAYLIST_CREATE_IN_PARENT_DIR },
+ {"playlist_use_dos_separator", CV_TYPE_BOOL, &PLAYLIST_USE_DOS_SEPARATOR },
+ {"playlist_content_none", CV_TYPE_BOOL, &PLAYLIST_CONTENT_NONE },
+ {"playlist_content_filename", CV_TYPE_BOOL, &PLAYLIST_CONTENT_FILENAME },
+ {"playlist_content_mask", CV_TYPE_BOOL, &PLAYLIST_CONTENT_MASK },
+ {"playlist_content_mask_value", CV_TYPE_STRING, &PLAYLIST_CONTENT_MASK_VALUE },
+ {"playlist_window_x", CV_TYPE_INT, &PLAYLIST_WINDOW_X },
+ {"playlist_window_y", CV_TYPE_INT, &PLAYLIST_WINDOW_Y },
+ {"playlist_window_width", CV_TYPE_INT, &PLAYLIST_WINDOW_WIDTH },
+ {"playlist_window_height", CV_TYPE_INT, &PLAYLIST_WINDOW_HEIGHT },
+
+ {"load_file_run_scanner", CV_TYPE_BOOL, &LOAD_FILE_RUN_SCANNER },
+ {"load_file_window_x", CV_TYPE_INT, &LOAD_FILE_WINDOW_X },
+ {"load_file_window_y", CV_TYPE_INT, &LOAD_FILE_WINDOW_Y },
+ {"load_file_window_width", CV_TYPE_INT, &LOAD_FILE_WINDOW_WIDTH },
+ {"load_file_window_height", CV_TYPE_INT, &LOAD_FILE_WINDOW_HEIGHT },
+
+ {"cddb_server_name_automatic_search", CV_TYPE_STRING, &CDDB_SERVER_NAME_AUTOMATIC_SEARCH },
+ {"cddb_server_port_automatic_search", CV_TYPE_INT, &CDDB_SERVER_PORT_AUTOMATIC_SEARCH },
+ {"cddb_server_cgi_path_automatic_search", CV_TYPE_STRING, &CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH },
+ {"cddb_server_name_automatic_search2", CV_TYPE_STRING, &CDDB_SERVER_NAME_AUTOMATIC_SEARCH2 },
+ {"cddb_server_port_automatic_search2", CV_TYPE_INT, &CDDB_SERVER_PORT_AUTOMATIC_SEARCH2 },
+ {"cddb_server_cgi_path_automatic_search2", CV_TYPE_STRING, &CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2 },
+ {"cddb_server_name_manual_search", CV_TYPE_STRING, &CDDB_SERVER_NAME_MANUAL_SEARCH },
+ {"cddb_server_port_manual_search", CV_TYPE_INT, &CDDB_SERVER_PORT_MANUAL_SEARCH },
+ {"cddb_server_cgi_path_manual_search", CV_TYPE_STRING, &CDDB_SERVER_CGI_PATH_MANUAL_SEARCH },
+ {"cddb_local_path", CV_TYPE_STRING, &CDDB_LOCAL_PATH },
+ {"cddb_use_proxy", CV_TYPE_INT, &CDDB_USE_PROXY },
+ {"cddb_proxy_name", CV_TYPE_STRING, &CDDB_PROXY_NAME },
+ {"cddb_proxy_port", CV_TYPE_INT, &CDDB_PROXY_PORT },
+ {"cddb_proxy_user_name", CV_TYPE_STRING, &CDDB_PROXY_USER_NAME },
+ {"cddb_proxy_user_password", CV_TYPE_STRING, &CDDB_PROXY_USER_PASSWORD },
+ {"set_cddb_window_position", CV_TYPE_BOOL, &SET_CDDB_WINDOW_POSITION },
+ {"cddb_window_x", CV_TYPE_INT, &CDDB_WINDOW_X },
+ {"cddb_window_y", CV_TYPE_INT, &CDDB_WINDOW_Y },
+ {"cddb_window_height", CV_TYPE_INT, &CDDB_WINDOW_HEIGHT },
+ {"cddb_window_width", CV_TYPE_INT, &CDDB_WINDOW_WIDTH },
+ {"cddb_pane_handle_position", CV_TYPE_INT, &CDDB_PANE_HANDLE_POSITION },
+
+ {"cddb_follow_file", CV_TYPE_BOOL, &CDDB_FOLLOW_FILE },
+ {"cddb_use_dlm", CV_TYPE_BOOL, &CDDB_USE_DLM },
+ {"cddb_use_local_access", CV_TYPE_BOOL, &CDDB_USE_LOCAL_ACCESS },
+
+ {"cddb_search_in_all_fields", CV_TYPE_BOOL, &CDDB_SEARCH_IN_ALL_FIELDS },
+ {"cddb_search_in_artist_field", CV_TYPE_BOOL, &CDDB_SEARCH_IN_ARTIST_FIELD },
+ {"cddb_search_in_title_field", CV_TYPE_BOOL, &CDDB_SEARCH_IN_TITLE_FIELD },
+ {"cddb_search_in_track_name_field", CV_TYPE_BOOL, &CDDB_SEARCH_IN_TRACK_NAME_FIELD },
+ {"cddb_search_in_other_field", CV_TYPE_BOOL, &CDDB_SEARCH_IN_OTHER_FIELD },
+ {"cddb_show_categories", CV_TYPE_BOOL, &CDDB_SHOW_CATEGORIES },
+
+ {"cddb_search_in_all_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_ALL_CATEGORIES },
+ {"cddb_search_in_blues_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_BLUES_CATEGORY },
+ {"cddb_search_in_classical_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_CLASSICAL_CATEGORY },
+ {"cddb_search_in_country_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_COUNTRY_CATEGORY },
+ {"cddb_search_in_folk_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_FOLK_CATEGORY },
+ {"cddb_search_in_jazz_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_JAZZ_CATEGORY },
+ {"cddb_search_in_misc_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_MISC_CATEGORY },
+ {"cddb_search_in_newage_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_NEWAGE_CATEGORY },
+ {"cddb_search_in_reggae_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_REGGAE_CATEGORY },
+ {"cddb_search_in_rock_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_ROCK_CATEGORY },
+ {"cddb_search_in_soundtrack_categories", CV_TYPE_BOOL, &CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY },
+
+ {"cddb_set_to_all_fields", CV_TYPE_BOOL, &CDDB_SET_TO_ALL_FIELDS },
+ {"cddb_set_to_title", CV_TYPE_BOOL, &CDDB_SET_TO_TITLE },
+ {"cddb_set_to_artist", CV_TYPE_BOOL, &CDDB_SET_TO_ARTIST },
+ {"cddb_set_to_album", CV_TYPE_BOOL, &CDDB_SET_TO_ALBUM },
+ {"cddb_set_to_year", CV_TYPE_BOOL, &CDDB_SET_TO_YEAR },
+ {"cddb_set_to_track", CV_TYPE_BOOL, &CDDB_SET_TO_TRACK },
+ {"cddb_set_to_track_total", CV_TYPE_BOOL, &CDDB_SET_TO_TRACK_TOTAL },
+ {"cddb_set_to_genre", CV_TYPE_BOOL, &CDDB_SET_TO_GENRE },
+ {"cddb_set_to_file_name", CV_TYPE_BOOL, &CDDB_SET_TO_FILE_NAME },
+
+ {"cddb_run_scanner", CV_TYPE_BOOL, &CDDB_RUN_SCANNER },
+
+ {"set_search_window_position", CV_TYPE_BOOL, &SET_SEARCH_WINDOW_POSITION },
+ {"search_window_x", CV_TYPE_INT, &SEARCH_WINDOW_X },
+ {"search_window_y", CV_TYPE_INT, &SEARCH_WINDOW_Y },
+ {"search_window_height", CV_TYPE_INT, &SEARCH_WINDOW_HEIGHT },
+ {"search_window_width", CV_TYPE_INT, &SEARCH_WINDOW_WIDTH },
+ {"search_in_filename", CV_TYPE_BOOL, &SEARCH_IN_FILENAME },
+ {"search_in_tag", CV_TYPE_BOOL, &SEARCH_IN_TAG },
+ {"search_case_sensitive", CV_TYPE_BOOL, &SEARCH_CASE_SENSITIVE },
+
+ {"scan_tag_default_mask", CV_TYPE_STRING, &SCAN_TAG_DEFAULT_MASK },
+ {"rename_file_default_mask", CV_TYPE_STRING, &RENAME_FILE_DEFAULT_MASK },
+ {"rename_directory_default_mask", CV_TYPE_STRING, &RENAME_DIRECTORY_DEFAULT_MASK },
+ {"rename_directory_with_mask", CV_TYPE_BOOL, &RENAME_DIRECTORY_WITH_MASK },
+
+ {"options_notebook_page", CV_TYPE_INT, &OPTIONS_NOTEBOOK_PAGE },
+ {"options_window_height", CV_TYPE_INT, &OPTIONS_WINDOW_HEIGHT },
+ {"options_window_width", CV_TYPE_INT, &OPTIONS_WINDOW_WIDTH }
+
+};
+
+
+
+
+/*************
+ * Functions *
+ *************/
+
+/*
+ * Define and Load default values into config variables
+ */
+void Init_Config_Variables (void)
+{
+
+ /*
+ * Common
+ */
+ LOAD_ON_STARTUP = 1;
+ DEFAULT_PATH_TO_MP3 = g_strdup(HOME_VARIABLE);
+ BROWSE_SUBDIR = 1;
+#ifdef WIN32
+ BROWSE_HIDDEN_DIR = 1;
+#else
+ BROWSE_HIDDEN_DIR = 0;
+#endif
+ OPEN_SELECTED_BROWSER_NODE = 1;
+
+ /*
+ * Misc
+ */
+ SET_MAIN_WINDOW_POSITION = 1; // Set it to '0' if problem with some Windows Manager
+ MAIN_WINDOW_X = -1; // '-1' lets the Windows Manager to place the window
+ MAIN_WINDOW_Y = -1;
+ MAIN_WINDOW_WIDTH = 1040;
+ MAIN_WINDOW_HEIGHT = -1;
+ PANE_HANDLE_POSITION1 = 660;
+ PANE_HANDLE_POSITION2 = 360;
+ PANE_HANDLE_POSITION3 = 300;
+ PANE_HANDLE_POSITION4 = 300;
+ SHOW_HEADER_INFO = 1;
+ CHANGED_FILES_DISPLAYED_TO_RED = 1;
+ CHANGED_FILES_DISPLAYED_TO_BOLD = 0;
+
+ DATE_AUTO_COMPLETION = 1;
+ NUMBER_TRACK_FORMATED = 1;
+ NUMBER_TRACK_FORMATED_SPIN_BUTTON = 2;
+ OGG_TAG_WRITE_XMMS_COMMENT = 1;
+ SET_FOCUS_TO_SAME_TAG_FIELD = 1;
+ SET_FOCUS_TO_FIRST_TAG_FIELD = 0;
+ SORTING_FILE_MODE = SORTING_BY_ASCENDING_FILENAME;
+#ifdef WIN32
+ SORTING_FILE_CASE_SENSITIVE = 1;
+#else
+ SORTING_FILE_CASE_SENSITIVE = 0;
+#endif
+
+ MESSAGE_BOX_POSITION_NONE = 0;
+ MESSAGE_BOX_POSITION_CENTER = 0;
+ MESSAGE_BOX_POSITION_MOUSE = 0;
+ MESSAGE_BOX_POSITION_CENTER_ON_PARENT = 1;
+
+#ifdef WIN32
+ AUDIO_FILE_PLAYER = ET_Win32_Get_Audio_File_Player();
+#else
+ AUDIO_FILE_PLAYER = g_strdup("xmms -p");
+#endif
+
+ /*
+ * File Settings
+ */
+ REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME = 1;
+ FILENAME_EXTENSION_LOWER_CASE = 1;
+ FILENAME_EXTENSION_UPPER_CASE = 0;
+ FILENAME_EXTENSION_NO_CHANGE = 0;
+ PRESERVE_MODIFICATION_TIME = 1;
+
+ FILENAME_CHARACTER_SET_OTHER = 1;
+ FILENAME_CHARACTER_SET_APPROXIMATE = 0;
+ FILENAME_CHARACTER_SET_DISCARD = 0;
+
+ /*
+ * Tag Settings
+ */
+ WRITE_ID3_TAGS_IN_FLAC_FILE = 0;
+ STRIP_TAG_WHEN_EMPTY_FIELDS = 1;
+ CONVERT_OLD_ID3V2_TAG_VERSION = 1;
+ USE_NON_STANDARD_ID3_READING_CHARACTER_SET = 0;
+ FILE_READING_ID3V1V2_CHARACTER_SET = g_strdup("UTF-8");
+ FILE_WRITING_ID3V2_WRITE_TAG = 1;
+ FILE_WRITING_ID3V2_VERSION_4 = 1;
+ FILE_WRITING_ID3V2_USE_CRC32 = 0;
+ FILE_WRITING_ID3V2_USE_COMPRESSION = 0;
+ FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET = 1;
+ FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET = g_strdup("UTF-8");
+ FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET = g_strdup("ISO-8859-1");
+ FILE_WRITING_ID3V2_ICONV_OPTIONS_NO = 1;
+ FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT = 0;
+ FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE = 0;
+ FILE_WRITING_ID3V1_WRITE_TAG = 1;
+ FILE_WRITING_ID3V1_CHARACTER_SET = g_strdup("ISO-8859-1");
+ FILE_WRITING_ID3V1_ICONV_OPTIONS_NO = 1;
+ FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT = 0;
+ FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE = 0;
+
+ /*
+ * Scanner
+ */
+ SCANNER_TYPE = SCANNER_FILL_TAG;
+ SCAN_MASK_EDITOR_BUTTON = 0;
+ SCAN_LEGEND_BUTTON = 0;
+ FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = 1;
+ FTS_CONVERT_SPACE_INTO_UNDERSCORE = 0;
+ RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = 1;
+ RFS_CONVERT_SPACE_INTO_UNDERSCORE = 0;
+ PFS_DONT_UPPER_SOME_WORDS = 0;
+ OVERWRITE_TAG_FIELD = 1;
+ SET_DEFAULT_COMMENT = 0;
+ DEFAULT_COMMENT = g_strdup("Tagged with EasyTAG");
+ SET_CRC32_COMMENT = 0;
+ OPEN_SCANNER_WINDOW_ON_STARTUP = 0;
+ SCANNER_WINDOW_ON_TOP = 1;
+ SET_SCANNER_WINDOW_POSITION = 1; // Set it to '0' if problem with some Windows Manager
+ SCANNER_WINDOW_X = -1;
+ SCANNER_WINDOW_Y = -1;
+
+ /*
+ * Confirmation
+ */
+ CONFIRM_BEFORE_EXIT = 1;
+ CONFIRM_WRITE_TAG = 1;
+ CONFIRM_RENAME_FILE = 1;
+ CONFIRM_DELETE_FILE = 1;
+ CONFIRM_WRITE_PLAYLIST = 1;
+
+ /*
+ * Scanner window
+ */
+ PROCESS_FILENAME_FIELD = 0;
+ PROCESS_TITLE_FIELD = 1;
+ PROCESS_ARTIST_FIELD = 1;
+ PROCESS_ALBUM_FIELD = 1;
+ PROCESS_GENRE_FIELD = 1;
+ PROCESS_COMMENT_FIELD = 1;
+ PROCESS_COMPOSER_FIELD = 1;
+ PROCESS_ORIG_ARTIST_FIELD = 1;
+ PROCESS_COPYRIGHT_FIELD = 1;
+ PROCESS_URL_FIELD = 1;
+ PROCESS_ENCODED_BY_FIELD = 1;
+
+ PF_CONVERT_INTO_SPACE = 1;
+ PF_CONVERT_SPACE = 0;
+ PF_CONVERT = 0;
+ PF_CONVERT_ALL_UPPERCASE = 0;
+ PF_CONVERT_ALL_DOWNCASE = 0;
+ PF_CONVERT_FIRST_LETTER_UPPERCASE = 0;
+ PF_CONVERT_FIRST_LETTERS_UPPERCASE = 1;
+ PF_REMOVE_SPACE = 0;
+ PF_INSERT_SPACE = 0;
+ PF_ONLY_ONE_SPACE = 1;
+
+ /*
+ * Playlist window
+ */
+ PLAYLIST_NAME = g_strdup("playlist_%a_-_%b");
+ PLAYLIST_USE_MASK_NAME = 0;
+ PLAYLIST_USE_DIR_NAME = 1;
+ PLAYLIST_ONLY_SELECTED_FILES = 1;
+ PLAYLIST_FULL_PATH = 0;
+ PLAYLIST_RELATIVE_PATH = 1;
+ PLAYLIST_CREATE_IN_PARENT_DIR = 0;
+ PLAYLIST_USE_DOS_SEPARATOR = 0;
+ PLAYLIST_CONTENT_NONE = 0;
+ PLAYLIST_CONTENT_FILENAME = 1;
+ PLAYLIST_CONTENT_MASK = 0;
+ PLAYLIST_CONTENT_MASK_VALUE = g_strdup("%n/%l - %a - %b - %t");
+
+ PLAYLIST_WINDOW_X = -1;
+ PLAYLIST_WINDOW_Y = -1;
+ PLAYLIST_WINDOW_WIDTH = -1;
+ PLAYLIST_WINDOW_HEIGHT = -1;
+
+ /*
+ * Load File window
+ */
+ LOAD_FILE_RUN_SCANNER = 0;
+ LOAD_FILE_WINDOW_X = -1;
+ LOAD_FILE_WINDOW_Y = -1;
+ LOAD_FILE_WINDOW_WIDTH = -1;
+ LOAD_FILE_WINDOW_HEIGHT = -1;
+
+ /*
+ * CDDB window
+ */
+ CDDB_SERVER_NAME_AUTOMATIC_SEARCH = g_strdup("freedb.freedb.org");
+ CDDB_SERVER_PORT_AUTOMATIC_SEARCH = 80;
+ CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH = g_strdup("/~cddb/cddb.cgi");
+ CDDB_SERVER_NAME_AUTOMATIC_SEARCH2 = g_strdup("freedb.musicbrainz.org");
+ CDDB_SERVER_PORT_AUTOMATIC_SEARCH2 = 80;
+ CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2 = g_strdup("/~cddb/cddb.cgi");
+ CDDB_SERVER_NAME_MANUAL_SEARCH = g_strdup("www.gnudb.org");
+ CDDB_SERVER_PORT_MANUAL_SEARCH = 80;
+ CDDB_SERVER_CGI_PATH_MANUAL_SEARCH = g_strdup("/~cddb/cddb.cgi");
+ CDDB_LOCAL_PATH = NULL;
+ CDDB_USE_PROXY = 0;
+ CDDB_PROXY_NAME = g_strdup("localhost");
+ CDDB_PROXY_PORT = 8080;
+ CDDB_PROXY_USER_NAME = NULL;
+ CDDB_PROXY_USER_PASSWORD = NULL;
+
+ SET_CDDB_WINDOW_POSITION = 1; // Set it to '0' if problem with some Windows Manager
+ CDDB_WINDOW_X = -1;
+ CDDB_WINDOW_Y = -1;
+ CDDB_WINDOW_WIDTH = 660;
+ CDDB_WINDOW_HEIGHT = 470;
+ CDDB_PANE_HANDLE_POSITION = 350;
+
+ CDDB_FOLLOW_FILE = 1;
+ CDDB_USE_DLM = 0;
+ CDDB_USE_LOCAL_ACCESS = 0;
+
+ CDDB_SEARCH_IN_ALL_FIELDS = 0;
+ CDDB_SEARCH_IN_ARTIST_FIELD = 1;
+ CDDB_SEARCH_IN_TITLE_FIELD = 1;
+ CDDB_SEARCH_IN_TRACK_NAME_FIELD = 0;
+ CDDB_SEARCH_IN_OTHER_FIELD = 0;
+ CDDB_SHOW_CATEGORIES = 0;
+
+ CDDB_SEARCH_IN_ALL_CATEGORIES = 1;
+ CDDB_SEARCH_IN_BLUES_CATEGORY = 0;
+ CDDB_SEARCH_IN_CLASSICAL_CATEGORY = 0;
+ CDDB_SEARCH_IN_COUNTRY_CATEGORY = 0;
+ CDDB_SEARCH_IN_FOLK_CATEGORY = 0;
+ CDDB_SEARCH_IN_JAZZ_CATEGORY = 0;
+ CDDB_SEARCH_IN_MISC_CATEGORY = 1;
+ CDDB_SEARCH_IN_NEWAGE_CATEGORY = 1;
+ CDDB_SEARCH_IN_REGGAE_CATEGORY = 0;
+ CDDB_SEARCH_IN_ROCK_CATEGORY = 1;
+ CDDB_SEARCH_IN_SOUNDTRACK_CATEGORY = 0;
+
+ CDDB_SET_TO_ALL_FIELDS = 1;
+ CDDB_SET_TO_TITLE = 1;
+ CDDB_SET_TO_ARTIST = 0;
+ CDDB_SET_TO_ALBUM = 0;
+ CDDB_SET_TO_YEAR = 0;
+ CDDB_SET_TO_TRACK = 1;
+ CDDB_SET_TO_TRACK_TOTAL = 1;
+ CDDB_SET_TO_GENRE = 0;
+ CDDB_SET_TO_FILE_NAME = 1;
+
+ CDDB_RUN_SCANNER = 0;
+
+ /*
+ * Search window
+ */
+ SET_SEARCH_WINDOW_POSITION = 1; // Set it to '0' if problem with some Windows Manager
+ SEARCH_WINDOW_X = -1;
+ SEARCH_WINDOW_Y = -1;
+ SEARCH_WINDOW_HEIGHT = 350;
+ SEARCH_WINDOW_WIDTH = 650;
+ SEARCH_IN_FILENAME = 1;
+ SEARCH_IN_TAG = 1;
+ SEARCH_CASE_SENSITIVE = 0;
+
+ /*
+ * Masks
+ */
+ SCAN_TAG_DEFAULT_MASK = NULL;
+ RENAME_FILE_DEFAULT_MASK = NULL;
+ RENAME_DIRECTORY_DEFAULT_MASK = NULL;
+ RENAME_DIRECTORY_WITH_MASK = 0;
+
+ /*
+ * Other parameters
+ */
+ OPTIONS_NOTEBOOK_PAGE = 0;
+ OPTIONS_WINDOW_HEIGHT = 300;
+ OPTIONS_WINDOW_WIDTH = 400;
+
+}
+
+
+
+/*
+ * Function called when pressing the "Save" button of the preferences window.
+ * Save into the config variables the settings of each tab of the Preferences window...
+ * If settings needs to be "shown/applied" to the corresponding window, we do it
+ */
+void Apply_Changes_Of_Preferences_Window (void)
+{
+ gchar *temp;
+ int active;
+
+ if (OptionsWindow)
+ {
+ /* Common */
+ LOAD_ON_STARTUP = GTK_TOGGLE_BUTTON(LoadOnStartup)->active;
+ if (DEFAULT_PATH_TO_MP3) g_free(DEFAULT_PATH_TO_MP3);
+ DEFAULT_PATH_TO_MP3 = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(DefaultPathToMp3)->child))); // Saved in UTF-8
+//#ifdef WIN32
+// ET_Win32_Path_Replace_Backslashes(DEFAULT_PATH_TO_MP3);
+//#endif
+ BROWSE_SUBDIR = GTK_TOGGLE_BUTTON(BrowseSubdir)->active;
+ BROWSE_HIDDEN_DIR = GTK_TOGGLE_BUTTON(BrowseHiddendir)->active;
+ OPEN_SELECTED_BROWSER_NODE = GTK_TOGGLE_BUTTON(OpenSelectedBrowserNode)->active;
+
+ /* User interface */
+ SHOW_HEADER_INFO = GTK_TOGGLE_BUTTON(ShowHeaderInfos)->active;
+ // We reload the list if the selected style have changed
+ if (CHANGED_FILES_DISPLAYED_TO_RED != GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToRed)->active)
+ {
+ CHANGED_FILES_DISPLAYED_TO_RED = GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToRed)->active;
+ CHANGED_FILES_DISPLAYED_TO_BOLD = GTK_TOGGLE_BUTTON(ChangedFilesDisplayedToBold)->active;
+ Browser_List_Refresh_Whole_List();
+ }
+
+ /* Misc */
+ DATE_AUTO_COMPLETION = GTK_TOGGLE_BUTTON(DateAutoCompletion)->active;
+ NUMBER_TRACK_FORMATED = GTK_TOGGLE_BUTTON(NumberTrackFormated)->active;
+ NUMBER_TRACK_FORMATED_SPIN_BUTTON = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(NumberTrackFormatedSpinButton));
+ OGG_TAG_WRITE_XMMS_COMMENT = GTK_TOGGLE_BUTTON(OggTagWriteXmmsComment)->active;
+ SORTING_FILE_CASE_SENSITIVE = GTK_TOGGLE_BUTTON(SortingFileCaseSensitive)->active;
+ SET_FOCUS_TO_SAME_TAG_FIELD = GTK_TOGGLE_BUTTON(SetFocusToSameTagField)->active;
+ SET_FOCUS_TO_FIRST_TAG_FIELD = GTK_TOGGLE_BUTTON(SetFocusToFirstTagField)->active;
+
+ SORTING_FILE_MODE = gtk_combo_box_get_active(GTK_COMBO_BOX(SortingFileCombo));
+
+ MESSAGE_BOX_POSITION_NONE = GTK_TOGGLE_BUTTON(MessageBoxPositionNone)->active;
+ MESSAGE_BOX_POSITION_CENTER = GTK_TOGGLE_BUTTON(MessageBoxPositionCenter)->active;
+ MESSAGE_BOX_POSITION_MOUSE = GTK_TOGGLE_BUTTON(MessageBoxPositionMouse)->active;
+ MESSAGE_BOX_POSITION_CENTER_ON_PARENT = GTK_TOGGLE_BUTTON(MessageBoxPositionCenterOnParent)->active;
+
+ if (AUDIO_FILE_PLAYER) g_free(AUDIO_FILE_PLAYER);
+ AUDIO_FILE_PLAYER = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(FilePlayerCombo)->child)));
+
+ /* File Settings */
+ REPLACE_ILLEGAL_CHARACTERS_IN_FILENAME = GTK_TOGGLE_BUTTON(ReplaceIllegalCharactersInFilename)->active;
+ FILENAME_EXTENSION_LOWER_CASE = GTK_TOGGLE_BUTTON(FilenameExtensionLowerCase)->active;
+ FILENAME_EXTENSION_UPPER_CASE = GTK_TOGGLE_BUTTON(FilenameExtensionUpperCase)->active;
+ FILENAME_EXTENSION_NO_CHANGE = GTK_TOGGLE_BUTTON(FilenameExtensionNoChange)->active;
+ PRESERVE_MODIFICATION_TIME = GTK_TOGGLE_BUTTON(PreserveModificationTime)->active;
+
+ FILENAME_CHARACTER_SET_OTHER = GTK_TOGGLE_BUTTON(FilenameCharacterSetOther)->active;
+ FILENAME_CHARACTER_SET_APPROXIMATE = GTK_TOGGLE_BUTTON(FilenameCharacterSetApproximate)->active;
+ FILENAME_CHARACTER_SET_DISCARD = GTK_TOGGLE_BUTTON(FilenameCharacterSetDiscard)->active;
+
+ /* Tag Settings */
+ WRITE_ID3_TAGS_IN_FLAC_FILE = GTK_TOGGLE_BUTTON(WriteId3TagsInFlacFiles)->active;
+ STRIP_TAG_WHEN_EMPTY_FIELDS = GTK_TOGGLE_BUTTON(StripTagWhenEmptyFields)->active;
+ CONVERT_OLD_ID3V2_TAG_VERSION = GTK_TOGGLE_BUTTON(ConvertOldId3v2TagVersion)->active;
+ USE_NON_STANDARD_ID3_READING_CHARACTER_SET = GTK_TOGGLE_BUTTON(UseNonStandardId3ReadingCharacterSet)->active;
+
+#ifdef ENABLE_ID3LIB
+ active = gtk_combo_box_get_active(GTK_COMBO_BOX(FileWritingId3v2VersionCombo));
+ FILE_WRITING_ID3V2_VERSION_4 = !active;
+#else
+ FILE_WRITING_ID3V2_VERSION_4 = 1;
+#endif
+ temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileReadingId3v1v2CharacterSetCombo));
+ FILE_READING_ID3V1V2_CHARACTER_SET = Charset_Get_Name_From_Title(temp);
+ g_free(temp);
+
+ FILE_WRITING_ID3V2_WRITE_TAG = GTK_TOGGLE_BUTTON(FileWritingId3v2WriteTag)->active;
+ FILE_WRITING_ID3V2_USE_CRC32 = GTK_TOGGLE_BUTTON(FileWritingId3v2UseCrc32)->active;
+ FILE_WRITING_ID3V2_USE_COMPRESSION = GTK_TOGGLE_BUTTON(FileWritingId3v2UseCompression)->active;
+ FILE_WRITING_ID3V2_USE_UNICODE_CHARACTER_SET = GTK_TOGGLE_BUTTON(FileWritingId3v2UseUnicodeCharacterSet)->active;
+
+ active = gtk_combo_box_get_active(GTK_COMBO_BOX(FileWritingId3v2UnicodeCharacterSetCombo));
+ FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET = (active == 1) ? "UTF-16" : "UTF-8";
+
+ temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileWritingId3v2NoUnicodeCharacterSetCombo));
+ FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET = Charset_Get_Name_From_Title(temp);
+ g_free(temp);
+
+ FILE_WRITING_ID3V2_ICONV_OPTIONS_NO = GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsNo)->active;
+ FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT = GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsTranslit)->active;
+ FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE = GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsIgnore)->active;
+
+ FILE_WRITING_ID3V1_WRITE_TAG = GTK_TOGGLE_BUTTON(FileWritingId3v1WriteTag)->active;
+ temp = Get_Active_Combo_Box_Item(GTK_COMBO_BOX(FileWritingId3v1CharacterSetCombo));
+ FILE_WRITING_ID3V1_CHARACTER_SET = Charset_Get_Name_From_Title(temp);
+ g_free(temp);
+
+ FILE_WRITING_ID3V1_ICONV_OPTIONS_NO = GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsNo)->active;
+ FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT = GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsTranslit)->active;
+ FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE = GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsIgnore)->active;
+
+ /* Scanner */
+ // Fill Tag Scanner
+ FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = GTK_TOGGLE_BUTTON(FTSConvertUnderscoreAndP20IntoSpace)->active;
+ FTS_CONVERT_SPACE_INTO_UNDERSCORE = GTK_TOGGLE_BUTTON(FTSConvertSpaceIntoUnderscore)->active;
+ // Rename File Scanner
+ RFS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = GTK_TOGGLE_BUTTON(RFSConvertUnderscoreAndP20IntoSpace)->active;
+ RFS_CONVERT_SPACE_INTO_UNDERSCORE = GTK_TOGGLE_BUTTON(RFSConvertSpaceIntoUnderscore)->active;
+ // Process File Scanner
+ PFS_DONT_UPPER_SOME_WORDS = GTK_TOGGLE_BUTTON(PFSDontUpperSomeWords)->active;
+
+ OVERWRITE_TAG_FIELD = GTK_TOGGLE_BUTTON(OverwriteTagField)->active;
+ SET_DEFAULT_COMMENT = GTK_TOGGLE_BUTTON(SetDefaultComment)->active;
+ if (DEFAULT_COMMENT) g_free(DEFAULT_COMMENT);
+ DEFAULT_COMMENT = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(DefaultComment)->child)));
+ SET_CRC32_COMMENT = GTK_TOGGLE_BUTTON(Crc32Comment)->active;
+
+ OPEN_SCANNER_WINDOW_ON_STARTUP = GTK_TOGGLE_BUTTON(OpenScannerWindowOnStartup)->active;
+ SCANNER_WINDOW_ON_TOP = GTK_TOGGLE_BUTTON(ScannerWindowOnTop)->active;
+
+ /* CDDB */
+ if (CDDB_SERVER_NAME_AUTOMATIC_SEARCH) g_free(CDDB_SERVER_NAME_AUTOMATIC_SEARCH);
+ CDDB_SERVER_NAME_AUTOMATIC_SEARCH = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(CddbServerNameAutomaticSearch)->child)));
+ CDDB_SERVER_PORT_AUTOMATIC_SEARCH = atoi(gtk_entry_get_text(GTK_ENTRY(CddbServerPortAutomaticSearch)));
+ if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH) g_free(CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH);
+ CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch)));
+
+ if (CDDB_SERVER_NAME_AUTOMATIC_SEARCH2) g_free(CDDB_SERVER_NAME_AUTOMATIC_SEARCH2);
+ CDDB_SERVER_NAME_AUTOMATIC_SEARCH2 = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(CddbServerNameAutomaticSearch2)->child)));
+ CDDB_SERVER_PORT_AUTOMATIC_SEARCH2 = atoi(gtk_entry_get_text(GTK_ENTRY(CddbServerPortAutomaticSearch2)));
+ if (CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2) g_free(CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2);
+ CDDB_SERVER_CGI_PATH_AUTOMATIC_SEARCH2 = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbServerCgiPathAutomaticSearch2)));
+
+ if (CDDB_SERVER_NAME_MANUAL_SEARCH) g_free(CDDB_SERVER_NAME_MANUAL_SEARCH);
+ CDDB_SERVER_NAME_MANUAL_SEARCH = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(CddbServerNameManualSearch)->child)));
+ CDDB_SERVER_PORT_MANUAL_SEARCH = atoi(gtk_entry_get_text(GTK_ENTRY(CddbServerPortManualSearch)));
+ if (CDDB_SERVER_CGI_PATH_MANUAL_SEARCH) g_free(CDDB_SERVER_CGI_PATH_MANUAL_SEARCH);
+ CDDB_SERVER_CGI_PATH_MANUAL_SEARCH = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbServerCgiPathManualSearch)));
+
+ if (CDDB_LOCAL_PATH) g_free(CDDB_LOCAL_PATH);
+ CDDB_LOCAL_PATH = g_strdup(gtk_entry_get_text(GTK_ENTRY(GTK_BIN(CddbLocalPath)->child)));
+
+ CDDB_USE_PROXY = GTK_TOGGLE_BUTTON(CddbUseProxy)->active;
+ if (CDDB_PROXY_NAME) g_free(CDDB_PROXY_NAME);
+ CDDB_PROXY_NAME = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbProxyName)));
+ CDDB_PROXY_PORT = atoi(gtk_entry_get_text(GTK_ENTRY(CddbProxyPort)));
+ if (CDDB_PROXY_USER_NAME) g_free(CDDB_PROXY_USER_NAME);
+ CDDB_PROXY_USER_NAME = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbProxyUserName)));
+ if (CDDB_PROXY_USER_PASSWORD) g_free(CDDB_PROXY_USER_PASSWORD);
+ CDDB_PROXY_USER_PASSWORD = g_strdup(gtk_entry_get_text(GTK_ENTRY(CddbProxyUserPassword)));
+
+ CDDB_FOLLOW_FILE = GTK_TOGGLE_BUTTON(CddbFollowFile)->active;
+ CDDB_USE_DLM = GTK_TOGGLE_BUTTON(CddbUseDLM)->active;
+
+ /* Confirmation */
+ CONFIRM_BEFORE_EXIT = GTK_TOGGLE_BUTTON(ConfirmBeforeExit)->active;
+ CONFIRM_WRITE_TAG = GTK_TOGGLE_BUTTON(ConfirmWriteTag)->active;
+ CONFIRM_RENAME_FILE = GTK_TOGGLE_BUTTON(ConfirmRenameFile)->active;
+ CONFIRM_DELETE_FILE = GTK_TOGGLE_BUTTON(ConfirmDeleteFile)->active;
+ CONFIRM_WRITE_PLAYLIST = GTK_TOGGLE_BUTTON(ConfirmWritePlayList)->active;
+
+ /* Parameters and variables of Scanner Window are in "scan.c" file */
+ /* Parameters and variables of Cddb Window are in "cddb.c" file */
+ }
+
+ /*
+ * Changes to apply to :
+ */
+ if (MainWindow)
+ {
+ if (SHOW_HEADER_INFO) gtk_widget_show_all(HeaderInfosTable);
+ else gtk_widget_hide_all(HeaderInfosTable);
+
+ /* Update state of check-menu-item into main/popup menu to browse subdirs */
+ Check_Menu_Item_Update_Browse_Subdir();
+
+ /* Update state of check-menu-item into main/popup menu to show hidden directories */
+ Check_Menu_Item_Update_Browse_Hidden_Dir();
+
+ /* Reload if number of character changed for track list */
+ //Load_Track_List_To_UI();
+
+ /* Reload directory, in case we have changed BROWSE_HIDDEN_DIR */
+ // FIX ME : commented as it reloads files...
+ //Browser_Tree_Rebuild(NULL);
+ }
+
+ if (ScannerWindow)
+ {
+ if (SCANNER_WINDOW_ON_TOP)
+ gtk_window_set_transient_for(GTK_WINDOW(ScannerWindow),GTK_WINDOW(MainWindow));
+ else
+ gtk_window_set_transient_for(GTK_WINDOW(ScannerWindow),NULL);
+ }
+
+}
+
+/*
+ * Save into the config variables the settings of each window
+ * - Position/size of the window
+ * - Specific options in the window
+ */
+void Apply_Changes_Of_UI (void)
+{
+ /*
+ * Changes in user interface
+ */
+
+ // Configuration of the main window (see easytag.c) - Function also called when destroying the window
+ MainWindow_Apply_Changes();
+
+ // Configuration of the preference window (see prefs.c) - Function also called when destroying the window
+ OptionsWindow_Apply_Changes();
+
+ // Configuration of the scanner window (see scan.c) - Function also called when destroying the window
+ ScannerWindow_Apply_Changes();
+
+ // Configuration of the cddb window (see cddb.c) - Function also called when destroying the window
+ Cddb_Window_Apply_Changes();
+
+ // Configuration of the playlist window (see misc.c) - Function also called when destroying the window
+ Write_Playlist_Window_Apply_Changes();
+
+ // Configuration of the search_file window (see misc.c) - Function also called when destroying the window
+ Search_File_Window_Apply_Changes();
+
+ // Configuration of the load_filename window (see misc.c) - Function also called when destroying the window
+ Load_Filename_Window_Apply_Changes();
+
+}
+
+void Save_Changes_Of_UI (void)
+{
+ Apply_Changes_Of_UI();
+ Save_Config_To_File();
+}
+
+void Save_Changes_Of_Preferences_Window (void)
+{
+ Apply_Changes_Of_Preferences_Window();
+ Save_Config_To_File();
+
+ Statusbar_Message(_("Configuration saved"),TRUE);
+}
+
+
+
+/*
+ * Write the config file
+ */
+void Save_Config_To_File (void)
+{
+ gchar *file_path = NULL;
+ FILE *file;
+
+ /* The file to write */
+ if (!HOME_VARIABLE) return;
+ file_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR ? G_DIR_SEPARATOR_S : "",
+ CONFIG_FILE,NULL);
+
+ if ( Create_Easytag_Directory()==0 || (file=fopen(file_path,"w+"))==0 )
+ {
+ Log_Print(_("ERROR: Can't write config file: %s (%s)"),file_path,g_strerror(errno));
+ }else
+ {
+ gint ConfigVarListLen = sizeof(Config_Variables)/sizeof(tConfigVariable);
+ gint i;
+ gchar *data = NULL;
+
+ for (i=0; i<ConfigVarListLen; i++)
+ {
+ switch (Config_Variables[i].type)
+ {
+ case CV_TYPE_INT:
+ {
+ data = g_strdup_printf("%s=%i\n",Config_Variables[i].name,
+ *(int *)Config_Variables[i].pointer);
+ fwrite(data,strlen(data),1,file);
+ //g_print("# (type:%d) %s",Config_Variables[i].type,data);
+ g_free(data);
+ break;
+ }
+ case CV_TYPE_BOOL:
+ {
+ data = g_strdup_printf("%s=%i\n",Config_Variables[i].name,
+ ( *(int *)Config_Variables[i].pointer ? 1 : 0 ));
+ fwrite(data,strlen(data),1,file);
+ //g_print("# (type:%d) %s",Config_Variables[i].type,data);
+ g_free(data);
+ break;
+ }
+ case CV_TYPE_STRING:
+ {
+ /* Doesn't write datum if empty */
+ if ( (*(char **)Config_Variables[i].pointer)==NULL ) break;
+
+ data = g_strdup_printf("%s=%s\n",Config_Variables[i].name,
+ *(char **)Config_Variables[i].pointer);
+ fwrite(data,strlen(data),1,file);
+ //g_print("# (type:%d) %s",Config_Variables[i].type,data);
+ g_free(data);
+ break;
+ }
+ default:
+ {
+ Log_Print("ERROR: Can't save: type of config variable not supported "
+ "for '%s'!",Config_Variables[i].name);
+ break;
+ }
+ }
+ }
+ fclose(file);
+ }
+ g_free(file_path);
+
+ //Display_Config();
+}
+
+
+/*
+ * Parse lines read (line as <var_description>=<value>) and load the values
+ * into the corresponding config variables.
+ */
+void Set_Config (gchar *line)
+{
+ gchar *var_descriptor;
+ gchar *var_value;
+ gint ConfigVarListLen;
+ gint i;
+
+ if (*line=='\n' || *line=='#') return;
+
+ /* Cut string */
+ var_descriptor = (gchar*)strtok(line,"=");
+ var_value = (gchar*)strtok(NULL,"=");
+ //g_print("\nstr1:'%s',\t str2:'%s'",var_descriptor,var_value);
+
+ ConfigVarListLen = sizeof(Config_Variables)/sizeof(tConfigVariable);
+ for (i=0; i<ConfigVarListLen; i++)
+ {
+ if (Config_Variables[i].name!=NULL && var_descriptor
+ && !strcmp(Config_Variables[i].name,var_descriptor))
+ {
+ switch (Config_Variables[i].type)
+ {
+ case CV_TYPE_INT:
+ {
+ *(int *)Config_Variables[i].pointer = strtol(var_value, NULL, 10);
+ break;
+ }
+
+ case CV_TYPE_BOOL:
+ {
+ if (strtol(var_value, NULL, 10))
+ *(int *)Config_Variables[i].pointer = 1;
+ else
+ *(int *)Config_Variables[i].pointer = 0;
+ break;
+ }
+
+ case CV_TYPE_STRING:
+ {
+ if (!var_value)
+ {
+ *(char **)Config_Variables[i].pointer = NULL;
+ //g_print("\nConfig File Warning: Field of '%s' has no value!\n",var_descriptor);
+ } else
+ {
+ if ( *(char **)Config_Variables[i].pointer != NULL )
+ g_free(*(char **)Config_Variables[i].pointer);
+ *(char **)Config_Variables[i].pointer = g_malloc(strlen(var_value)+1);
+ strcpy( *(char **)Config_Variables[i].pointer,var_value );
+ }
+ break;
+ }
+
+ default:
+ {
+ Log_Print("ERROR: Can't read: type of config variable not supported "
+ "for '%s'!",Config_Variables[i].name);
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+/*
+ * Read config from config file
+ */
+void Read_Config (void)
+{
+ gchar *file_path = NULL;
+ FILE *file;
+ gchar buffer[MAX_STRING_LEN];
+
+ /* The file to read */
+ if (!HOME_VARIABLE) return;
+ file_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ CONFIG_FILE,NULL);
+
+ if ( (file=fopen(file_path,"r"))==0 )
+ {
+ Log_Print(_("Can't open configuration file '%s' (%s)"),file_path,g_strerror(errno));
+ Log_Print(_("Loading default configuration..."));
+ }else
+ {
+ while (fgets(buffer,sizeof(buffer),file))
+ {
+ if (buffer[strlen(buffer)-1]=='\n')
+ buffer[strlen(buffer)-1]='\0';
+ Set_Config(buffer);
+ }
+ fclose(file);
+
+ // Force this configuration! - Disabled as it is boring for russian people
+ //USE_ISO_8859_1_CHARACTER_SET_TRANSLATION = 1;
+ //USE_CHARACTER_SET_TRANSLATION = 0;
+ }
+ g_free(file_path);
+}
+
+
+/*
+ * Display values in config variables
+ * For debuging only!
+ */
+void Display_Config (void)
+{
+ gchar *file_path = NULL;
+ FILE *file;
+
+ /* The file to write */
+ if (!HOME_VARIABLE) return;
+ file_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ CONFIG_FILE,NULL);
+
+ if ( (file=fopen(file_path,"r"))==0 )
+ {
+ g_print(_("Can't open configuration file '%s' (%s)"),file_path,g_strerror(errno));
+ }else
+ {
+ gint ConfigVarListLen = sizeof(Config_Variables)/sizeof(tConfigVariable);
+ gint i;
+
+ g_print("\n## Current Config ##");
+ for (i=0; i<ConfigVarListLen; i++)
+ {
+ switch(Config_Variables[i].type)
+ {
+ case CV_TYPE_INT:
+ case CV_TYPE_BOOL:
+ {
+ g_print("\n%d: %s=%d",i,Config_Variables[i].name,
+ *(int*)Config_Variables[i].pointer);
+ break;
+ }
+ case CV_TYPE_STRING:
+ {
+ g_print("\n%d: %s=%s",i,Config_Variables[i].name,
+ *(char**)Config_Variables[i].pointer);
+ break;
+ }
+ default:
+ {
+ g_print("NOT IMPLEMENTED (Save_Config)!! \n\a");
+ break;
+ }
+ }
+ }
+ g_print("\n## End Current Config ##\n");
+ fclose(file);
+ }
+ g_free(file_path);
+}
+
+
+
+
+/*
+ * Create the main directory with empty history files
+ */
+gboolean Setting_Create_Files (void)
+{
+ gchar *home_path = NULL;
+ gchar *file_path = NULL;
+ FILE *file;
+
+ /* The file to write */
+ if (!HOME_VARIABLE)
+ return FALSE;
+
+ if ( Create_Easytag_Directory()==FALSE )
+ return FALSE;
+
+ home_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ NULL);
+
+ file_path = g_strconcat(home_path,CONFIG_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),CONFIG_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,SCAN_TAG_MASKS_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),SCAN_TAG_MASKS_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,RENAME_FILE_MASKS_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),RENAME_FILE_MASKS_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,RENAME_DIRECTORY_MASKS_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),RENAME_DIRECTORY_MASKS_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,DEFAULT_PATH_TO_MP3_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),DEFAULT_PATH_TO_MP3_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,DEFAULT_TAG_COMMENT_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),DEFAULT_TAG_COMMENT_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,PATH_ENTRY_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),PATH_ENTRY_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,PLAY_LIST_NAME_MASKS_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),PLAY_LIST_NAME_MASKS_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,RUN_PROGRAM_WITH_FILE_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),RUN_PROGRAM_WITH_FILE_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,AUDIO_FILE_PLAYER_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),AUDIO_FILE_PLAYER_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,SEARCH_FILE_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),SEARCH_FILE_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,FILE_TO_LOAD_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),FILE_TO_LOAD_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,PLAYLIST_CONTENT_MASKS_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),PLAYLIST_CONTENT_MASKS_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,CDDB_SEARCH_STRING_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),CDDB_SEARCH_STRING_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+ file_path = g_strconcat(home_path,CDDB_LOCAL_PATH_HISTORY_FILE,NULL);
+ if ( (file=fopen(file_path,"a+")) != NULL )
+ fclose(file);
+ else
+ Log_Print(_("Can't create or open file '%s' (%s)"),CDDB_LOCAL_PATH_HISTORY_FILE,g_strerror(errno));
+ g_free(file_path);
+
+
+ g_free(home_path);
+
+ return TRUE;
+}
+
+
+
+/*
+ * Save the contents of a list store to a file
+ */
+void Save_List_Store_To_File (gchar *filename, GtkListStore *liststore, gint colnum)
+{
+ gchar *file_path = NULL;
+ FILE *file;
+ gchar *data = NULL;
+ gchar *text;
+ GtkTreeIter iter;
+
+ if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(liststore), &iter))
+ return;
+
+ /* The file to write */
+ if (!HOME_VARIABLE) return;
+ file_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ filename,NULL);
+
+ if ( Create_Easytag_Directory()==0 || (file=fopen(file_path,"w+"))==NULL )
+ {
+ Log_Print(_("ERROR: Can't write list to file: %s (%s)"),file_path,g_strerror(errno));
+ }else
+ {
+ do
+ {
+ gtk_tree_model_get(GTK_TREE_MODEL(liststore), &iter, colnum, &text, -1);
+ data = g_strdup_printf("%s\n",text);
+ g_free(text);
+
+ if (data)
+ {
+ fwrite(data,strlen(data),1,file);
+ g_free(data);
+ }
+ } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(liststore), &iter));
+ fclose(file);
+ }
+ g_free(file_path);
+}
+
+/*
+ * Populate a list store with data from a file passed in as first parameter
+ */
+gboolean Populate_List_Store_From_File (gchar *filename, GtkListStore *liststore, gint text_column)
+{
+
+ gchar *file_path = NULL;
+ FILE *file;
+ gchar buffer[MAX_STRING_LEN];
+ GtkTreeIter iter;
+ gboolean entries_set = FALSE;
+
+ /* The file to write */
+ if (!filename || !HOME_VARIABLE) return FALSE;
+ file_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ filename,NULL);
+
+ if ( (file=fopen(file_path,"r"))==NULL )
+ {
+ Log_Print(_("Can't open file '%s' (%s)"),file_path,g_strerror(errno));
+ }else
+ {
+ gchar *data = NULL;
+
+ while(fgets(buffer,sizeof(buffer),file))
+ {
+ if (buffer[strlen(buffer)-1]=='\n')
+ buffer[strlen(buffer)-1]='\0';
+ if (g_utf8_validate(buffer, -1, NULL))
+ data = g_strdup(buffer);
+ else
+ data = convert_to_utf8(buffer);
+
+ if (data && g_utf8_strlen(data, -1) > 0)
+ {
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, text_column, data, -1);
+ entries_set = TRUE;
+ }
+ g_free(data);
+ }
+ fclose(file);
+ }
+ g_free(file_path);
+ return entries_set;
+}
+
+
+/*
+ * Functions for writing and reading list of 'Fill Tag' masks
+ */
+void Load_Scan_Tag_Masks_List (GtkListStore *liststore, gint colnum, gchar **fallback)
+{
+ gint i = 0;
+ GtkTreeIter iter;
+
+ if (!Populate_List_Store_From_File(SCAN_TAG_MASKS_FILE, liststore, colnum))
+ {
+ // Fall back to defaults
+ Log_Print(_("Loading default 'Fill Tag' masks..."));
+
+ while(fallback[i])
+ {
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, colnum, fallback[i], -1);
+ i++;
+ }
+ }
+}
+
+void Save_Scan_Tag_Masks_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(SCAN_TAG_MASKS_FILE, liststore, colnum);
+}
+
+
+/*
+ * Functions for writing and reading list of 'Rename File' masks
+ */
+void Load_Rename_File_Masks_List (GtkListStore *liststore, gint colnum, gchar **fallback)
+{
+ gint i = 0;
+ GtkTreeIter iter;
+
+ if (!Populate_List_Store_From_File(RENAME_FILE_MASKS_FILE, liststore, colnum))
+ {
+ // Fall back to defaults
+ Log_Print(_("Loading default 'Rename File' masks..."));
+
+ while(fallback[i])
+ {
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, colnum, fallback[i], -1);
+ i++;
+ }
+ }
+}
+
+void Save_Rename_File_Masks_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(RENAME_FILE_MASKS_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of 'Rename Directory' masks
+ */
+void Load_Rename_Directory_Masks_List (GtkListStore *liststore, gint colnum, gchar **fallback)
+{
+ gint i = 0;
+ GtkTreeIter iter;
+
+ if (!Populate_List_Store_From_File(RENAME_DIRECTORY_MASKS_FILE, liststore, colnum))
+ {
+ // Fall back to defaults
+ Log_Print(_("Loading default 'Rename Directory' masks..."));
+
+ while(fallback[i])
+ {
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, colnum, fallback[i], -1);
+ i++;
+ }
+ }
+}
+
+void Save_Rename_Directory_Masks_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(RENAME_DIRECTORY_MASKS_FILE, liststore, colnum);
+}
+
+
+
+
+/*
+ * Functions for writing and reading list of 'DefaultPathToMp3' combobox
+ */
+void Load_Default_Path_To_MP3_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(DEFAULT_PATH_TO_MP3_HISTORY_FILE, liststore, colnum);
+}
+void Save_Default_Path_To_MP3_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(DEFAULT_PATH_TO_MP3_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of 'DefaultComment' combobox
+ */
+void Load_Default_Tag_Comment_Text_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(DEFAULT_TAG_COMMENT_HISTORY_FILE, liststore, colnum);
+}
+void Save_Default_Tag_Comment_Text_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(DEFAULT_TAG_COMMENT_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of 'BrowserEntry' combobox
+ */
+void Load_Path_Entry_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(PATH_ENTRY_HISTORY_FILE, liststore, colnum);
+}
+void Save_Path_Entry_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(PATH_ENTRY_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of 'PlayListNameCombo' combobox
+ */
+void Load_Play_List_Name_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(PLAY_LIST_NAME_MASKS_FILE, liststore, colnum);
+}
+void Save_Play_List_Name_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(PLAY_LIST_NAME_MASKS_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox to run program (tree browser)
+ */
+void Load_Run_Program_With_Directory_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE, liststore, colnum);
+}
+void Save_Run_Program_With_Directory_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(RUN_PROGRAM_WITH_DIRECTORY_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox to run program (file browser)
+ */
+void Load_Run_Program_With_File_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(RUN_PROGRAM_WITH_FILE_HISTORY_FILE, liststore, colnum);
+}
+void Save_Run_Program_With_File_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(RUN_PROGRAM_WITH_FILE_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox to run file audio player
+ */
+void Load_Audio_File_Player_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(AUDIO_FILE_PLAYER_HISTORY_FILE, liststore, colnum);
+}
+void Save_Audio_File_Player_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(AUDIO_FILE_PLAYER_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox to search a string into file (tag or filename)
+ */
+void Load_Search_File_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(SEARCH_FILE_HISTORY_FILE, liststore, colnum);
+}
+void Save_Search_File_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(SEARCH_FILE_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox of path of file to load to rename files
+ */
+void Load_File_To_Load_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(FILE_TO_LOAD_HISTORY_FILE, liststore, colnum);
+}
+void Save_File_To_Load_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(FILE_TO_LOAD_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox of playlist content
+ */
+void Load_Playlist_Content_Mask_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(PLAYLIST_CONTENT_MASKS_FILE, liststore, colnum);
+}
+void Save_Playlist_Content_Mask_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(PLAYLIST_CONTENT_MASKS_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox of cddb search string
+ */
+void Load_Cddb_Search_String_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(CDDB_SEARCH_STRING_HISTORY_FILE, liststore, colnum);
+}
+void Save_Cddb_Search_String_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(CDDB_SEARCH_STRING_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of combobox of cddb search string in result list
+ */
+void Load_Cddb_Search_String_In_Result_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE, liststore, colnum);
+}
+void Save_Cddb_Search_String_In_Result_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(CDDB_SEARCH_STRING_IN_RESULT_HISTORY_FILE, liststore, colnum);
+}
+
+/*
+ * Functions for writing and reading list of 'CddbLocalPath3' combobox
+ */
+void Load_Cddb_Local_Path_List (GtkListStore *liststore, gint colnum)
+{
+ Populate_List_Store_From_File(CDDB_LOCAL_PATH_HISTORY_FILE, liststore, colnum);
+}
+void Save_Cddb_Local_Path_List (GtkListStore *liststore, gint colnum)
+{
+ Save_List_Store_To_File(CDDB_LOCAL_PATH_HISTORY_FILE, liststore, colnum);
+}
+
+
+
+
+
+
+
+/*
+ * Create the directory used by EasyTAG to store files for each user.
+ * If the directory already exists, does nothing and returns 1.
+ * If unable to create the directory, returns 0.
+ */
+gboolean Create_Easytag_Directory (void)
+{
+ gchar *easytag_path = NULL;
+ DIR *dir;
+
+ if (!HOME_VARIABLE)
+ {
+ Log_Print(_("ERROR: The environment variable HOME is not defined!"));
+ return FALSE;
+ }
+
+ /* Directory to create (if doesn't exists) with absolute path
+ * Note for NetBSD : avoid passing a trailing slash to mkdir() */
+ easytag_path = g_strconcat(HOME_VARIABLE,
+ HOME_VARIABLE[strlen(HOME_VARIABLE)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ EASYTAG_DIR,
+ //EASYTAG_DIR[strlen(EASYTAG_DIR)-1]!=G_DIR_SEPARATOR?G_DIR_SEPARATOR_S:"",
+ NULL);
+
+ if ( (dir=opendir(easytag_path)) == NULL )
+ {
+ if ( (mkdir(easytag_path,S_IRWXU|S_IXGRP|S_IRGRP)) == -1)
+ {
+ Log_Print(_("ERROR: Can't create directory '%s' (%s)!"),easytag_path,g_strerror(errno));
+ return FALSE;
+ }
+ }else
+ {
+ closedir(dir);
+ }
+
+ g_free(easytag_path);
+
+ return TRUE;
+}