revamp plugin_common to use utf-8 instead of wchar_t as the internal comment format
authorJosh Coalson <jcoalson@users.sourceforce.net>
Thu, 30 Dec 2004 01:09:53 +0000 (01:09 +0000)
committerJosh Coalson <jcoalson@users.sourceforce.net>
Thu, 30 Dec 2004 01:09:53 +0000 (01:09 +0000)
build/config.mk
configure.in
include/FLAC/format.h
src/plugin_common/Makefile.am
src/plugin_common/Makefile.lite
src/plugin_common/all.h
src/plugin_common/plugin_common_static.dsp
src/plugin_winamp2/in_flac.c
src/plugin_winamp2/infobox.c
src/plugin_xmms/fileinfo.c
src/plugin_xmms/tag.c

index aa80afa..2dbf799 100644 (file)
@@ -42,7 +42,7 @@ all default: $(DEFAULT_BUILD)
 
 VERSION=\"1.1.1\"
 
-CONFIG_CFLAGS=-D_GNU_SOURCE -DHAVE_INTTYPES_H -DHAVE_WCSDUP -DHAVE_WCSCASECMP -DFLAC__HAS_OGG
+CONFIG_CFLAGS=-D_GNU_SOURCE -DHAVE_INTTYPES_H -DFLAC__HAS_OGG
 
 OGG_INCLUDE_DIR=$(HOME)/local/include
 OGG_LIB_DIR=$(HOME)/local/lib
index 29cad22..ad35ae8 100644 (file)
@@ -21,9 +21,6 @@
 AC_INIT(src/flac/main.c)
 AM_INIT_AUTOMAKE(flac, 1.1.1)
 
-dnl In order to have access to any available wcsdup() and wcscasecmp()
-AC_GNU_SOURCE
-
 # Don't automagically regenerate autoconf/automake generated files unless
 # explicitly requested.  Eases autobuilding -mdz
 AM_MAINTAINER_MODE
@@ -43,9 +40,6 @@ dnl check for getopt in standard library
 dnl AC_CHECK_FUNCS(getopt_long , , [LIBOBJS="$LIBOBJS getopt.o getopt1.o"] )
 AC_CHECK_FUNCS(getopt_long, [], [])
 
-dnl Check for uncommon wide char functions
-AC_CHECK_FUNCS(wcsdup, wcscasecmp, [], [])
-
 AC_CANONICAL_HOST
 case "$host_cpu" in
        i*86)   cpu_ia32=true ; AC_DEFINE(FLAC__CPU_IA32) ;;
index d4e6bca..96bbbe0 100644 (file)
@@ -585,13 +585,8 @@ typedef struct {
 /** Vorbis comment entry structure used in VORBIS_COMMENT blocks.  (c.f. <A HREF="../format.html#metadata_block_vorbis_comment">format specification</A>)
  *
  *  For convenience, the APIs maintain a trailing NUL character at the end of
- *  \a entry which is not counted toward \a length or stored in the stream,
- *  i.e.
+ *  \a entry which is not counted toward \a length, i.e.
  *  \code strlen(entry) == length \endcode
- *
- *  It's recommended but not required for users to follow this convention as
- *  well when dealing directly with FLAC__StreamMetadata_VorbisComment_Entry
- *  as it makes dealing with plain strings easier.
  */
 typedef struct {
        FLAC__uint32 length;
index 4c287ca..5bf78ac 100644 (file)
@@ -23,18 +23,16 @@ noinst_LTLIBRARIES = libplugin_common.la
 
 noinst_HEADERS = \
        all.h \
-       canonical_tag.h \
        charset.h \
        defs.h \
        dither.h \
        locale_hack.h \
-       vorbiscomment.h
+       tags.h
 
 libplugin_common_la_SOURCES = \
-       canonical_tag.c \
        charset.c \
        dither.c \
-       vorbiscomment.c
+       tags.c
 
 EXTRA_DIST = \
        Makefile.lite \
index b23f9e5..49a8b47 100644 (file)
@@ -26,10 +26,9 @@ INCLUDES = -I$(topdir)/include -I$(HOME)/local/include
 DEFINES  = 
 
 SRCS_C = \
-       canonical_tag.c \
        charset.c \
        dither.c \
-       vorbiscomment.c
+       tags.c
 
 include $(topdir)/build/lib.mk
 
index 503736c..559f802 100644 (file)
 #ifndef FLAC__PLUGIN_COMMON__ALL_H
 #define FLAC__PLUGIN_COMMON__ALL_H
 
-#include "canonical_tag.h"
 #include "charset.h"
 #include "dither.h"
 #include "locale_hack.h"
-#include "vorbiscomment.h"
+#include "tags.h"
 
 #endif
index c62c719..8f8689a 100644 (file)
@@ -85,10 +85,6 @@ LIB32=link.exe -lib
 # PROP Default_Filter "cpp"\r
 # Begin Source File\r
 \r
-SOURCE=.\canonical_tag.c\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\charset.c\r
 # End Source File\r
 # Begin Source File\r
@@ -97,7 +93,7 @@ SOURCE=.\dither.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\vorbiscomment.c\r
+SOURCE=.\tags.c\r
 # End Source File\r
 # End Group\r
 # Begin Group "Public Header Files"\r
@@ -109,10 +105,6 @@ SOURCE=.\all.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\canonical_tag.h\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=.\charset.h\r
 # End Source File\r
 # Begin Source File\r
@@ -125,7 +117,7 @@ SOURCE=.\locale_hack.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\vorbiscomment.h\r
+SOURCE=.\tags.h\r
 # End Source File\r
 # End Group\r
 # End Target\r
index 3ba942a..4cb2297 100644 (file)
@@ -267,20 +267,20 @@ static DWORD WINAPI DecodeThread(void *unused)
 \r
 static const T_CHAR *get_tag(const T_CHAR *tag, void *param)\r
 {\r
-       FLAC_Plugin__CanonicalTag *t = (FLAC_Plugin__CanonicalTag*)param;\r
-       const T_CHAR *val = FLAC_plugin__canonical_get(t, tag);\r
+       FLAC__StreamMetadata *tags = (FLAC__StreamMetadata*)param;\r
+       const T_CHAR *val = FLAC_plugin__tags_get_tag_ucs2(tags, tag);\r
        /* some "user friendly cheavats" */\r
        if (!val)\r
        {\r
                if (!wcsicmp(tag, L"ARTIST"))\r
                {\r
-                       val = FLAC_plugin__canonical_get(t, L"PERFORMER");\r
-                       if (!val) val = FLAC_plugin__canonical_get(t, L"COMPOSER");\r
+                       val = FLAC_plugin__tags_get_tag_ucs2(tags, "PERFORMER");\r
+                       if (!val) val = FLAC_plugin__tags_get_tag_ucs2(tags, L"COMPOSER");\r
                }\r
                else if (!wcsicmp(tag, L"YEAR") || !wcsicmp(tag, L"DATE"))\r
                {\r
-                       val = FLAC_plugin__canonical_get(t, L"YEAR_RECORDED");\r
-                       if (!val) val = FLAC_plugin__canonical_get(t, L"YEAR_PERFORMED");\r
+                       val = FLAC_plugin__tags_get_tag_ucs2(tags, L"YEAR_RECORDED");\r
+                       if (!val) val = FLAC_plugin__tags_get_tag_ucs2(tags, L"YEAR_PERFORMED");\r
                }\r
        }\r
 \r
@@ -289,13 +289,13 @@ static const T_CHAR *get_tag(const T_CHAR *tag, void *param)
 \r
 static void format_title(const char *filename, WCHAR *title, unsigned max_size)\r
 {\r
-       FLAC_Plugin__CanonicalTag tag;\r
+       FLAC__StreamMetadata *tags;\r
 \r
-       ReadTags(filename, &tagtrue);\r
+       ReadTags(filename, &tags, /*forDisplay=*/true);\r
 \r
-       tagz_format(flac_cfg.title.tag_format_w, get_tag, NULL, &tag, title, max_size);\r
+       tagz_format(flac_cfg.title.tag_format_w, get_tag, free, tags, title, max_size);\r
 \r
-       FLAC_plugin__canonical_tag_clear(&tag);\r
+       FLAC_plugin__tags_destroy(&tags);\r
 }\r
 \r
 static void getfileinfo(char *filename, char *title, int *length_in_msec)\r
index 26a0d4b..8890089 100644 (file)
 typedef struct\r
 {\r
        char filename[MAX_PATH];\r
-       FLAC_Plugin__CanonicalTag tag;\r
+       FLAC__StreamMetadata tags;\r
 } LOCALDATA;\r
 \r
-static char buffer[1024];\r
+static char buffer[8192];\r
 static char *genres = NULL;\r
 static DWORD genresSize = 0, genresCount = 0;\r
 static BOOL genresChanged = FALSE, isNT;\r
@@ -174,27 +174,46 @@ static void DeinitGenres(HWND hwnd, BOOL final)
        }\r
 }\r
 \r
+static wchar_t *AnsiToWide(const char *src)\r
+{\r
+       int len;\r
+       wchar_t *dest;\r
+\r
+       FLAC__ASSERT(0 != src);\r
+\r
+       len = strlen(src) + 1;\r
+       /* copy */\r
+       dest = malloc(len*sizeof(wchar_t));\r
+       if (dest) mbstowcs(dest, src, len);\r
+       return dest;\r
+}\r
+\r
 /*\r
  *  Infobox helpers\r
  */\r
 \r
-#define SetText(x,y)            WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, FLAC_plugin__canonical_get(&data->tag, y), -1, buffer, sizeof(buffer), NULL, NULL); \\r
+#define SetText(x,y)            ucs2 = FLAC_plugin__tags_get_tag_ucs2(data->tags, y); \\r
+                                WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, ucs2, -1, buffer, sizeof(buffer), NULL, NULL); \\r
+                                if(ucs2) free(ucs2); \\r
                                 SetDlgItemText(hwnd, x, buffer)\r
 \r
 #define GetText(x,y)            GetDlgItemText(hwnd, x, buffer, sizeof(buffer));                        \\r
-                                if (*buffer) FLAC_plugin__canonical_set_ansi(&data->tag, y, buffer);    \\r
-                                else FLAC_plugin__canonical_remove_all(&data->tag, y)\r
+                                if (*buffer) { ucs2 = AnsiToWide(buffer); FLAC_plugin__tags_set_tag_ucs2(data->tags, y, ucs2, /*replace_all=*/false); free(ucs2); } \\r
+                                else FLAC_plugin__tags_delete_tag(data->tags, y)\r
 \r
-#define SetTextW(x,y)           SetDlgItemTextW(hwnd, x, FLAC_plugin__canonical_get(&data->tag, y))\r
+#define SetTextW(x,y)           ucs2 = FLAC_plugin__tags_get_tag_ucs2(data->tags, y)); \\r
+                                SetDlgItemTextW(hwnd, x, ucs2); \\r
+                                free(ucs2)\r
 \r
 #define GetTextW(x,y)           GetDlgItemTextW(hwnd, x, (WCHAR*)buffer, sizeof(buffer)/2);                     \\r
-                                if (*(WCHAR*)buffer) FLAC_plugin__canonical_set(&data->tag, y, (WCHAR*)buffer); \\r
-                                else FLAC_plugin__canonical_remove_all(&data->tag, y)\r
+                                if (*(WCHAR*)buffer) FLAC_plugin__tags_set_tag_ucs2(data->tags, y, (WCHAR*)buffer, /*replace_all=*/false); \\r
+                                else FLAC_plugin__tags_delete_tag(data->tags, y)\r
 \r
 \r
 static BOOL InitInfoboxInfo(HWND hwnd, const char *file)\r
 {\r
        LOCALDATA *data = LocalAlloc(LPTR, sizeof(LOCALDATA));\r
+       wchar_t *ucs2;
        FLAC__StreamMetadata streaminfo;\r
        DWORD    length, bps, ratio, rg;\r
        LONGLONG filesize;\r
@@ -208,13 +227,13 @@ static BOOL InitInfoboxInfo(HWND hwnd, const char *file)
        if (!filesize) return FALSE;\r
        if (!FLAC__metadata_get_streaminfo(file, &streaminfo))\r
                return FALSE;\r
-       ReadTags(file, &data->tag, false);\r
+       ReadTags(file, &data->tags, false);\r
 \r
        length = (DWORD)(streaminfo.data.stream_info.total_samples / streaminfo.data.stream_info.sample_rate);\r
        bps = (DWORD)(filesize / (125*streaminfo.data.stream_info.total_samples/streaminfo.data.stream_info.sample_rate));\r
        ratio = bps*1000000 / (streaminfo.data.stream_info.sample_rate*streaminfo.data.stream_info.channels*streaminfo.data.stream_info.bits_per_sample);\r
-       rg  = FLAC_plugin__canonical_get(&data->tag, L"REPLAYGAIN_TRACK_GAIN") ? 1 : 0;\r
-       rg |= FLAC_plugin__canonical_get(&data->tag, L"REPLAYGAIN_ALBUM_GAIN") ? 2 : 0;\r
+       rg  = FLAC_plugin__tags_get_tag_utf8(data->tags, L"REPLAYGAIN_TRACK_GAIN") ? 1 : 0;\r
+       rg |= FLAC_plugin__tags_get_tag_utf8(data->tags, L"REPLAYGAIN_ALBUM_GAIN") ? 2 : 0;\r
 \r
        sprintf(buffer, "Sample rate: %d Hz\nChannels: %d\nBits per sample: %d\nMin block size: %d\nMax block size: %d\n"\r
                        "File size: %I64d bytes\nTotal samples: %I64d\nLength: %d:%02d\nAvg. bitrate: %d\nCompression ratio: %d.%d%%\n"\r
@@ -228,33 +247,33 @@ static BOOL InitInfoboxInfo(HWND hwnd, const char *file)
        /* tag */\r
        if (isNT)\r
        {\r
-               SetTextW(IDC_TITLE,   L"TITLE");\r
-               SetTextW(IDC_ARTIST,  L"ARTIST");\r
-               SetTextW(IDC_ALBUM,   L"ALBUM");\r
-               SetTextW(IDC_COMMENT, L"COMMENT");\r
-               SetTextW(IDC_YEAR,    L"DATE");\r
-               SetTextW(IDC_TRACK,   L"TRACKNUMBER");\r
-               SetTextW(IDC_GENRE,   L"GENRE");\r
+               SetTextW(IDC_TITLE,   "TITLE");\r
+               SetTextW(IDC_ARTIST,  "ARTIST");\r
+               SetTextW(IDC_ALBUM,   "ALBUM");\r
+               SetTextW(IDC_COMMENT, "COMMENT");\r
+               SetTextW(IDC_YEAR,    "DATE");\r
+               SetTextW(IDC_TRACK,   "TRACKNUMBER");\r
+               SetTextW(IDC_GENRE,   "GENRE");\r
        }\r
        else\r
        {\r
-               SetText(IDC_TITLE,   L"TITLE");\r
-               SetText(IDC_ARTIST,  L"ARTIST");\r
-               SetText(IDC_ALBUM,   L"ALBUM");\r
-               SetText(IDC_COMMENT, L"COMMENT");\r
-               SetText(IDC_YEAR,    L"DATE");\r
-               SetText(IDC_TRACK,   L"TRACKNUMBER");\r
-               SetText(IDC_GENRE,   L"GENRE");\r
+               SetText(IDC_TITLE,   "TITLE");\r
+               SetText(IDC_ARTIST,  "ARTIST");\r
+               SetText(IDC_ALBUM,   "ALBUM");\r
+               SetText(IDC_COMMENT, "COMMENT");\r
+               SetText(IDC_YEAR,    "DATE");\r
+               SetText(IDC_TRACK,   "TRACKNUMBER");\r
+               SetText(IDC_GENRE,   "GENRE");\r
        }\r
 \r
        return TRUE;\r
 }\r
 \r
-static void __inline SetTag(HWND hwnd, const char *filename, FLAC_Plugin__CanonicalTag *tag)\r
+static void __inline SetTag(HWND hwnd, const char *filename, FLAC__StreamMetadata *tags)\r
 {\r
        strcpy(buffer, infoTitle);\r
 \r
-       if (FLAC_plugin__vorbiscomment_set(filename, tag))\r
+       if (FLAC_plugin__tags_set(filename, tags))\r
                strcat(buffer, " [Updated]");\r
        else strcat(buffer, " [Failed]");\r
 \r
@@ -264,42 +283,45 @@ static void __inline SetTag(HWND hwnd, const char *filename, FLAC_Plugin__Canoni
 static void UpdateTag(HWND hwnd)\r
 {\r
        LOCALDATA *data = (LOCALDATA*)GetWindowLong(hwnd, GWL_USERDATA);\r
+       wchar_t *ucs2;
 \r
        /* get fields */\r
        if (isNT)\r
        {\r
-               GetTextW(IDC_TITLE,   L"TITLE");\r
-               GetTextW(IDC_ARTIST,  L"ARTIST");\r
-               GetTextW(IDC_ALBUM,   L"ALBUM");\r
-               GetTextW(IDC_COMMENT, L"COMMENT");\r
-               GetTextW(IDC_YEAR,    L"DATE");\r
-               GetTextW(IDC_TRACK,   L"TRACKNUMBER");\r
-               GetTextW(IDC_GENRE,   L"GENRE");\r
-\r
-               WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, FLAC_plugin__canonical_get(&data->tag, L"GENRE"), -1, buffer, sizeof(buffer), NULL, NULL);\r
+               GetTextW(IDC_TITLE,   "TITLE");\r
+               GetTextW(IDC_ARTIST,  "ARTIST");\r
+               GetTextW(IDC_ALBUM,   "ALBUM");\r
+               GetTextW(IDC_COMMENT, "COMMENT");\r
+               GetTextW(IDC_YEAR,    "DATE");\r
+               GetTextW(IDC_TRACK,   "TRACKNUMBER");\r
+               GetTextW(IDC_GENRE,   "GENRE");\r
+\r
+               ucs2 = FLAC_plugin__tags_get_tag_ucs2(data->tags, "GENRE");\r
+               WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, ucs2, -1, buffer, sizeof(buffer), NULL, NULL);\r
+               free(ucs2);\r
        }\r
        else\r
        {\r
-               GetText(IDC_TITLE,   L"TITLE");\r
-               GetText(IDC_ARTIST,  L"ARTIST");\r
-               GetText(IDC_ALBUM,   L"ALBUM");\r
-               GetText(IDC_COMMENT, L"COMMENT");\r
-               GetText(IDC_YEAR,    L"DATE");\r
-               GetText(IDC_TRACK,   L"TRACKNUMBER");\r
-               GetText(IDC_GENRE,   L"GENRE");\r
+               GetText(IDC_TITLE,   "TITLE");\r
+               GetText(IDC_ARTIST,  "ARTIST");\r
+               GetText(IDC_ALBUM,   "ALBUM");\r
+               GetText(IDC_COMMENT, "COMMENT");\r
+               GetText(IDC_YEAR,    "DATE");\r
+               GetText(IDC_TRACK,   "TRACKNUMBER");\r
+               GetText(IDC_GENRE,   "GENRE");\r
        }\r
 \r
        /* update genres list (buffer should contain genre) */\r
        if (buffer[0]) AddGenre(hwnd, buffer);\r
 \r
        /* write tag */\r
-       SetTag(hwnd, data->filename, &data->tag);\r
+       SetTag(hwnd, data->filename, data->tags);\r
 }\r
 \r
 static void RemoveTag(HWND hwnd)\r
 {\r
        LOCALDATA *data = (LOCALDATA*)GetWindowLong(hwnd, GWL_USERDATA);\r
-       FLAC_plugin__canonical_tag_clear(&data->tag);\r
+       FLAC_plugin__tags_delete_all(data->tags);\r
 \r
        SetDlgItemText(hwnd, IDC_TITLE,   "");\r
        SetDlgItemText(hwnd, IDC_ARTIST,  "");\r
@@ -309,7 +331,7 @@ static void RemoveTag(HWND hwnd)
        SetDlgItemText(hwnd, IDC_TRACK,   "");\r
        SetDlgItemText(hwnd, IDC_GENRE,   "");\r
 \r
-       SetTag(hwnd, data->filename, &data->tag);\r
+       SetTag(hwnd, data->filename, data->tags);\r
 }\r
 \r
 \r
@@ -329,7 +351,7 @@ static INT_PTR CALLBACK InfoProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPar
        case WM_DESTROY:\r
                {\r
                        LOCALDATA *data = (LOCALDATA*)GetWindowLong(hwnd, GWL_USERDATA);\r
-                       FLAC_plugin__canonical_tag_clear(&data->tag);\r
+                       FLAC_plugin__tags_destroy(&data->tags);\r
                        LocalFree(data);\r
                        DeinitGenres(hwnd, FALSE);\r
                }\r
@@ -390,20 +412,25 @@ static __inline char *GetFileName(const char *fullname)
        return (char*)c;\r
 }\r
 \r
-void ReadTags(const char *fileName, FLAC_Plugin__CanonicalTag *tag, BOOL forDisplay)\r
+void ReadTags(const char *fileName, FLAC__StreamMetadata **tags, BOOL forDisplay)\r
 {\r
-       FLAC_plugin__canonical_tag_init(tag);\r
-       FLAC_plugin__vorbiscomment_get(fileName, tag, forDisplay ? flac_cfg.title.sep : NULL);\r
+       if(FLAC_plugin__tags_get(fileName, tags, forDisplay ? flac_cfg.title.sep : NULL)) {\r
 \r
-       /* add file name */\r
-       if (forDisplay)\r
-       {\r
-               char *c;\r
-               FLAC_plugin__canonical_set_ansi(tag, L"filepath", fileName);\r
-\r
-               strcpy(buffer, GetFileName(fileName));\r
-               if (c = strrchr(buffer, '.')) *c = 0;\r
-               FLAC_plugin__canonical_set_ansi(tag, L"filename", buffer);\r
+               /* add file name */\r
+               if (forDisplay)\r
+               {\r
+                       char *c;\r
+                       wchar_t *ucs2;\r
+                       ucs2 = AnsiToWide(fileName);\r
+                       FLAC_plugin__tags_set_tag_ucs2(*tags, "filepath", ucs2);\r
+                       free(ucs2);\r
+\r
+                       strcpy(buffer, GetFileName(fileName));\r
+                       if (c = strrchr(buffer, '.')) *c = 0;\r
+                       ucs2 = AnsiToWide(buffer);\r
+                       FLAC_plugin__tags_set_tag_ucs2(*tags, "filename", ucs2);\r
+                       free(ucs2);\r
+               }\r
        }\r
 }\r
 \r
index 12c808c..cc5ea30 100644 (file)
@@ -29,7 +29,7 @@
 #include "FLAC/metadata.h"
 #include "charset.h"
 #include "configure.h"
-#include "plugin_common/vorbiscomment.h"
+#include "plugin_common/tags.h"
 #include "plugin_common/locale_hack.h"
 
 static GtkWidget *window = NULL;
@@ -40,7 +40,7 @@ static GtkWidget *genre_combo;
 static GtkWidget *flac_samplerate, *flac_channels, *flac_bits_per_sample, *flac_blocksize, *flac_filesize, *flac_samples, *flac_bitrate;
 
 static gchar *current_filename = NULL;
-static FLAC_Plugin__CanonicalTag *canonical_tag = NULL;
+static FLAC__StreamMetadata *tags_ = NULL;
 
 static const gchar *vorbis_genres[] =
 {
@@ -102,20 +102,16 @@ static void label_set_text(GtkWidget * label, char *str, ...)
        g_free(tempstr);
 }
 
-static void set_entry_tag(GtkEntry * entry, const wchar_t * tag)
+static void set_entry_tag(GtkEntry * entry, const char * utf8)
 {
-
-       if(tag) {
-               char *utf8 = FLAC_plugin__convert_ucs2_to_utf8(tag);
+       if(utf8) {
                if(flac_cfg.title.convert_char_set) {
                        char *text = convert_from_utf8_to_user(utf8);
                        gtk_entry_set_text(entry, text);
                        free(text);
                }
-               else {
+               else
                        gtk_entry_set_text(entry, utf8);
-               }
-               free(utf8);
        }
        else
                gtk_entry_set_text(entry, "");
@@ -134,7 +130,7 @@ static void get_entry_tag(GtkEntry * entry, const char *name)
        else
                utf8 = text;
 
-       FLAC_plugin__canonical_add_utf8(canonical_tag, name, utf8, (unsigned)(-1), (unsigned)(-1), /*sep=*/0);
+       FLAC_plugin__tags_add_tag_utf8(tags_, name, utf8, /*separator=*/0);
 
        if(flac_cfg.title.convert_char_set)
                free(utf8);
@@ -142,13 +138,13 @@ static void get_entry_tag(GtkEntry * entry, const char *name)
 
 static void show_tag()
 {
-       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"));
+       set_entry_tag(GTK_ENTRY(title_entry)                  , FLAC_plugin__tags_get_tag_utf8(tags_, "TITLE"));
+       set_entry_tag(GTK_ENTRY(artist_entry)                 , FLAC_plugin__tags_get_tag_utf8(tags_, "ARTIST"));
+       set_entry_tag(GTK_ENTRY(album_entry)                  , FLAC_plugin__tags_get_tag_utf8(tags_, "ALBUM"));
+       set_entry_tag(GTK_ENTRY(date_entry)                   , FLAC_plugin__tags_get_tag_utf8(tags_, "DATE"));
+       set_entry_tag(GTK_ENTRY(tracknum_entry)               , FLAC_plugin__tags_get_tag_utf8(tags_, "TRACKNUMBER"));
+       set_entry_tag(GTK_ENTRY(comment_entry)                , FLAC_plugin__tags_get_tag_utf8(tags_, "DESCRIPTION"));
+       set_entry_tag(GTK_ENTRY(GTK_COMBO(genre_combo)->entry), FLAC_plugin__tags_get_tag_utf8(tags_, "GENRE"));
 }
 
 static void save_tag(GtkWidget * w, gpointer data)
@@ -156,13 +152,13 @@ static void save_tag(GtkWidget * w, gpointer data)
        (void)w;
        (void)data;
 
-       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__tags_delete_tag(tags_, "TITLE");
+       FLAC_plugin__tags_delete_tag(tags_, "ARTIST");
+       FLAC_plugin__tags_delete_tag(tags_, "ALBUM");
+       FLAC_plugin__tags_delete_tag(tags_, "DATE");
+       FLAC_plugin__tags_delete_tag(tags_, "TRACKNUMBER");
+       FLAC_plugin__tags_delete_tag(tags_, "DESCRIPTION");
+       FLAC_plugin__tags_delete_tag(tags_, "GENRE");
 
        get_entry_tag(GTK_ENTRY(title_entry)                  , "TITLE");
        get_entry_tag(GTK_ENTRY(artist_entry)                 , "ARTIST");
@@ -172,7 +168,7 @@ static void save_tag(GtkWidget * w, gpointer data)
        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);
+       FLAC_plugin__tags_set(current_filename, tags_);
        gtk_widget_destroy(window);
 }
 
@@ -181,15 +177,15 @@ static void remove_tag(GtkWidget * w, gpointer data)
        (void)w;
        (void)data;
        
-       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);
+       FLAC_plugin__tags_delete_tag(tags_, "TITLE");
+       FLAC_plugin__tags_delete_tag(tags_, "ARTIST");
+       FLAC_plugin__tags_delete_tag(tags_, "ALBUM");
+       FLAC_plugin__tags_delete_tag(tags_, "DATE");
+       FLAC_plugin__tags_delete_tag(tags_, "TRACKNUMBER");
+       FLAC_plugin__tags_delete_tag(tags_, "DESCRIPTION");
+       FLAC_plugin__tags_delete_tag(tags_, "GENRE");
+
+       FLAC_plugin__tags_set(current_filename, tags_);
        gtk_widget_destroy(window);
 }
 
@@ -416,12 +412,10 @@ void FLAC_XMMS__file_info_box(char *filename)
        gtk_entry_set_text(GTK_ENTRY(filename_entry), filename);
        gtk_editable_set_position(GTK_EDITABLE(filename_entry), -1);
 
-       if(canonical_tag)
-               FLAC_plugin__canonical_tag_clear(canonical_tag);
-       else
-               canonical_tag = FLAC_plugin__canonical_tag_new();
+       if(tags_)
+               FLAC_plugin__tags_destroy(&tags_);
 
-       FLAC_plugin__vorbiscomment_get(current_filename, canonical_tag, /*sep=*/0);
+       FLAC_plugin__tags_get(current_filename, &tags_);
 
        show_tag();
        show_file_info();
index b9a1085..d7695ec 100644 (file)
@@ -29,8 +29,7 @@
 #include <xmms/titlestring.h>
 
 #include "FLAC/metadata.h"
-#include "plugin_common/canonical_tag.h"
-#include "plugin_common/vorbiscomment.h"
+#include "plugin_common/tags.h"
 #include "charset.h"
 #include "configure.h"
 
@@ -65,21 +64,19 @@ static int local__getnum(char* str)
        return 0;
 }
 
-static char *local__getfield(FLAC_Plugin__CanonicalTag *tag, const wchar_t *name)
+static char *local__getfield(const FLAC__StreamMetadata *tags, const char *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;
+       if (0 != tags) {
+               const char *utf8 = FLAC_plugin__tags_get_tag_utf8(tags, name);
+               if (0 != utf8) {
+                       if(flac_cfg.title.convert_char_set)
+                               return convert_from_utf8_to_user(utf8);
+                       else
+                               return strdup(utf8);
                }
-               else
-                       return utf8;
        }
-       else
-               return 0;
+
+       return 0;
 }
 
 static void local__safe_free(char *s)
@@ -99,21 +96,19 @@ char *flac_format_song_title(char *filename)
 {
        char *ret = NULL;
        TitleInput *input = NULL;
-       FLAC_Plugin__CanonicalTag tag;
+       FLAC__StreamMetadata *tags;
        char *title, *artist, *performer, *album, *date, *tracknumber, *genre, *description;
 
-       FLAC_plugin__canonical_tag_init(&tag);
-
-       FLAC_plugin__vorbiscomment_get(filename, &tag, /*sep=*/0);
+       FLAC_plugin__tags_get(filename, &tags);
 
-       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");
+       title       = local__getfield(tags, "TITLE");
+       artist      = local__getfield(tags, "ARTIST");
+       performer   = local__getfield(tags, "PERFORMER");
+       album       = local__getfield(tags, "ALBUM");
+       date        = local__getfield(tags, "DATE");
+       tracknumber = local__getfield(tags, "TRACKNUMBER");
+       genre       = local__getfield(tags, "GENRE");
+       description = local__getfield(tags, "DESCRIPTION");
 
        XMMS_NEW_TITLEINPUT(input);
 
@@ -142,7 +137,7 @@ char *flac_format_song_title(char *filename)
                        *(local__extname(ret) - 1) = '\0';      /* removes period */
        }
 
-       FLAC_plugin__canonical_tag_clear(&tag);
+       FLAC_plugin__tags_destroy(&tags);
        local__safe_free(title);
        local__safe_free(artist);
        local__safe_free(performer);