[easytag/wip/application-window: 3/4] Store ID3v1 and ID3v2 iconv options in GSettings
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/application-window: 3/4] Store ID3v1 and ID3v2 iconv options in GSettings
- Date: Fri, 9 May 2014 18:13:34 +0000 (UTC)
commit 549b8415c68d6698ccbafb132f5297e61416b972
Author: David King <amigadave amigadave com>
Date: Fri May 9 18:57:54 2014 +0100
Store ID3v1 and ID3v2 iconv options in GSettings
data/org.gnome.EasyTAG.gschema.xml | 4 +-
src/id3_tag.c | 63 +++++++++++++++++++++++-------------
src/id3v24_tag.c | 12 ++++--
src/preferences_dialog.c | 52 ++++++++++++++++++++++++++---
src/setting.c | 20 -----------
src/setting.h | 14 ++++---
6 files changed, 104 insertions(+), 61 deletions(-)
---
diff --git a/data/org.gnome.EasyTAG.gschema.xml b/data/org.gnome.EasyTAG.gschema.xml
index e7e9a9e..1545c35 100644
--- a/data/org.gnome.EasyTAG.gschema.xml
+++ b/data/org.gnome.EasyTAG.gschema.xml
@@ -279,6 +279,7 @@
tags</description>
<default>'ISO-8859-1'</default>
</key>
+ -->
<key name="id3v1-encoding-option" enum="org.gnome.EasyTAG.EtTagEncoding">
<summary>Encoding options when writing ID3v1 tags</summary>
@@ -286,7 +287,6 @@
between encodings when writing ID3v1 tags</description>
<default>'none'</default>
</key>
- -->
<key name="id3v2-enabled" type="b">
<summary>Write ID3v2 tags</summary>
@@ -355,6 +355,7 @@
writing ID3v2 tags</description>
<default>'ISO-8859-1'</default>
</key>
+ -->
<key name="id3v2-encoding-option" enum="org.gnome.EasyTAG.EtTagEncoding">
<summary>Encoding options when writing ID3v2 tags</summary>
@@ -362,7 +363,6 @@
between encodings when writing ID3v2 tags</description>
<default>'none'</default>
</key>
- -->
<key name="tag-date-autocomplete" type="b">
<summary>Automatically complete the date</summary>
diff --git a/src/id3_tag.c b/src/id3_tag.c
index 5d1a122..b04df6a 100644
--- a/src/id3_tag.c
+++ b/src/id3_tag.c
@@ -1252,37 +1252,54 @@ void Id3tag_Prepare_ID3v1 (ID3Tag *id3_tag)
* We use specials functionalities of iconv : //TRANSLIT and //IGNORE (the last
* one doesn't work on my system) to force conversion to the target encoding.
*/
-gchar *Id3tag_Rules_For_ISO_Fields (const gchar *string, const gchar *from_codeset, const gchar *to_codeset)
+gchar *
+Id3tag_Rules_For_ISO_Fields (const gchar *string,
+ const gchar *from_codeset,
+ const gchar *to_codeset)
{
gchar *string_converted = NULL;
+ EtTagEncoding iconv_option;
g_return_val_if_fail (string != NULL && from_codeset != NULL
&& to_codeset != NULL, NULL);
- if (FILE_WRITING_ID3V1_ICONV_OPTIONS_NO)
- {
- string_converted = convert_string(string,from_codeset,to_codeset,TRUE);
+ iconv_option = g_settings_get_enum (MainSettings, "id3v1-encoding-option");
- }else if (FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT)
- {
- // iconv_open (3):
- // When the string "//TRANSLIT" is appended to tocode, transliteration
- // is activated. This means that when a character cannot be represented
- // in the target character set, it can be approximated through one or
- // several similarly looking characters.
- gchar *to_enc = g_strconcat(to_codeset, "//TRANSLIT", NULL);
- string_converted = convert_string(string,from_codeset,to_enc,TRUE);
- g_free(to_enc);
-
- }else if (FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE)
+ switch (iconv_option)
{
- // iconv_open (3):
- // When the string "//IGNORE" is appended to tocode, characters that
- // cannot be represented in the target character set will be silently
- // discarded.
- gchar *to_enc = g_strconcat(to_codeset, "//IGNORE", NULL);
- string_converted = convert_string(string,from_codeset,to_enc,TRUE);
- g_free(to_enc);
+ default:
+ case ET_TAG_ENCODING_NONE:
+ string_converted = convert_string (string, from_codeset,
+ to_codeset, TRUE);
+ break;
+ case ET_TAG_ENCODING_TRANSLITERATE:
+ {
+ /* iconv_open (3):
+ * When the string "//TRANSLIT" is appended to tocode,
+ * transliteration is activated. This means that when a character
+ * cannot be represented in the target character set, it can be
+ * approximated through one or several similarly looking
+ * characters.
+ */
+ gchar *to_enc = g_strconcat (to_codeset, "//TRANSLIT", NULL);
+ string_converted = convert_string (string, from_codeset, to_enc,
+ TRUE);
+ g_free (to_enc);
+ break;
+ }
+ case ET_TAG_ENCODING_IGNORE:
+ {
+ /* iconv_open (3):
+ * When the string "//IGNORE" is appended to tocode, characters
+ * that cannot be represented in the target character set will be
+ * silently discarded.
+ */
+ gchar *to_enc = g_strconcat (to_codeset, "//IGNORE", NULL);
+ string_converted = convert_string (string, from_codeset, to_enc,
+ TRUE);
+ g_free (to_enc);
+ break;
+ }
}
return string_converted;
diff --git a/src/id3v24_tag.c b/src/id3v24_tag.c
index 11e84ad..c30d4fc 100644
--- a/src/id3v24_tag.c
+++ b/src/id3v24_tag.c
@@ -1241,10 +1241,12 @@ id3taglib_set_field(struct id3_frame *frame,
/* id3v1 fields converted using its own character set and iconv options */
if ( id3v1 )
{
- if ( !FILE_WRITING_ID3V1_ICONV_OPTIONS_NO )
+ EtTagEncoding iconv_option = g_settings_get_enum (MainSettings,
+ "id3v1-encoding-option");
+ if (iconv_option != ET_TAG_ENCODING_NONE)
encname = g_strconcat(
FILE_WRITING_ID3V1_CHARACTER_SET,
- FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT ? "//TRANSLIT" : "//IGNORE",
+ iconv_option == ET_TAG_ENCODING_TRANSLITERATE ? "//TRANSLIT" : "//IGNORE",
NULL);
else
encname = g_strdup(FILE_WRITING_ID3V1_CHARACTER_SET);
@@ -1253,10 +1255,12 @@ id3taglib_set_field(struct id3_frame *frame,
/* latin1 fields (such as URL) always converted with ISO-8859-1*/
if ((type != ID3_FIELD_TYPE_LATIN1) && (type != ID3_FIELD_TYPE_LATIN1FULL))
{
- if ( FILE_WRITING_ID3V2_ICONV_OPTIONS_NO == 0)
+ EtTagEncoding iconv_option = g_settings_get_enum (MainSettings,
+ "id3v2-encoding-option");
+ if (iconv_option != ET_TAG_ENCODING_NONE)
encname = g_strconcat(
FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET,
- FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT ? "//TRANSLIT" : "//IGNORE",
+ iconv_option == ET_TAG_ENCODING_TRANSLITERATE ? "//TRANSLIT" : "//IGNORE",
NULL);
else
encname = g_strdup(FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET);
diff --git a/src/preferences_dialog.c b/src/preferences_dialog.c
index 26d8ffd..2fc4d76 100644
--- a/src/preferences_dialog.c
+++ b/src/preferences_dialog.c
@@ -892,7 +892,7 @@ create_preferences_dialog (EtPreferencesDialog *self)
_("No"));
gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2IconvOptionsNo, 2, 6, 1,
1);
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsNo),FILE_WRITING_ID3V2_ICONV_OPTIONS_NO);
+ gtk_widget_set_name (FileWritingId3v2IconvOptionsNo, "none");
gtk_widget_set_tooltip_text(FileWritingId3v2IconvOptionsNo,_("With this option, when "
"a character cannot be represented in the target character set, it isn't changed. "
"But note that an error message will be displayed for information."));
@@ -901,7 +901,8 @@ create_preferences_dialog (EtPreferencesDialog *self)
_("//TRANSLIT"));
gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2IconvOptionsTranslit, 3,
6, 1, 1);
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsTranslit),FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT);
+ gtk_widget_set_name (FileWritingId3v2IconvOptionsTranslit,
+ "transliterate");
gtk_widget_set_tooltip_text(FileWritingId3v2IconvOptionsTranslit,_("With this option, when "
"a character cannot be represented in the target character set, it can be "
"approximated through one or several similarly looking characters."));
@@ -911,11 +912,30 @@ create_preferences_dialog (EtPreferencesDialog *self)
_("//IGNORE"));
gtk_grid_attach (GTK_GRID (Table), FileWritingId3v2IconvOptionsIgnore, 4,
6, 1, 1);
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsIgnore),FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE);
+ gtk_widget_set_name (FileWritingId3v2IconvOptionsIgnore, "ignore");
gtk_widget_set_tooltip_text(FileWritingId3v2IconvOptionsIgnore,_("With this option, when "
"a character cannot be represented in the target character set, it will "
"be silently discarded."));
+ g_settings_bind_with_mapping (MainSettings, "id3v2-encoding-option",
+ FileWritingId3v2IconvOptionsNo, "active",
+ G_SETTINGS_BIND_DEFAULT,
+ et_settings_enum_radio_get,
+ et_settings_enum_radio_set,
+ FileWritingId3v2IconvOptionsNo, NULL);
+ g_settings_bind_with_mapping (MainSettings, "id3v2-encoding-option",
+ FileWritingId3v2IconvOptionsTranslit,
+ "active", G_SETTINGS_BIND_DEFAULT,
+ et_settings_enum_radio_get,
+ et_settings_enum_radio_set,
+ FileWritingId3v2IconvOptionsTranslit, NULL);
+ g_settings_bind_with_mapping (MainSettings, "id3v2-encoding-option",
+ FileWritingId3v2IconvOptionsIgnore, "active",
+ G_SETTINGS_BIND_DEFAULT,
+ et_settings_enum_radio_get,
+ et_settings_enum_radio_set,
+ FileWritingId3v2IconvOptionsIgnore, NULL);
+
// ID3v1 tags
Frame = gtk_frame_new (_("ID3v1 tags"));
gtk_box_pack_start(GTK_BOX(id3v1v2hbox),Frame,FALSE,FALSE,2);
@@ -962,7 +982,7 @@ create_preferences_dialog (EtPreferencesDialog *self)
_("No"));
gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1IconvOptionsNo, 1, 4, 1,
1);
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsNo),FILE_WRITING_ID3V1_ICONV_OPTIONS_NO);
+ gtk_widget_set_name (FileWritingId3v1IconvOptionsNo, "none");
gtk_widget_set_tooltip_text(FileWritingId3v1IconvOptionsNo,_("With this option, when "
"a character cannot be represented in the target character set, it isn't changed. "
"But note that an error message will be displayed for information."));
@@ -971,7 +991,8 @@ create_preferences_dialog (EtPreferencesDialog *self)
_("//TRANSLIT"));
gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1IconvOptionsTranslit, 2,
4, 1, 1);
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsTranslit),FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT);
+ gtk_widget_set_name (FileWritingId3v1IconvOptionsTranslit,
+ "transliterate");
gtk_widget_set_tooltip_text(FileWritingId3v1IconvOptionsTranslit,_("With this option, when "
"a character cannot be represented in the target character set, it can be "
"approximated through one or several similarly looking characters."));
@@ -981,11 +1002,30 @@ create_preferences_dialog (EtPreferencesDialog *self)
_("//IGNORE"));
gtk_grid_attach (GTK_GRID (Table), FileWritingId3v1IconvOptionsIgnore, 3,
4, 1, 1);
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsIgnore),FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE);
+ gtk_widget_set_name (FileWritingId3v1IconvOptionsIgnore, "ignore");
gtk_widget_set_tooltip_text(FileWritingId3v1IconvOptionsIgnore,_("With this option, when "
"a character cannot be represented in the target character set, it will "
"be silently discarded."));
+ g_settings_bind_with_mapping (MainSettings, "id3v1-encoding-option",
+ FileWritingId3v1IconvOptionsNo, "active",
+ G_SETTINGS_BIND_DEFAULT,
+ et_settings_enum_radio_get,
+ et_settings_enum_radio_set,
+ FileWritingId3v1IconvOptionsNo, NULL);
+ g_settings_bind_with_mapping (MainSettings, "id3v1-encoding-option",
+ FileWritingId3v1IconvOptionsTranslit,
+ "active", G_SETTINGS_BIND_DEFAULT,
+ et_settings_enum_radio_get,
+ et_settings_enum_radio_set,
+ FileWritingId3v1IconvOptionsTranslit, NULL);
+ g_settings_bind_with_mapping (MainSettings, "id3v1-encoding-option",
+ FileWritingId3v1IconvOptionsIgnore, "active",
+ G_SETTINGS_BIND_DEFAULT,
+ et_settings_enum_radio_get,
+ et_settings_enum_radio_set,
+ FileWritingId3v1IconvOptionsIgnore, NULL);
+
/* Character Set for reading tag */
Frame = gtk_frame_new (_("Character Set for reading ID3 tags"));
gtk_box_pack_start(GTK_BOX(VBox),Frame,FALSE,FALSE,0);
diff --git a/src/setting.c b/src/setting.c
index 3c74240..d204e9f 100644
--- a/src/setting.c
+++ b/src/setting.c
@@ -129,13 +129,7 @@ static const tConfigVariable Config_Variables[] =
{"file_writing_id3v2_version_4", CV_TYPE_BOOL, &FILE_WRITING_ID3V2_VERSION_4 },
{"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_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},
{"audio_file_player", CV_TYPE_STRING,&AUDIO_FILE_PLAYER },
@@ -258,13 +252,7 @@ void Init_Config_Variables (void)
FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET = g_strdup("UTF-8");
#endif /* !G_OS_WIN32 */
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_CHARACTER_SET = g_strdup("ISO-8859-1");
- FILE_WRITING_ID3V1_ICONV_OPTIONS_NO = 0;
- FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT = 1;
- FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE = 0;
/*
* Scanner
@@ -421,18 +409,10 @@ Apply_Changes_Of_Preferences_Window (void)
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_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsNo));
- FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsTranslit));
- FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v2IconvOptionsIgnore));
-
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_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsNo));
- FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsTranslit));
- FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FileWritingId3v1IconvOptionsIgnore));
-
/* Scanner */
// Fill Tag Scanner
FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(FTSConvertUnderscoreAndP20IntoSpace));
diff --git a/src/setting.h b/src/setting.h
index 20f7d55..dd6a1c9 100644
--- a/src/setting.h
+++ b/src/setting.h
@@ -115,6 +115,14 @@ typedef enum
ET_SORT_MODE_DESCENDING_FILE_SAMPLERATE
} EtSortMode;
+/* Additional options to be passed to iconv(). */
+typedef enum
+{
+ ET_TAG_ENCODING_NONE,
+ ET_TAG_ENCODING_TRANSLITERATE,
+ ET_TAG_ENCODING_IGNORE
+} EtTagEncoding;
+
/*
* Config variables
*/
@@ -141,14 +149,8 @@ gchar *FILE_READING_ID3V1V2_CHARACTER_SET;
gchar *FILE_WRITING_ID3V2_UNICODE_CHARACTER_SET;
gchar *FILE_WRITING_ID3V2_NO_UNICODE_CHARACTER_SET;
-gint FILE_WRITING_ID3V2_ICONV_OPTIONS_NO;
-gint FILE_WRITING_ID3V2_ICONV_OPTIONS_TRANSLIT;
-gint FILE_WRITING_ID3V2_ICONV_OPTIONS_IGNORE;
gchar *FILE_WRITING_ID3V1_CHARACTER_SET;
-gint FILE_WRITING_ID3V1_ICONV_OPTIONS_NO;
-gint FILE_WRITING_ID3V1_ICONV_OPTIONS_TRANSLIT;
-gint FILE_WRITING_ID3V1_ICONV_OPTIONS_IGNORE;
gint PAD_DISC_NUMBER;
gint PAD_DISC_NUMBER_DIGITS;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]