24
24
#include "rb-metadata.h"
25
25
#include "rb-debug.h"
27
struct RBMetaDataFieldInfo {
33
* Note: the field names are the same as those used by GStreamer. We
34
* could have just use the GST_TAG_X defines, but that would suck if we
35
* ever got a non-GStreamer metadata backend.
37
static struct RBMetaDataFieldInfo field_info[RB_METADATA_FIELD_LAST] = {
38
/* RB_METADATA_FIELD_TITLE */ { G_TYPE_STRING, "title" },
39
/* RB_METADATA_FIELD_ARTIST */ { G_TYPE_STRING, "artist" },
40
/* RB_METADATA_FIELD_ALBUM */ { G_TYPE_STRING, "album" },
41
/* RB_METADATA_FIELD_DATE */ { G_TYPE_ULONG, "date" },
42
/* RB_METADATA_FIELD_GENRE */ { G_TYPE_STRING, "genre" },
43
/* RB_METADATA_FIELD_COMMENT */ { G_TYPE_STRING, "comment" },
44
/* RB_METADATA_FIELD_TRACK_NUMBER */ { G_TYPE_ULONG, "track-number" },
45
/* RB_METADATA_FIELD_MAX_TRACK_NUMBER */ { G_TYPE_ULONG, "track-count" },
46
/* RB_METADATA_FIELD_DISC_NUMBER */ { G_TYPE_ULONG, "album-disc-number" },
47
/* RB_METADATA_FIELD_MAX_DISC_NUMBER */ { G_TYPE_ULONG, "album-disc-count" },
48
/* RB_METADATA_FIELD_DESCRIPTION */ { G_TYPE_STRING, "description" },
49
/* RB_METADATA_FIELD_VERSION */ { G_TYPE_STRING, "version" },
50
/* RB_METADATA_FIELD_IRSC */ { G_TYPE_STRING, "isrc" },
51
/* RB_METADATA_FIELD_ORGANIZATION */ { G_TYPE_STRING, "organization" },
52
/* RB_METADATA_FIELD_COPYRIGHT */ { G_TYPE_STRING, "copyright" },
53
/* RB_METADATA_FIELD_CONTACT */ { G_TYPE_STRING, "contact" },
54
/* RB_METADATA_FIELD_LICENSE */ { G_TYPE_STRING, "license" },
55
/* RB_METADATA_FIELD_PERFORMER */ { G_TYPE_STRING, "performer" },
56
/* RB_METADATA_FIELD_DURATION */ { G_TYPE_ULONG, "duration" },
57
/* RB_METADATA_FIELD_CODEC */ { G_TYPE_STRING, "codec" },
58
/* RB_METADATA_FIELD_BITRATE */ { G_TYPE_ULONG, "bitrate" },
59
/* RB_METADATA_FIELD_TRACK_GAIN */ { G_TYPE_DOUBLE, "replaygain-track-gain" },
60
/* RB_METADATA_FIELD_TRACK_PEAK */ { G_TYPE_DOUBLE, "replaygain-track-peak" },
61
/* RB_METADATA_FIELD_ALBUM_GAIN */ { G_TYPE_DOUBLE, "replaygain-album-gain" },
62
/* RB_METADATA_FIELD_ALBUM_PEAK */ { G_TYPE_DOUBLE, "replaygain-album-peak" },
63
/* RB_METADATA_FIELD_LANGUAGE_CODE */ { G_TYPE_STRING, "language-code" }
28
rb_metadata_get_field_type (RBMetaData *md, RBMetaDataField field)
30
GHashTable *map = g_object_get_data (G_OBJECT (md),
31
"rb-metadata-field-type-map");
34
map = g_hash_table_new (g_direct_hash, g_direct_equal);
35
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TITLE),
36
GINT_TO_POINTER (G_TYPE_STRING));
37
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ARTIST),
38
GINT_TO_POINTER (G_TYPE_STRING));
39
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ALBUM),
40
GINT_TO_POINTER (G_TYPE_STRING));
41
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DATE),
42
GINT_TO_POINTER (G_TYPE_ULONG));
43
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_GENRE),
44
GINT_TO_POINTER (G_TYPE_STRING));
45
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_COMMENT),
46
GINT_TO_POINTER (G_TYPE_STRING));
47
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TRACK_NUMBER),
48
GINT_TO_POINTER (G_TYPE_ULONG));
49
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_MAX_TRACK_NUMBER),
50
GINT_TO_POINTER (G_TYPE_ULONG));
51
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DISC_NUMBER),
52
GINT_TO_POINTER (G_TYPE_ULONG));
53
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_MAX_DISC_NUMBER),
54
GINT_TO_POINTER (G_TYPE_ULONG));
55
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DESCRIPTION),
56
GINT_TO_POINTER (G_TYPE_STRING));
57
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_VERSION),
58
GINT_TO_POINTER (G_TYPE_STRING));
59
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ISRC),
60
GINT_TO_POINTER (G_TYPE_STRING));
61
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ORGANIZATION),
62
GINT_TO_POINTER (G_TYPE_STRING));
63
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_COPYRIGHT),
64
GINT_TO_POINTER (G_TYPE_STRING));
65
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_CONTACT),
66
GINT_TO_POINTER (G_TYPE_STRING));
67
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_LICENSE),
68
GINT_TO_POINTER (G_TYPE_STRING));
69
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_PERFORMER),
70
GINT_TO_POINTER (G_TYPE_STRING));
71
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_DURATION),
72
GINT_TO_POINTER (G_TYPE_ULONG));
73
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_CODEC),
74
GINT_TO_POINTER (G_TYPE_STRING));
75
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_BITRATE),
76
GINT_TO_POINTER (G_TYPE_ULONG));
77
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TRACK_GAIN),
78
GINT_TO_POINTER (G_TYPE_DOUBLE));
79
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_TRACK_PEAK),
80
GINT_TO_POINTER (G_TYPE_DOUBLE));
81
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ALBUM_GAIN),
82
GINT_TO_POINTER (G_TYPE_DOUBLE));
83
g_hash_table_insert (map, GINT_TO_POINTER (RB_METADATA_FIELD_ALBUM_PEAK),
84
GINT_TO_POINTER (G_TYPE_DOUBLE));
85
g_object_set_data_full (G_OBJECT (md), "rb-metadata-field-type-map",
86
map, (GDestroyNotify) g_hash_table_destroy);
88
return GPOINTER_TO_INT (g_hash_table_lookup (map, GINT_TO_POINTER (field)));
67
rb_metadata_get_field_type (RBMetaDataField field)
69
g_assert (field >= 0 && field < RB_METADATA_FIELD_LAST);
70
return field_info[field].type;
74
rb_metadata_get_field_name (RBMetaDataField field)
76
g_assert (field >= 0 && field < RB_METADATA_FIELD_LAST);
77
return field_info[field].name;