revamp plugin_common to use utf-8 instead of wchar_t as the internal comment format

This commit is contained in:
Josh Coalson
2004-12-30 01:09:53 +00:00
parent d56ac59518
commit 81b3cae6d5
11 changed files with 156 additions and 163 deletions

View 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__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__vorbiscomment_set(current_filename, canonical_tag);
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();

View 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__tags_get(filename, &tags);
FLAC_plugin__vorbiscomment_get(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");
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);