diff options
author | Josh Coalson <jcoalson@users.sourceforce.net> | 2004-09-24 13:57:40 +0000 |
---|---|---|
committer | Josh Coalson <jcoalson@users.sourceforce.net> | 2004-09-24 13:57:40 +0000 |
commit | 9745f25e785ebcbc7a185282abf90bf4f64ae6a6 (patch) | |
tree | 259d5bc541df6a8e1d7cb2a0f44b0086ba472c61 /src/plugin_xmms | |
parent | 838408a3ee0b45dcd043ec4234bf04e1a4ba18c0 (diff) | |
download | flac-9745f25e785ebcbc7a185282abf90bf4f64ae6a6.tar.gz |
major plugin revamp based on x-fixer's code
Diffstat (limited to 'src/plugin_xmms')
-rw-r--r-- | src/plugin_xmms/charset.c | 30 | ||||
-rw-r--r-- | src/plugin_xmms/charset.h | 9 | ||||
-rw-r--r-- | src/plugin_xmms/configure.c | 4 | ||||
-rw-r--r-- | src/plugin_xmms/configure.h | 1 | ||||
-rw-r--r-- | src/plugin_xmms/fileinfo.c | 95 | ||||
-rw-r--r-- | src/plugin_xmms/plugin.c | 3 | ||||
-rw-r--r-- | src/plugin_xmms/wrap_id3.c | 75 |
7 files changed, 108 insertions, 109 deletions
diff --git a/src/plugin_xmms/charset.c b/src/plugin_xmms/charset.c index ad11d740..3caf75a2 100644 --- a/src/plugin_xmms/charset.c +++ b/src/plugin_xmms/charset.c @@ -135,36 +135,14 @@ const CharsetInfo charset_trans_array[] = { /* * Commons conversion functions */ -char *convert_from_file_to_user(const char *string) +char *convert_from_utf8_to_user(const char *string) { - return FLAC_plugin__charset_convert_string(string, flac_cfg.title.file_char_set, flac_cfg.title.user_char_set); + return FLAC_plugin__charset_convert_string(string, "UTF-8", flac_cfg.title.user_char_set); } -char *convert_from_user_to_file(const char *string) +char *convert_from_user_to_utf8(const char *string) { - return FLAC_plugin__charset_convert_string(string, flac_cfg.title.user_char_set, flac_cfg.title.file_char_set); -} - -void convert_from_file_to_user_in_place(char **string) -{ - if(0 != *string) { - char *tmp; - - tmp = convert_from_file_to_user(*string); - free(*string); - *string = tmp; - } -} - -void convert_from_user_to_file_in_place(char **string) -{ - if(0 != *string) { - char *tmp; - - tmp = convert_from_user_to_file(*string); - free(*string); - *string = tmp; - } + return FLAC_plugin__charset_convert_string(string, flac_cfg.title.user_char_set, "UTF-8"); } GList *Charset_Create_List (void) diff --git a/src/plugin_xmms/charset.h b/src/plugin_xmms/charset.h index 041f29fd..7d5e763c 100644 --- a/src/plugin_xmms/charset.h +++ b/src/plugin_xmms/charset.h @@ -41,10 +41,11 @@ extern const CharsetInfo charset_trans_array[]; * Prototypes * **************/ -char *convert_from_file_to_user(const char *string); -char *convert_from_user_to_file(const char *string); -void convert_from_file_to_user_in_place(char **string); -void convert_from_user_to_file_in_place(char **string); +/* + * The returned strings are malloc()ed an must be free()d by the caller + */ +char *convert_from_utf8_to_user(const char *string); +char *convert_from_user_to_utf8(const char *string); GList *Charset_Create_List (void); gchar *Charset_Get_Name_From_Title (gchar *charset_title); diff --git a/src/plugin_xmms/configure.c b/src/plugin_xmms/configure.c index 472f402d..e1ce15a6 100644 --- a/src/plugin_xmms/configure.c +++ b/src/plugin_xmms/configure.c @@ -48,7 +48,6 @@ flac_config_t flac_cfg = { FALSE, /* tag_override */ NULL, /* tag_format */ FALSE, /* convert_char_set */ - NULL, /* file_char_set */ NULL /* user_char_set */ }, /* output */ @@ -108,7 +107,6 @@ static void flac_configurewin_ok(GtkWidget * widget, gpointer data) (void)widget, (void)data; /* unused arguments */ g_free(flac_cfg.title.tag_format); flac_cfg.title.tag_format = g_strdup(gtk_entry_get_text(GTK_ENTRY(title_tag_entry))); - flac_cfg.title.file_char_set = Charset_Get_Name_From_Title(gtk_entry_get_text_1(fileCharacterSetEntry)); flac_cfg.title.user_char_set = Charset_Get_Name_From_Title(gtk_entry_get_text_1(userCharacterSetEntry)); filename = g_strconcat(g_get_home_dir(), "/.xmms/config", NULL); @@ -119,7 +117,6 @@ static void flac_configurewin_ok(GtkWidget * widget, gpointer data) xmms_cfg_write_boolean(cfg, "flac", "title.tag_override", flac_cfg.title.tag_override); xmms_cfg_write_string(cfg, "flac", "title.tag_format", flac_cfg.title.tag_format); xmms_cfg_write_boolean(cfg, "flac", "title.convert_char_set", flac_cfg.title.convert_char_set); - xmms_cfg_write_string(cfg, "flac", "title.file_char_set", flac_cfg.title.file_char_set); xmms_cfg_write_string(cfg, "flac", "title.user_char_set", flac_cfg.title.user_char_set); /* output */ xmms_cfg_write_boolean(cfg, "flac", "output.replaygain.enable", flac_cfg.output.replaygain.enable); @@ -293,7 +290,6 @@ void FLAC_XMMS__configure(void) list = Charset_Create_List(); gtk_combo_set_popdown_strings(GTK_COMBO(fileCharacterSetEntry),list); gtk_combo_set_popdown_strings(GTK_COMBO(userCharacterSetEntry),list); - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(fileCharacterSetEntry)->entry),Charset_Get_Title_From_Name(flac_cfg.title.file_char_set)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(userCharacterSetEntry)->entry),Charset_Get_Title_From_Name(flac_cfg.title.user_char_set)); gtk_widget_set_sensitive(fileCharacterSetEntry, flac_cfg.title.convert_char_set); gtk_widget_set_sensitive(userCharacterSetEntry, flac_cfg.title.convert_char_set); diff --git a/src/plugin_xmms/configure.h b/src/plugin_xmms/configure.h index f49dea41..7bf55116 100644 --- a/src/plugin_xmms/configure.h +++ b/src/plugin_xmms/configure.h @@ -28,7 +28,6 @@ typedef struct { gboolean tag_override; gchar *tag_format; gboolean convert_char_set; - gchar *file_char_set; gchar *user_char_set; } title; diff --git a/src/plugin_xmms/fileinfo.c b/src/plugin_xmms/fileinfo.c index 547a8a18..22de4a57 100644 --- a/src/plugin_xmms/fileinfo.c +++ b/src/plugin_xmms/fileinfo.c @@ -88,12 +88,6 @@ static const gchar *vorbis_genres[] = N_("Anime"), N_("JPop"), N_("Synthpop") }; -static void local__safe_free(void *object) -{ - if(0 != object) - free(object); -} - static void label_set_text(GtkWidget * label, char *str, ...) { va_list args; @@ -107,45 +101,53 @@ static void label_set_text(GtkWidget * label, char *str, ...) g_free(tempstr); } -static void set_entry_tag(GtkEntry * entry, gchar * tag) +static void set_entry_tag(GtkEntry * entry, const wchar_t * tag) { - char *text; if(tag) { + char *utf8 = FLAC_plugin__convert_ucs2_to_utf8(tag); if(flac_cfg.title.convert_char_set) { - text = convert_from_file_to_user(tag); + char *text = convert_from_utf8_to_user(utf8); gtk_entry_set_text(entry, text); free(text); } - else - gtk_entry_set_text(entry, tag); + else { + gtk_entry_set_text(entry, utf8); + } + free(utf8); } else gtk_entry_set_text(entry, ""); } -static char *get_entry_tag(GtkEntry * entry) +static void get_entry_tag(GtkEntry * entry, const char *name) { gchar *text; + char *utf8; text = gtk_entry_get_text(entry); if (!text || strlen(text) == 0) - return 0; + return; if(flac_cfg.title.convert_char_set) - return convert_from_user_to_file(text); + utf8 = convert_from_user_to_utf8(text); else - return strdup(text); + utf8 = text; + + FLAC_plugin__canonical_add_utf8(canonical_tag, name, utf8, (unsigned)(-1), (unsigned)(-1), /*sep=*/0); + + if(flac_cfg.title.convert_char_set) + free(utf8); } static void show_tag() { - set_entry_tag(GTK_ENTRY(title_entry), canonical_tag->title); - set_entry_tag(GTK_ENTRY(artist_entry), canonical_tag->composer); - set_entry_tag(GTK_ENTRY(album_entry), canonical_tag->album); - set_entry_tag(GTK_ENTRY(date_entry), canonical_tag->year_recorded); - set_entry_tag(GTK_ENTRY(tracknum_entry), canonical_tag->track_number); - set_entry_tag(GTK_ENTRY(comment_entry), canonical_tag->comment); - set_entry_tag(GTK_ENTRY(GTK_COMBO(genre_combo)->entry), canonical_tag->genre); + set_entry_tag(GTK_ENTRY(title_entry) , FLAC_plugin__canonical_get(canonical_tag, L"TITLE")); + set_entry_tag(GTK_ENTRY(artist_entry) , FLAC_plugin__canonical_get(canonical_tag, L"ARTIST")); + set_entry_tag(GTK_ENTRY(album_entry) , FLAC_plugin__canonical_get(canonical_tag, L"ALBUM")); + set_entry_tag(GTK_ENTRY(date_entry) , FLAC_plugin__canonical_get(canonical_tag, L"DATE")); + set_entry_tag(GTK_ENTRY(tracknum_entry) , FLAC_plugin__canonical_get(canonical_tag, L"TRACKNUMBER")); + set_entry_tag(GTK_ENTRY(comment_entry) , FLAC_plugin__canonical_get(canonical_tag, L"DESCRIPTION")); + set_entry_tag(GTK_ENTRY(GTK_COMBO(genre_combo)->entry), FLAC_plugin__canonical_get(canonical_tag, L"GENRE")); } static void save_tag(GtkWidget * w, gpointer data) @@ -153,21 +155,22 @@ static void save_tag(GtkWidget * w, gpointer data) (void)w; (void)data; - local__safe_free(canonical_tag->title); - local__safe_free(canonical_tag->composer); - local__safe_free(canonical_tag->album); - local__safe_free(canonical_tag->year_recorded); - local__safe_free(canonical_tag->track_number); - local__safe_free(canonical_tag->comment); - local__safe_free(canonical_tag->genre); - canonical_tag->title = get_entry_tag(GTK_ENTRY(title_entry)); - canonical_tag->composer = get_entry_tag(GTK_ENTRY(artist_entry)); - canonical_tag->album = get_entry_tag(GTK_ENTRY(album_entry)); - canonical_tag->year_recorded = get_entry_tag(GTK_ENTRY(date_entry)); - canonical_tag->track_number = get_entry_tag(GTK_ENTRY(tracknum_entry)); - canonical_tag->comment = get_entry_tag(GTK_ENTRY(comment_entry)); - canonical_tag->genre = get_entry_tag(GTK_ENTRY(GTK_COMBO(genre_combo)->entry)); - + while (FLAC_plugin__canonical_remove(canonical_tag, L"TITLE")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"ARTIST")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"ALBUM")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"DATE")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"TRACKNUMBER")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"DESCRIPTION")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"GENRE")) ; + + get_entry_tag(GTK_ENTRY(title_entry) , "TITLE"); + get_entry_tag(GTK_ENTRY(artist_entry) , "ARTIST"); + get_entry_tag(GTK_ENTRY(album_entry) , "ALBUM"); + get_entry_tag(GTK_ENTRY(date_entry) , "DATE"); + get_entry_tag(GTK_ENTRY(tracknum_entry) , "TRACKNUMBER"); + get_entry_tag(GTK_ENTRY(comment_entry) , "DESCRIPTION"); + get_entry_tag(GTK_ENTRY(GTK_COMBO(genre_combo)->entry), "GENRE"); + FLAC_plugin__vorbiscomment_set(current_filename, canonical_tag); gtk_widget_destroy(window); } @@ -177,15 +180,13 @@ static void remove_tag(GtkWidget * w, gpointer data) (void)w; (void)data; - local__safe_free(canonical_tag->title); - local__safe_free(canonical_tag->composer); - local__safe_free(canonical_tag->album); - local__safe_free(canonical_tag->year_recorded); - local__safe_free(canonical_tag->track_number); - local__safe_free(canonical_tag->comment); - local__safe_free(canonical_tag->genre); - - canonical_tag->title = canonical_tag->composer = canonical_tag->album = canonical_tag->year_recorded = canonical_tag->track_number = canonical_tag->comment = canonical_tag->genre = 0; + while (FLAC_plugin__canonical_remove(canonical_tag, L"TITLE")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"ARTIST")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"ALBUM")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"DATE")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"TRACKNUMBER")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"DESCRIPTION")) ; + while (FLAC_plugin__canonical_remove(canonical_tag, L"GENRE")) ; FLAC_plugin__vorbiscomment_set(current_filename, canonical_tag); gtk_widget_destroy(window); @@ -419,7 +420,7 @@ void FLAC_XMMS__file_info_box(char *filename) else canonical_tag = FLAC_plugin__canonical_tag_new(); - FLAC_plugin__vorbiscomment_get(current_filename, canonical_tag); + FLAC_plugin__vorbiscomment_get(current_filename, canonical_tag, /*sep=*/0); show_tag(); show_file_info(); diff --git a/src/plugin_xmms/plugin.c b/src/plugin_xmms/plugin.c index e20b0ef3..1a5652eb 100644 --- a/src/plugin_xmms/plugin.c +++ b/src/plugin_xmms/plugin.c @@ -167,9 +167,6 @@ void FLAC_XMMS__init() xmms_cfg_read_boolean(cfg, "flac", "title.convert_char_set", &flac_cfg.title.convert_char_set); - if(!xmms_cfg_read_string(cfg, "flac", "title.file_char_set", &flac_cfg.title.file_char_set)) - flac_cfg.title.file_char_set = FLAC_plugin__charset_get_current(); - if(!xmms_cfg_read_string(cfg, "flac", "title.user_char_set", &flac_cfg.title.user_char_set)) flac_cfg.title.user_char_set = FLAC_plugin__charset_get_current(); diff --git a/src/plugin_xmms/wrap_id3.c b/src/plugin_xmms/wrap_id3.c index b469c961..a48aaeb9 100644 --- a/src/plugin_xmms/wrap_id3.c +++ b/src/plugin_xmms/wrap_id3.c @@ -29,8 +29,7 @@ #include <xmms/titlestring.h> #include "FLAC/metadata.h" -#include "plugin_common/id3v1.h" -#include "plugin_common/id3v2.h" +#include "plugin_common/canonical_tag.h" #include "charset.h" #include "configure.h" @@ -65,6 +64,29 @@ static int local__getnum(char* str) return 0; } +static char *local__getfield(FLAC_Plugin__CanonicalTag *tag, const wchar_t *name) +{ + const wchar_t *ucs2 = FLAC_plugin__canonical_get(tag, name); + if (0 != ucs2) { + char *utf8 = FLAC_plugin__convert_ucs2_to_utf8(FLAC_plugin__canonical_get(tag, name)); + if(flac_cfg.title.convert_char_set) { + char *user = convert_from_utf8_to_user(utf8); + free(utf8); + return user; + } + else + return utf8; + } + else + return 0; +} + +static void local__safe_free(char *s) +{ + if (0 != s) + free(s); +} + /* * Function flac_format_song_title (tag, filename) * @@ -77,35 +99,32 @@ char *flac_format_song_title(char *filename) char *ret = NULL; TitleInput *input = NULL; FLAC_Plugin__CanonicalTag tag; + char *title, *artist, *performer, *album, *date, *tracknumber, *genre, *description; FLAC_plugin__canonical_tag_init(&tag); - FLAC_plugin__canonical_tag_get_combined(filename, &tag); - - if(flac_cfg.title.convert_char_set) { - convert_from_file_to_user_in_place(&tag.title); - convert_from_file_to_user_in_place(&tag.composer); - convert_from_file_to_user_in_place(&tag.performer); - convert_from_file_to_user_in_place(&tag.album); - convert_from_file_to_user_in_place(&tag.year_recorded); - convert_from_file_to_user_in_place(&tag.year_performed); - convert_from_file_to_user_in_place(&tag.track_number); - convert_from_file_to_user_in_place(&tag.tracks_in_album); - convert_from_file_to_user_in_place(&tag.genre); - convert_from_file_to_user_in_place(&tag.comment); - } + FLAC_plugin__canonical_tag_get_combined(filename, &tag, /*sep=*/0); + + title = local__getfield(&tag, L"TITLE"); + artist = local__getfield(&tag, L"ARTIST"); + performer = local__getfield(&tag, L"PERFORMER"); + album = local__getfield(&tag, L"ALBUM"); + date = local__getfield(&tag, L"DATE"); + tracknumber = local__getfield(&tag, L"TRACKNUMBER"); + genre = local__getfield(&tag, L"GENRE"); + description = local__getfield(&tag, L"DESCRIPTION"); XMMS_NEW_TITLEINPUT(input); - input->performer = local__getstr(tag.performer); + input->performer = local__getstr(performer); if(!input->performer) - input->performer = local__getstr(tag.composer); - input->album_name = local__getstr(tag.album); - input->track_name = local__getstr(tag.title); - input->track_number = local__getnum(tag.track_number); - input->year = local__getnum(tag.year_recorded); - input->genre = local__getstr(tag.genre); - input->comment = local__getstr(tag.comment); + input->performer = local__getstr(artist); + input->album_name = local__getstr(album); + input->track_name = local__getstr(title); + input->track_number = local__getnum(tracknumber); + input->year = local__getnum(date); + input->genre = local__getstr(genre); + input->comment = local__getstr(description); input->file_name = g_basename(filename); input->file_path = filename; @@ -123,5 +142,13 @@ char *flac_format_song_title(char *filename) } FLAC_plugin__canonical_tag_clear(&tag); + local__safe_free(title); + local__safe_free(artist); + local__safe_free(performer); + local__safe_free(album); + local__safe_free(date); + local__safe_free(tracknumber); + local__safe_free(genre); + local__safe_free(description); return ret; } |