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
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
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) ;;
/** 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;
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 \
DEFINES =
SRCS_C = \
- canonical_tag.c \
charset.c \
dither.c \
- vorbiscomment.c
+ tags.c
include $(topdir)/build/lib.mk
#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
# 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
# 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
# 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
# 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
\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
\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, &tag, true);\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
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
}\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
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
/* 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
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
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
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
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
#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;
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[] =
{
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, "");
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);
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)
(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");
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);
}
(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);
}
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();
#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"
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)
{
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);
*(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);